Vizitator Paul Galbinasu Postat Noiembrie 4, 2016 Partajează Postat Noiembrie 4, 2016 Salut! Am realizat un montaj cu Arduino UNO pentru a comanda partea de semnalizare si avarii pentru un cart, am scris si codul pentru functionarea acestuia, pe simulator merge ok, dar vreau sa mai adaug un buton si cateva leduri pentru luminile de frana. Deoarece sunt incepator in programare vreau sa ma ajutati sa adaug in program liniile necesare pentru a comanda ledurile de frana independent de starea ledurilor de semnalizare sau avarii. Va multumesc. O simulare in Proteus si explicatiile proiectului am pus pe You-Tube si o puteti viziona aici: https://youtu.be/69j9pz3g7NU Codul pentru Arduino este aici: // Semnalizare simpla cu 2 butoane si 3 functii// // Made by Galbinasu Paul int led = 13; // input pin for the LED int led1 = 12; // input pin for the LED int led2 = 11; // input pin for the LED int led3 = 10; // input pin for the LED int led4 = 9; // input pin for the LED int led5 = 8; // input pin for the LED int led6 = 7; // input pin for the LED int led7 = 6; // input pin for the LED int led8 = 5; // input pin for the LED int led9 = 4; // input pin for the LED int buton1 = 3; // pin intrare semnalizare stanga int buton = 2; // pin intrare semnalizare dreapta void setup() { pinMode(buton1, INPUT); pinMode(buton, INPUT); pinMode(led, OUTPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); pinMode(led8, OUTPUT); pinMode(led9, OUTPUT); digitalWrite(buton,1); // 1=HIGH, 0=LOW semn dr digitalWrite(buton1,1); // 1=HIGH, 0=LOW semn st} void loop(){ int valbuton1 = digitalRead(buton1); // read input value int val = digitalRead(buton); // read input value if (val == LOW && valbuton1 == HIGH) // se aprinde semnal dreapta{ digitalWrite(led4, LOW); // turn the LED on (HIGH is the voltage level) delay(70); // wait for a second digitalWrite(led3, LOW); // turn the LED on (HIGH is the voltage level) delay(70); // wait for a second digitalWrite(led2, LOW); // turn the LED on (HIGH is the voltage level) delay(70); // wait for a second digitalWrite(led1, LOW); // turn the LED on (HIGH is the voltage level) delay(70); // wait for a second digitalWrite(led, LOW); // turn the LED on (HIGH is the voltage level) delay(100); // wait for a second digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(20); // wait for a second digitalWrite(led1, HIGH); // turn the LED on (HIGH is the voltage level) delay(20); // wait for a second digitalWrite(led2, HIGH); // turn the LED on (HIGH is the voltage level) delay(20); // wait for a second digitalWrite(led3, HIGH); // turn the LED on (HIGH is the voltage level) delay(20); // wait for a second digitalWrite(led4, HIGH); // turn the LED off by making the voltage LOW delay(100); // wait for a second } else{ digitalWrite(led4, LOW); // turn the LED off by making the voltage LOW digitalWrite(led3, LOW); // turn the LED off by making the voltage LOW digitalWrite(led2, LOW); // turn the LED off by making the voltage LOW digitalWrite(led1, LOW); // turn the LED off by making the voltage LOW digitalWrite(led, LOW); // turn the LED off by making the voltage LOW } if (valbuton1 == LOW && val == 1) // se aprinde semnal stanga{ digitalWrite(led5, LOW); // turn the LED off by making the voltage LOW delay(70); // wait for a second digitalWrite(led6, LOW); // turn the LED off by making the voltage LOW delay(70); // wait for a second digitalWrite(led7, LOW); // turn the LED off by making the voltage LOW delay(70); // wait for a second digitalWrite(led8, LOW); // turn the LED off by making the voltage LOW delay(70); // wait for a second digitalWrite(led9, LOW); // turn the LED off by making the voltage LOW delay(100); // wait for a second digitalWrite(led9, HIGH); // turn the LED off by making the voltage LOW delay(20); // wait for a second digitalWrite(led8, HIGH); // turn the LED off by making the voltage LOW delay(20); // wait for a second digitalWrite(led7, HIGH); // turn the LED off by making the voltage LOW delay(20); // wait for a second digitalWrite(led6, HIGH); // turn the LED off by making the voltage LOW delay(20); // wait for a second digitalWrite(led5, HIGH); // turn the LED off by making the voltage LOW delay(100); // wait for a second} else{ digitalWrite(led9, LOW); // turn the LED off by making the voltage LOW digitalWrite(led8, LOW); // turn the LED off by making the voltage LOW digitalWrite(led7, LOW); // turn the LED off by making the voltage LOW digitalWrite(led6, LOW); // turn the LED off by making the voltage LOW digitalWrite(led5, LOW); // turn the LED off by making the voltage LOW } if (valbuton1 == LOW && val == LOW) // se ruleaza program de avarii{ digitalWrite(led5, LOW); // turn the LED off by making the voltage LOW digitalWrite(led4, LOW); // turn the LED off by making the voltage LOW delay(40); // wait for a second digitalWrite(led6, LOW); // turn the LED off by making the voltage LOW digitalWrite(led3, LOW); // turn the LED off by making the voltage LOW delay(40); // wait for a second digitalWrite(led7, LOW); // turn the LED off by making the voltage LOW digitalWrite(led2, LOW); // turn the LED off by making the voltage LOW delay(40); // wait for a second digitalWrite(led8, LOW); // turn the LED off by making the voltage LOW digitalWrite(led1, LOW); // turn the LED off by making the voltage LOW delay(40); // wait for a second digitalWrite(led9, LOW); // turn the LED off by making the voltage LOW digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(40); // wait for a second digitalWrite(led9, HIGH); // turn the LED off by making the voltage LOW digitalWrite(led, HIGH); // turn the LED off by making the voltage LOW delay(20); // wait for a second digitalWrite(led8, HIGH); // turn the LED off by making the voltage LOW digitalWrite(led1, HIGH); // turn the LED off by making the voltage LOW delay(20); // wait for a second digitalWrite(led7, HIGH); // turn the LED off by making the voltage LOW digitalWrite(led2, HIGH); // turn the LED off by making the voltage LOW delay(20); // wait for a second digitalWrite(led6, HIGH); // turn the LED off by making the voltage LOW digitalWrite(led3, HIGH); // turn the LED off by making the voltage LOW delay(20); // wait for a second digitalWrite(led5, HIGH); // turn the LED off by making the voltage LOW digitalWrite(led4, HIGH); // turn the LED off by making the voltage LOW delay(220); // wait for a second }} Link spre comentariu
Vizitator Postat Noiembrie 13, 2016 Partajează Postat Noiembrie 13, 2016 (editat) /*Control lumini - Versiune simplificata - www.upx.ro o Semnalizare stanga o Semnalizare dreapta o Stop FRANARE o Semnalizare Avarie *//*Dispunere leduri: STG: (13),(12),(11),(10),(9) DR: (4),(5),(6),(7),(8) Butoanele se leaga la masa(GND) *//*#define btnAvarii A0 #define btnFrana A1 #define btnSemnalizareStg A2 #define btnSemnalizareDr A3 #define ledSt1 13 #define ledSt2 12 #define ledSt3 11 #define ledSt4 10 #define ledSt5 9 #define ledDr1 8 #define ledDr2 7 #define ledDr3 6 #define ledDr4 5 #define ledDr5 4 *///SETUP VARIABLE//////////////////////////////////////////////const unsigned long speedLed = 200UL; const unsigned long pause = 1000UL;///////////////////////////////////////////////END SETUP#define LED_OFF 0#define AVARII 1#define FRANARE 2#define SEMNAL_STG 3#define SEMNAL_DR 4byte runMode = LED_OFF;byte nextStep = 0;uint32_t cMs = 0;uint32_t lstNextStep = 0;byte stAvarii,stFrana, stSemnStg, stSemnDr;boolean flag1 = 0;boolean flag2 = 0;boolean flag3 = 0;boolean flag4 = 0;boolean reverse = 0;void setup() { for (int i=4;i<=13;i++) pinMode(i,OUTPUT); pinMode(A0,INPUT_PULLUP); pinMode(A1,INPUT_PULLUP); pinMode(A2,INPUT_PULLUP); pinMode(A3,INPUT_PULLUP); for (int x=0;x<10;x++){ for (int i=4;i<=13;i++) digitalWrite(i,1); delay(250); for (int i=4;i<=13;i++) digitalWrite(i,0); delay(250); } pwrOffAllLed();}void loop() { readInput(); cMs = millis(); runMode = LED_OFF; if (stSemnStg) runMode = SEMNAL_STG; if (stSemnDr) runMode = SEMNAL_DR; if (stAvarii) runMode = AVARII; if (stFrana) runMode = FRANARE; switch(runMode){ case 0: //LED_OFF pwrOffAllLed(); flag1 = 0; flag2 = 0; flag3 = 0; flag4 = 0; break; case 1: //AVARII if (!flag1) { pwrOffAllLed(); nextStep = 9; reverse = 0; } switch(reverse) { case 0: digitalWrite(nextStep, 1); digitalWrite((nextStep-5), 1); lstNextStep = (cMs + speedLed); nextStep++; if (nextStep > 13) { reverse = 1; lstNextStep = cMs+pause; nextStep--; } break; case 1: digitalWrite(nextStep, 0); digitalWrite((nextStep-5), 0); lstNextStep = (cMs + speedLed); nextStep--; if (nextStep < 9) { reverse = 0; lstNextStep = cMs+pause; nextStep++; } break; } flag1 = 1; flag2 = 0; flag3 = 0; flag4 = 0; break; case 2: //FRANARE if (!flag2) { pwrOffAllLed(); } if ((cMs-lstNextStep)>speedLed) { lstNextStep = cMs; for (int i=4;i<=13;i++) digitalWrite(i,!digitalRead(i)); } flag1 = 0; flag2 = 1; flag3 = 0; flag4 = 0; // PROCEDURA TA DE FRANARE POATE FI CONTINUATA AICI, DAR // NICIODATA NU FOLOSESTI FUNCTIA "delay()" break; case 3: //SEMNAL_STG: 9-13 if (!flag3) { pwrOffAllLed(); nextStep = 9; reverse = 0; } if (cMs>=lstNextStep) { switch(reverse) { case 0: digitalWrite(nextStep, 1); lstNextStep = (cMs + speedLed); nextStep++; if (nextStep > 13) { reverse = 1; lstNextStep = cMs+pause; nextStep--; } break; case 1: digitalWrite(nextStep, 0); lstNextStep = (cMs + speedLed); nextStep--; if (nextStep < 9) { reverse = 0; lstNextStep = cMs+pause; nextStep++; } break; } flag1 = 0; flag2 = 0; flag3 = 1; flag4 = 0; } break; case 4: //SEMNAL_DR: 4-8 if (!flag4) { pwrOffAllLed(); nextStep = 4; reverse = 0; } if (cMs>=lstNextStep) { switch(reverse) { case 0: digitalWrite(nextStep, 1); lstNextStep = (cMs + speedLed); nextStep++; if (nextStep > 8) { reverse = 1; lstNextStep = cMs+pause; nextStep--; } break; case 1: digitalWrite(nextStep, 0); lstNextStep = (cMs + speedLed); nextStep--; if (nextStep < 4) { reverse = 0; lstNextStep = cMs+pause; nextStep++; } break; } flag1 = 0; flag2 = 0; flag3 = 0; flag4 = 1; } break; }//end.switch}void pwrOffAllLed() { for (int i=4;i<=13;i++) digitalWrite(i,0);}void readInput(){ stAvarii = !bitRead(PINC, 0); stFrana = !bitRead(PINC, 1); stSemnStg = !bitRead(PINC, 2); stSemnDr = !bitRead(PINC, 3);} banuiesc ca sti ca fiecare LED este inseriat cu cate o rezistenta de aproximativ 220R bafta. Editat Noiembrie 13, 2016 de Vizitator Link spre comentariu
Vizitator Paul Galbinasu Postat Noiembrie 19, 2016 Partajează Postat Noiembrie 19, 2016 Multumesc mult Aw Genetix pentru varianta simplificata si oarecum apropiata de ce vreau eu, am realizat-o si merge bine. Spun oarecum deoarece eu vreau ca pentru frina sa nu folosesc becurile de semnalizare. In montajul tau raman 4 porturi digitale (0,1,2.3) nefolosite si vreau ca sa pun acolo ledurile de frana. Crezi ca se poate face asta? Multumesc mult Link spre comentariu
Vizitator Postat Noiembrie 19, 2016 Partajează Postat Noiembrie 19, 2016 (editat) se poate. dar ar fi recomandat sa folosesti: (2,3,A4,A5) doar ca o sa ai doar 4 canale., pentru un joc de lumini pe care l-ai descris mai complex. daca nu te descurci, zi-mi ce vrei sa faca si incerc sa rescriu o versiune sumara ar fi cam asa /*Control lumini - Versiune simplificata - www.upx.ro o Semnalizare stanga o Semnalizare dreapta o Stop FRANARE o Semnalizare Avarie *//*Dispunere leduri: STG: (13),(12),(11),(10),(9) DR: (4),(5),(6),(7),(8) FRANA: (2), (3), (A4), (A5) Butoanele se leaga la masa(GND) *//*#define btnAvarii A0 #define btnFrana A1 #define btnSemnalizareStg A2 #define btnSemnalizareDr A3 #define ledSt1 13 #define ledSt2 12 #define ledSt3 11 #define ledSt4 10 #define ledSt5 9 #define ledDr1 8 #define ledDr2 7 #define ledDr3 6 #define ledDr4 5 #define ledDr5 4 */ #define ledFr1 2 #define ledFr2 3 #define ledFr3 A4 #define ledFr4 A5//SETUP VARIABLE//////////////////////////////////////////////const unsigned long speedLed = 200UL; const unsigned long pause = 1000UL;const unsigned long speedFrana = 250UL;///////////////////////////////////////////////END SETUP#define LED_OFF 0#define AVARII 1#define SEMNAL_STG 2#define SEMNAL_DR 3byte runMode = LED_OFF;byte nextStep = 0;uint32_t cMs = 0;uint32_t lstNextStep = 0;uint32_t lstFranareTmr = 0;byte stAvarii,stFrana, stSemnStg, stSemnDr;boolean flag1 = 0;boolean flag2 = 0;boolean flag3 = 0;boolean flag4 = 0;boolean reverse = 0;boolean stLedFrana = 0;;void setup() { for (int i=2;i<=13;i++) pinMode(i,OUTPUT); pinMode(A0,INPUT_PULLUP); pinMode(A1,INPUT_PULLUP); pinMode(A2,INPUT_PULLUP); pinMode(A3,INPUT_PULLUP); pinMode(A4,OUTPUT); pinMode(A5,OUTPUT); for (int x=0;x<10;x++){ for (int i=4;i<=13;i++) digitalWrite(i,1); delay(250); for (int i=4;i<=13;i++) digitalWrite(i,0); delay(250); } pwrOffAllLed();}void loop() { readInput(); cMs = millis(); runMode = LED_OFF; if (stSemnStg) runMode = SEMNAL_STG; if (stSemnDr) runMode = SEMNAL_DR; if (stAvarii) runMode = AVARII; if (stFrana) franare(); else pwrOffAllFrana(); switch(runMode){ case 0: //LED_OFF pwrOffAllLed(); flag1 = 0; flag2 = 0; flag3 = 0; flag4 = 0; break; case 1: //AVARII if (!flag1) { pwrOffAllLed(); nextStep = 9; reverse = 0; } switch(reverse) { case 0: digitalWrite(nextStep, 1); digitalWrite((nextStep-5), 1); lstNextStep = (cMs + speedLed); nextStep++; if (nextStep > 13) { reverse = 1; lstNextStep = cMs+pause; nextStep--; } break; case 1: digitalWrite(nextStep, 0); digitalWrite((nextStep-5), 0); lstNextStep = (cMs + speedLed); nextStep--; if (nextStep < 9) { reverse = 0; lstNextStep = cMs+pause; nextStep++; } break; } flag1 = 1; flag2 = 0; flag3 = 0; flag4 = 0; break; case 2: //SEMNAL_STG: 9-13 if (!flag3) { pwrOffAllLed(); nextStep = 9; reverse = 0; } if (cMs>=lstNextStep) { switch(reverse) { case 0: digitalWrite(nextStep, 1); lstNextStep = (cMs + speedLed); nextStep++; if (nextStep > 13) { reverse = 1; lstNextStep = cMs+pause; nextStep--; } break; case 1: digitalWrite(nextStep, 0); lstNextStep = (cMs + speedLed); nextStep--; if (nextStep < 9) { reverse = 0; lstNextStep = cMs+pause; nextStep++; } break; } flag1 = 0; flag2 = 0; flag3 = 1; flag4 = 0; } break; case 3: //SEMNAL_DR: 4-8 if (!flag4) { pwrOffAllLed(); nextStep = 4; reverse = 0; } if (cMs>=lstNextStep) { switch(reverse) { case 0: digitalWrite(nextStep, 1); lstNextStep = (cMs + speedLed); nextStep++; if (nextStep > 8) { reverse = 1; lstNextStep = cMs+pause; nextStep--; } break; case 1: digitalWrite(nextStep, 0); lstNextStep = (cMs + speedLed); nextStep--; if (nextStep < 4) { reverse = 0; lstNextStep = cMs+pause; nextStep++; } break; } flag1 = 0; flag2 = 0; flag3 = 0; flag4 = 1; } break; }//end.switch}void pwrOffAllLed() { for (int i=4;i<=13;i++) digitalWrite(i,0);}void readInput(){ stAvarii = !bitRead(PINC, 0); stFrana = !bitRead(PINC, 1); stSemnStg = !bitRead(PINC, 2); stSemnDr = !bitRead(PINC, 3);}void pwrOffAllFrana() { digitalWrite(ledFr1,0); digitalWrite(ledFr2,0); digitalWrite(ledFr3,0); digitalWrite(ledFr4,0); stLedFrana = 0;}void franare() { if ((cMs-lstFranareTmr)>speedFrana) { lstFranareTmr = cMs; stLedFrana = !stLedFrana; digitalWrite(ledFr1,stLedFrana); digitalWrite(ledFr2,stLedFrana); digitalWrite(ledFr3,stLedFrana); digitalWrite(ledFr4,stLedFrana); }} Editat Noiembrie 19, 2016 de Vizitator Link spre comentariu
Vizitator Postat Noiembrie 19, 2016 Partajează Postat Noiembrie 19, 2016 (editat) chiar daca ma repet. renunta la delay() pentru totdeauna. chiar daca vei folosi intreruperi mai tarziu, uita ca exista functia delay(); gandeste programele in bucla, gandeste ca procesorul repeta aceasi secventa la nesfarsit, doar ca tu poti jongla cu variabile si poti gestiona fiecare pas(repetitie). dar nu-l opri niciodata (pe procesor), pentru ca te vei auto-limita la un fir de executie. nu am vrut sa-ti pun butoanele pe intreruperi pentru ca se complica si nu are sens in cazul aplicatiei tale. vroiam sa si intelegi ce am scris. bitRead(PINC, 0); este echivalent cu digitalRead(A0); doar ca se intampla mai repede. semnul exclamarii inverseaza state-ul citit. daca citeste 1 rezultatul lui va fi 0 si invers. in cazul de fata vroiam sa simplific starea butonului care era sa spunem NC(normal close) in NO(normal open) am gasit o eroare la flag4 asa ca foloseste codul acesta: /*Control lumini - Versiune simplificata - www.upx.ro o Semnalizare stanga o Semnalizare dreapta o Stop FRANARE o Semnalizare Avarie *//*Dispunere leduri: STG: (13),(12),(11),(10),(9) DR: (4),(5),(6),(7),(8) FRANA: (2), (3), (A4), (A5) Butoanele se leaga la masa(GND) *//*#define btnAvarii A0 #define btnFrana A1 #define btnSemnalizareStg A2 #define btnSemnalizareDr A3 #define ledSt1 13 #define ledSt2 12 #define ledSt3 11 #define ledSt4 10 #define ledSt5 9 #define ledDr1 8 #define ledDr2 7 #define ledDr3 6 #define ledDr4 5 #define ledDr5 4 */ #define ledFr1 2 #define ledFr2 3 #define ledFr3 A4 #define ledFr4 A5//SETUP VARIABLE//////////////////////////////////////////////const unsigned long speedLed = 200UL; const unsigned long pause = 1000UL;const unsigned long speedFrana = 250UL;///////////////////////////////////////////////END SETUP#define LED_OFF 0#define AVARII 1#define SEMNAL_STG 2#define SEMNAL_DR 3byte runMode = LED_OFF;byte nextStep = 0;uint32_t cMs = 0;uint32_t lstNextStep = 0;uint32_t lstFranareTmr = 0;byte stAvarii,stFrana, stSemnStg, stSemnDr;boolean flag1 = 0;boolean flag2 = 0;boolean flag3 = 0;boolean reverse = 0;boolean stLedFrana = 0;;void setup() { for (int i=2;i<=13;i++) pinMode(i,OUTPUT); pinMode(A0,INPUT_PULLUP); pinMode(A1,INPUT_PULLUP); pinMode(A2,INPUT_PULLUP); pinMode(A3,INPUT_PULLUP); pinMode(A4,OUTPUT); pinMode(A5,OUTPUT); for (int x=0;x<10;x++){ for (int i=4;i<=13;i++) digitalWrite(i,1); delay(250); for (int i=4;i<=13;i++) digitalWrite(i,0); delay(250); } pwrOffAllLed();}void loop() { readInput(); cMs = millis(); runMode = LED_OFF; if (stSemnStg) runMode = SEMNAL_STG; if (stSemnDr) runMode = SEMNAL_DR; if (stAvarii) runMode = AVARII; if (stFrana) franare(); else pwrOffAllFrana(); switch(runMode){ case 0: //LED_OFF pwrOffAllLed(); flag1 = 0; flag2 = 0; flag3 = 0; break; case 1: //AVARII if (!flag1) { pwrOffAllLed(); nextStep = 9; reverse = 0; } switch(reverse) { case 0: digitalWrite(nextStep, 1); digitalWrite((nextStep-5), 1); lstNextStep = (cMs + speedLed); nextStep++; if (nextStep > 13) { reverse = 1; lstNextStep = cMs+pause; nextStep--; } break; case 1: digitalWrite(nextStep, 0); digitalWrite((nextStep-5), 0); lstNextStep = (cMs + speedLed); nextStep--; if (nextStep < 9) { reverse = 0; lstNextStep = cMs+pause; nextStep++; } break; } flag1 = 1; flag2 = 0; flag3 = 0; break; case 2: //SEMNAL_STG: 9-13 if (!flag2) { pwrOffAllLed(); nextStep = 9; reverse = 0; } if (cMs>=lstNextStep) { switch(reverse) { case 0: digitalWrite(nextStep, 1); lstNextStep = (cMs + speedLed); nextStep++; if (nextStep > 13) { reverse = 1; lstNextStep = cMs+pause; nextStep--; } break; case 1: digitalWrite(nextStep, 0); lstNextStep = (cMs + speedLed); nextStep--; if (nextStep < 9) { reverse = 0; lstNextStep = cMs+pause; nextStep++; } break; } flag1 = 0; flag2 = 1; flag3 = 0; } break; case 3: //SEMNAL_DR: 4-8 if (!flag3) { pwrOffAllLed(); nextStep = 4; reverse = 0; } if (cMs>=lstNextStep) { switch(reverse) { case 0: digitalWrite(nextStep, 1); lstNextStep = (cMs + speedLed); nextStep++; if (nextStep > 8) { reverse = 1; lstNextStep = cMs+pause; nextStep--; } break; case 1: digitalWrite(nextStep, 0); lstNextStep = (cMs + speedLed); nextStep--; if (nextStep < 4) { reverse = 0; lstNextStep = cMs+pause; nextStep++; } break; } flag1 = 0; flag2 = 0; flag3 = 1; } break; }//end.switch}void pwrOffAllLed() { for (int i=4;i<=13;i++) digitalWrite(i,0);}void pwrOffAllFrana() { digitalWrite(ledFr1,0); digitalWrite(ledFr2,0); digitalWrite(ledFr3,0); digitalWrite(ledFr4,0); stLedFrana = 0;}void franare() { if ((cMs-lstFranareTmr)>speedFrana) { lstFranareTmr = cMs; stLedFrana = !stLedFrana; digitalWrite(ledFr1,stLedFrana); digitalWrite(ledFr2,stLedFrana); digitalWrite(ledFr3,stLedFrana); digitalWrite(ledFr4,stLedFrana); }}void readInput(){ stAvarii = !bitRead(PINC, 0); stFrana = !bitRead(PINC, 1); stSemnStg = !bitRead(PINC, 2); stSemnDr = !bitRead(PINC, 3);} Editat Noiembrie 19, 2016 de Vizitator Link spre comentariu
Vizitator Paul Galbinasu Postat Noiembrie 19, 2016 Partajează Postat Noiembrie 19, 2016 Multumesc mult pentru ajutor Aw Genetix, ultima varianta imi satisface dorintele dar are o mica problema, luminile de avarii raman aprinse fara a flash-a iar luminile de frana flash-eaza, nu raman aprinse permanent. Crezi ca se poate face ceva in sensul acesta? Eu am tot incercat sa imi dau seama ce trebuie modificat dar nu am gasit, trebuie sa ma pun la punct cu aceste variabile, si sa reusesc sa le inteleg. Iti multumesc. Link spre comentariu
Vizitator Postat Noiembrie 19, 2016 Partajează Postat Noiembrie 19, 2016 (editat) flash pe frana , asa e facut programul, dar daca doresti pot sa-l fac ON/OFF referitor la avarii, verifica inca o data daca ai ledurile bine legate si totul. eu am facut simulare in ISIS, si e ok, cu exceptia ca in simulare nu ai timp real. in orice caz, poftim versiune in care din setari poti alege franare simpla, sau puls. /*Control lumini - Versiune simplificata - www.upx.ro o Semnalizare stanga o Semnalizare dreapta o Stop FRANARE o Semnalizare Avarie *//*Dispunere leduri: STG: (13),(12),(11),(10),(9) DR: (4),(5),(6),(7),(8) FRANA: (2), (3), (A4), (A5) Butoanele se leaga la masa(GND) *//*#define btnAvarii A0 #define btnFrana A1 #define btnSemnalizareStg A2 #define btnSemnalizareDr A3 #define ledSt1 13 #define ledSt2 12 #define ledSt3 11 #define ledSt4 10 #define ledSt5 9 #define ledDr1 8 #define ledDr2 7 #define ledDr3 6 #define ledDr4 5 #define ledDr5 4 */ #define ledFr1 2 #define ledFr2 3 #define ledFr3 A4 #define ledFr4 A5//SETUP VARIABLE//////////////////////////////////////////////const unsigned long speedLed = 200UL; const unsigned long pause = 1000UL;const unsigned long speedFrana = 250UL;const boolean franareSimpla = true;///////////////////////////////////////////////END SETUP#define LED_OFF 0#define AVARII 1#define SEMNAL_STG 2#define SEMNAL_DR 3byte runMode = LED_OFF;byte nextStep = 0;uint32_t cMs = 0;uint32_t lstNextStep = 0;uint32_t lstFranareTmr = 0;byte stAvarii,stFrana, stSemnStg, stSemnDr;boolean flag1 = 0;boolean flag2 = 0;boolean flag3 = 0;boolean reverse = 0;boolean stLedFrana = 0;;void setup() { for (int i=2;i<=13;i++) pinMode(i,OUTPUT); pinMode(A0,INPUT_PULLUP); pinMode(A1,INPUT_PULLUP); pinMode(A2,INPUT_PULLUP); pinMode(A3,INPUT_PULLUP); pinMode(A4,OUTPUT); pinMode(A5,OUTPUT); for (int x=0;x<10;x++){ for (int i=4;i<=13;i++) digitalWrite(i,1); delay(250); for (int i=4;i<=13;i++) digitalWrite(i,0); delay(250); } pwrOffAllLed();}void loop() { readInput(); cMs = millis(); runMode = LED_OFF; if (stSemnStg) runMode = SEMNAL_STG; if (stSemnDr) runMode = SEMNAL_DR; if (stAvarii) runMode = AVARII; if (stFrana) franare(); else pwrOffAllFrana(); switch(runMode){ case 0: //LED_OFF pwrOffAllLed(); flag1 = 0; flag2 = 0; flag3 = 0; break; case 1: //AVARII if (!flag1) { pwrOffAllLed(); nextStep = 9; reverse = 0; } if (cMs>=lstNextStep) { switch(reverse) { case 0: digitalWrite(nextStep, 1); digitalWrite((nextStep-5), 1); lstNextStep = (cMs + speedLed); nextStep++; if (nextStep > 13) { reverse = 1; lstNextStep = cMs+pause; nextStep--; } break; case 1: digitalWrite(nextStep, 0); digitalWrite((nextStep-5), 0); lstNextStep = (cMs + speedLed); nextStep--; if (nextStep < 9) { reverse = 0; lstNextStep = cMs+pause; nextStep++; } break; } flag1 = 1; flag2 = 0; flag3 = 0; } break; case 2: //SEMNAL_STG: 9-13 if (!flag2) { pwrOffAllLed(); nextStep = 9; reverse = 0; } if (cMs>=lstNextStep) { switch(reverse) { case 0: digitalWrite(nextStep, 1); lstNextStep = (cMs + speedLed); nextStep++; if (nextStep > 13) { reverse = 1; lstNextStep = cMs+pause; nextStep--; } break; case 1: digitalWrite(nextStep, 0); lstNextStep = (cMs + speedLed); nextStep--; if (nextStep < 9) { reverse = 0; lstNextStep = cMs+pause; nextStep++; } break; } flag1 = 0; flag2 = 1; flag3 = 0; } break; case 3: //SEMNAL_DR: 4-8 if (!flag3) { pwrOffAllLed(); nextStep = 4; reverse = 0; } if (cMs>=lstNextStep) { switch(reverse) { case 0: digitalWrite(nextStep, 1); lstNextStep = (cMs + speedLed); nextStep++; if (nextStep > 8) { reverse = 1; lstNextStep = cMs+pause; nextStep--; } break; case 1: digitalWrite(nextStep, 0); lstNextStep = (cMs + speedLed); nextStep--; if (nextStep < 4) { reverse = 0; lstNextStep = cMs+pause; nextStep++; } break; } flag1 = 0; flag2 = 0; flag3 = 1; } break; }//end.switch}void pwrOffAllLed() { for (int i=4;i<=13;i++) digitalWrite(i,0);}void pwrOffAllFrana() { digitalWrite(ledFr1,0); digitalWrite(ledFr2,0); digitalWrite(ledFr3,0); digitalWrite(ledFr4,0); stLedFrana = 0;}void franare() {if (franareSimpla) { digitalWrite(ledFr1,1); digitalWrite(ledFr2,1); digitalWrite(ledFr3,1); digitalWrite(ledFr4,1);} else { if ((cMs-lstFranareTmr)>speedFrana) { lstFranareTmr = cMs; stLedFrana = !stLedFrana; digitalWrite(ledFr1,stLedFrana); digitalWrite(ledFr2,stLedFrana); digitalWrite(ledFr3,stLedFrana); digitalWrite(ledFr4,stLedFrana); } } }void readInput(){ stAvarii = !bitRead(PINC, 0); stFrana = !bitRead(PINC, 1); stSemnStg = !bitRead(PINC, 2); stSemnDr = !bitRead(PINC, 3);} daca doresti sa pulseze pe frana schimbi const boolean franareSimpla = true; in const boolean franareSimpla = false; Editat Noiembrie 19, 2016 de Vizitator Link spre comentariu
Vizitator Paul Galbinasu Postat Noiembrie 21, 2016 Partajează Postat Noiembrie 21, 2016 Ultimul cod functioneaza perfect, multumesc mult pentru ajutor. Link spre comentariu
Vizitator Postat Noiembrie 21, 2016 Partajează Postat Noiembrie 21, 2016 sa-ti fie de bine. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum