Program pre generátor signálu benzínových vstrekovačov

|

RadoKe

Člen
Registrovaný člen
Člen od
16 Mar 2021
Príspevkov
44
Reakčné skóre
60
Bodov
23
Paragraf (§)
Amatér bez elektrotechnického vzdelania
Nájde sa dobrá duša ktorá vie programovať arduino a skontroluje kód na stránke ? Našiel som to pri hľadaní zapojenia generátora signálu a programovanie je nad moje schopnosti. V diskusii totiž niekdo argumentuje nefunkčnosťou kódu, tak by som sa nerád pustil do projektu od J.Cimrmana :)
 

robertpavlik

Člen
Registrovaný člen
Člen od
2 Jan 2020
Príspevkov
40
Reakčné skóre
95
Bodov
23
Paragraf (§)
§23 Elektrotechnik na riadenie činnosti alebo prevádzky
Tu je ťažko radiť. Nakoľko sám autor projektu očividne nepoužíva angličtinu a asi ani po anglicky správne nevie hovoriť a písať, kód je v španielčine (portugalčine, alebo neviem v čom) a väčšina diskutujúcich tvrdí, že program nefunguje, že sú rozdiely v schéme a v reálnom zapojení a tiež že nesedí program so schémou (vstupy) a on si ide svoje že copy paste a pôjde to, tak tomu nedávam šancu. Radšej by som sa poobzeral po inom projekte, prípadne skúsil svoju vlastnú realizáciu. Arduino je úplne jednoduché a dá sa s ním zvládnuť čokoľvek.
 

robertpavlik

Člen
Registrovaný člen
Člen od
2 Jan 2020
Príspevkov
40
Reakčné skóre
95
Bodov
23
Paragraf (§)
§23 Elektrotechnik na riadenie činnosti alebo prevádzky
Keď budem mať viac času a nebude vonku dobré počasie, tak sa na to skúsim pozrieť obšírnejšie. Budem si musieť poprekladať tie jeho názvy premenných a spravím diagnostiku programu cez nejaký simulátor.
 

RadoKe

Člen
Registrovaný člen
Člen od
16 Mar 2021
Príspevkov
44
Reakčné skóre
60
Bodov
23
Paragraf (§)
Amatér bez elektrotechnického vzdelania
robertpavlik: Ak by si ten čas obetoval budem vďačný, programovanie je pre mňa španielska dedina. A pokial ide o vlastnú realizáciu tak to som tiež skeptický, by som bol schopný postaviť to z relátok bo na škole sme nič iné ako relátkové riešenia nerobili :))) Telefónne ústredne, zabezpečovačka na dráhe, tony relátok, kilometre drátov, záložný zdroj to bol bazén kyseliny veľkosti basketbalového ihriska a v ňom olovené dosky...
 

robertpavlik

Člen
Registrovaný člen
Člen od
2 Jan 2020
Príspevkov
40
Reakčné skóre
95
Bodov
23
Paragraf (§)
§23 Elektrotechnik na riadenie činnosti alebo prevádzky
Tak som to trochu prechádzal a na rovinu - som z jeho kódu jeleň. Je tam veľa chýb - aj syntaktických a pre mňa (a asi pre každého programátora) je jednoduchšie napísať nový program, ako prelúskavať kód po niekom (naviac okomentovaný nie v angličtine). Skús pohľadať niečo iné, alebo prípadne skús sám - naozaj je Arduino (prípadne aj Raspberry) jednoduché - vlastne programovanie všeobecne, ako také je jednoduché.
 

RadoKe

Člen
Registrovaný člen
Člen od
16 Mar 2021
Príspevkov
44
Reakčné skóre
60
Bodov
23
Paragraf (§)
Amatér bez elektrotechnického vzdelania
Tak som nejak tušil že to bude chobotina a stiahol arduino ide, keď bude čas skúsim nainštalovať a zmaturovať. Je tam kopa zapojení a príkladov, čo som zatieľ zbežne pozrel adresár examples. Každopádne ďakujem za ochotu pomôcť.
 

RadoKe

Člen
Registrovaný člen
Člen od
16 Mar 2021
Príspevkov
44
Reakčné skóre
60
Bodov
23
Paragraf (§)
Amatér bez elektrotechnického vzdelania
@robertpavlik mám ešte jednu otázku, skúmam IDE asi hodinu a nedalo mi nakŕmiť ho tým kódom keďže vie odhaľovať chyby. Autorský kód je ich plný, podľa popisu autora je to spôsobené ctrl C+ ctrl V zo stránky, pravdepodobne to domrvil pri pastovaní. Druhý, kód očistený od hatmatilky čo tam zavesil diskutujúci IDE skompiluje bez remcania. Otázka teda znie, je IDE dostatočne múdre aby nekompilovalo nefunkčný program ?

Code:
//============================================================================================
//VARIABLES GLOBALES y CONSTANTES
//============================================================================================
const int b_800rpm = 8;
const int b_1500rpm = 7;
const int b_3600rpm = 10;
const int b_5000rpm = 11;
const int b_salir = 4;
const int b_consflujo = 3; //boton flujo constante al presionar
const int LEDReady = 13; //Indicador Ready
const int LedRPM = 6; //Indicador RPM en funcionamiento
const int LED800rpm = 5; //Indicador 800rpm
const int LED1500rpm = 2; //Indicador 1500rpm
const int LED3600rpm = 12; //Indicador 3600rpm
const int LED5000rpm = A0; //Indicador 5000rpm
const int inject1 = 9; //pin de injeccion pin9
//estas variables guardan el flash pattern
int inject_State = LOW; // estado utilizado para setear el pin
unsigned long previousMillis = 0; // sera guardara la ultima vez que el pin injeccion fue actualizado
//Estados de pin Entradas (botones)
int eb_800rpm;
int eb_1500rpm;
int eb_3600rpm;
int eb_5000rpm;
//int eb_usonido;
int eb_salir;
int eb_consflujo;
//============================================================================================
//SETUP
//============================================================================================
void setup() {
//entradas
pinMode (b_800rpm, INPUT);
pinMode (b_1500rpm, INPUT);
pinMode (b_3600rpm, INPUT);
pinMode (b_5000rpm, INPUT);
pinMode (b_salir, INPUT);
pinMode (b_consflujo, INPUT);
//pinMode (b_usonido, INPUT);
//Salidas
pinMode (LEDReady, OUTPUT);
pinMode (LedRPM, OUTPUT);
pinMode (inject1, OUTPUT);
pinMode (LED800rpm, OUTPUT);
pinMode (LED1500rpm, OUTPUT);
pinMode (LED3600rpm, OUTPUT);
pinMode (LED5000rpm, OUTPUT);
// analogReference(INTERNAL);
Serial.begin(9600);
digitalWrite (LEDReady, HIGH);
}
//============================================================================================
//VOID LOOP
//============================================================================================
void loop() {
eb_800rpm = digitalRead(b_800rpm);
eb_1500rpm = digitalRead(b_1500rpm);
eb_3600rpm = digitalRead(b_3600rpm);
eb_5000rpm = digitalRead(b_5000rpm);
//eb_usonido = digitalRead(b_usonido);
eb_salir = digitalRead(b_salir);
eb_consflujo = digitalRead(b_consflujo);
//SELECCION DE SUB RUTINAS - FUNCIONES DE PULSOS
//activa a 800rpm
if (eb_800rpm == HIGH)
{
Pulse_800rpm();
}
//activa a 1500rpm
if (eb_1500rpm == HIGH)
{
Pulse_1500rpm ();
}
//activa a 3600rpm
if (eb_3600rpm == HIGH)
{
Pulse_3600rpm ();
}
//activa a 5000rpm
if (eb_5000rpm == HIGH)
{
Pulse_5000rpm ();
}
//activa inject1 mientras este presionado luego apaga al soltar el boton
if (eb_consflujo == HIGH)
{
digitalWrite(inject1, HIGH);
}
else
{
digitalWrite(inject1, LOW);
}
/* //activa el limpiador ultrasonido
if (eb_usonido == HIGH)
{
u_sonido ();
}
*/
} //cierra el void loop()
//============================================================================================
//SUB RUTINAS
//============================================================================================
void Pulse_800rpm() {
afuera:
delay(300);
for (; ;) { //800RPM aproximadamente Modo IDLE
digitalWrite(LedRPM, HIGH);
digitalWrite(LED800rpm, HIGH);
eb_salir = digitalRead(b_salir);
long OnTime = 76; // tiempo encendido en milisegundos
long OffTime = 61; // tiempo apagado en milisegundos
// verifica si cambio el tiempo del estado del pin de injeccion
unsigned long currentMillis = millis();
if ((inject_State == HIGH) && (currentMillis - previousMillis >= OnTime))
{
inject_State = LOW; // lo apaga
previousMillis = currentMillis; // Recuerda el tiempo
digitalWrite(inject1, inject_State); // actualiza el Inject1 actual
}
else if ((inject_State == LOW) && (currentMillis - previousMillis >= OffTime))
{
inject_State = HIGH; // lo encuende
previousMillis = currentMillis; // Rercuerda el tiempo
digitalWrite(inject1, inject_State); // actualiza el Inject1 actual
}
else if (eb_salir == HIGH) {
digitalWrite(LedRPM, LOW); //apaga el led RPM
digitalWrite(LED800rpm, LOW);
break;
}
}
}
void Pulse_1500rpm() {
afuera:
delay(300);
for (; ;) { //1500RPM
digitalWrite(LedRPM, HIGH);
digitalWrite(LED1500rpm, HIGH);
eb_salir = digitalRead(b_salir);
long OnTime = 40; // tiempo encendido en milisegundos
long OffTime = 32; // tiempo apagado en milisegundos
// verifica si cambio el tiempo del estado del pin de injeccion
unsigned long currentMillis = millis();
if ((inject_State == HIGH) && (currentMillis - previousMillis >= OnTime))
{
inject_State = LOW; // lo apaga
previousMillis = currentMillis; // Recuerda el tiempo
digitalWrite(inject1, inject_State); // actualiza el Inject1 actual
}
else if ((inject_State == LOW) && (currentMillis - previousMillis >= OffTime))
{
inject_State = HIGH; // lo encuende
previousMillis = currentMillis; // Rercuerda el tiempo
digitalWrite(inject1, inject_State); // actualiza el Inject1 actual
}
else if (eb_salir == HIGH) {
digitalWrite(LedRPM, LOW); //apaga el led RPM
digitalWrite(LED1500rpm, LOW);
break;
}
}
}
void Pulse_3600rpm() {
afuera:
delay(300);
for (; ;) { //3600RPM
digitalWrite(LedRPM, HIGH);
digitalWrite(LED3600rpm, HIGH);
eb_salir = digitalRead(b_salir);
long OnTime = 16.6; // tiempo encendido en milisegundos
long OffTime = 13.28; // tiempo apagado en milisegundos
// verifica si cambio el tiempo del estado del pin de injeccion
unsigned long currentMillis = millis();
if ((inject_State == HIGH) && (currentMillis - previousMillis >= OnTime))
{
inject_State = LOW; // lo apaga
previousMillis = currentMillis; // Recuerda el tiempo
digitalWrite(inject1, inject_State); // actualiza el Inject1 actual
}
else if ((inject_State == LOW) && (currentMillis - previousMillis >= OffTime))
{
inject_State = HIGH; // lo encuende
previousMillis = currentMillis; // Rercuerda el tiempo
digitalWrite(inject1, inject_State); // actualiza el Inject1 actual
}
else if (eb_salir == HIGH) {
digitalWrite(LedRPM, LOW); //apaga el led RPM
digitalWrite(LED3600rpm, LOW);
break;
}
}
}
void Pulse_5000rpm() {
afuera:
delay(300);
for (; ;) { //5000RPM
digitalWrite(LedRPM, HIGH);
digitalWrite(LED5000rpm, HIGH);
eb_salir = digitalRead(b_salir);
long OnTime = 10.52; // tiempo encendido en milisegundos
long OffTime = 8.4; // tiempo apagado en milisegundos
// verifica si cambio el tiempo del estado del pin de injeccion
unsigned long currentMillis = millis();
if ((inject_State == HIGH) && (currentMillis - previousMillis >= OnTime))
{
inject_State = LOW; // lo apaga
previousMillis = currentMillis; // Recuerda el tiempo
digitalWrite(inject1, inject_State); // actualiza el Inject1 actual
}
else if ((inject_State == LOW) && (currentMillis - previousMillis >= OffTime))
{
inject_State = HIGH; // lo encuende
previousMillis = currentMillis; // Rercuerda el tiempo
digitalWrite(inject1, inject_State); // actualiza el Inject1 actual
}
else if (eb_salir == HIGH) {
digitalWrite(LedRPM, LOW); //apaga el led RPM
digitalWrite(LED5000rpm, LOW);
break;
}
}
}
 

robertpavlik

Člen
Registrovaný člen
Člen od
2 Jan 2020
Príspevkov
40
Reakčné skóre
95
Bodov
23
Paragraf (§)
§23 Elektrotechnik na riadenie činnosti alebo prevádzky
@RadoKe IDE dokáže rozpoznať syntaktické chyby, prípadne chyby v štruktúre. Či je program funkčný IDE nedokáže zistiť - nevie, či to, čo chce programátor dosiahnuť je správne. Ak chcem napríklad robiť sčítanie a pomýlim sa v znamienku, IDE je to jedno. Ono si urobí svoju prácu a vykoná operáciu so znamienkom, ktoré som napísal. Potom však program môže padať, pretože môže dôjsť ku pretečeniu definovaných premenných. Na toto sa však dá prísť už len za behu programu. Ak mám napríklad premennú definovanú ako INT, kde maximálna hodnota môže byť 32767 a môj výsledok bude vyšší, tak premenná pretečie a program padne do stopu. Toto si musí kontrolovať programátor, aby naozaj správne definoval všetky premenné. Pretečenie je len jeden príklad chýb, ktoré môžu nastať.
 

RadoKe

Člen
Registrovaný člen
Člen od
16 Mar 2021
Príspevkov
44
Reakčné skóre
60
Bodov
23
Paragraf (§)
Amatér bez elektrotechnického vzdelania
Tož som sa nakoniec donútil a vyskúšal, funguje. Treba si pozrieť v programe ako sú definované piny pre led a pre switch lebo popisky v schéme sú odfláknuté. Ešte napojiť "silovú" časť a môžem ultrazvukovať. :love:

Ak chcete vidieť médiá, musíte sa zaregistrovať
 
E-shop ElektroLab.eu
Top