LeKeR Napisano Luty 4, 2022 Udostępnij Napisano Luty 4, 2022 (edytowany) Witam wszystkich Po napisaniu działającego programu dla 30 przycisków i 28 LEDów i jego sprawdzeniu, natrafiłem na problem z samoczynnym "włączaniem" się przycisków. Dokładnie chodzi o to że np. jak wcisnę przycisk P22a na pinie D22 który wywołuje mi zapalenie LED22a to podczas przyciśnięcia P22a "przyciska" mi się również przycisk P0a na pinie D0. Pomimo tego że w ogóle nie został nawet dotknięty. Nawet jak odpiąłem wszystko inne od Arduino i wpiąłem się bezpośrednio do płytki do dalej występuje ten efekt. Brakuje mi pomysłu czemu tak się dzieje że Arduino samo zmienia stany na wejściach mimo tego że ma poprawnie skonfigurowane piny Oto działający kod. Czy może ktoś wgrać go swojego Arduino Mega i zobaczyć czy jest taki sam problem? #include <Bounce2.h> unsigned long aktualnyCzas = 0; unsigned long czasDrgania = 0; const int button1a = 0; const int button1b = 1; const int ledPin1a = 30; const int ledPin1b = 31; bool LED1a = LOW; bool LED1b = LOW; unsigned long czasLED1a = 0; unsigned long czasLED1b = 0; Bounce p1a = Bounce(); Bounce p1b = Bounce(); const int button6a = 18; const int button6b = 19; const int button6c = 20; const int button6d = 21; const int button6e = 22; const int button6f = 23; const int ledPin6a = 48; const int ledPin6b = 49; const int ledPin6c = 50; const int ledPin6d = 51; bool LED6a = LOW; bool LED6b = LOW; bool LED6c = LOW; bool LED6d = LOW; bool LED6e = LOW; bool LED6f = LOW; unsigned long czasLED6a = 0; unsigned long czasLED6b = 0; unsigned long czasLED6c = 0; unsigned long czasLED6d = 0; unsigned long czasLED6e = 0; unsigned long czasLED6f = 0; Bounce p6a = Bounce(); Bounce p6b = Bounce(); Bounce p6c = Bounce(); Bounce p6d = Bounce(); Bounce p6e = Bounce(); Bounce p6f = Bounce(); void setup() { Serial.begin(9600); pinMode(30, OUTPUT); digitalWrite(30, LOW); pinMode(31, OUTPUT); digitalWrite(31, LOW); p1a.attach(button1a, INPUT_PULLUP); p1a.interval(20); p1b.attach(button1b, INPUT_PULLUP); p1b.interval(20); pinMode(48, OUTPUT); digitalWrite(48, LOW); pinMode(49, OUTPUT); digitalWrite(49, LOW); pinMode(50, OUTPUT); digitalWrite(50, LOW); pinMode(51, OUTPUT); digitalWrite(51, LOW); p6a.attach(button6a, INPUT_PULLUP); p6a.interval(20); p6b.attach(button6b, INPUT_PULLUP); p6b.interval(20); p6c.attach(button6c, INPUT_PULLUP); p6c.interval(20); p6d.attach(button6d, INPUT_PULLUP); p6d.interval(20); p6e.attach(button6e, INPUT_PULLUP); p6e.interval(20); p6f.attach(button6f, INPUT_PULLUP); p6f.interval(20); } void loop() { aktualnyCzas = millis(); p1a.update(); p1b.update(); bool stanP1a = p1a.read(); bool stanP1b = p1b.read(); p6a.update(); p6b.update(); p6c.update(); p6d.update(); p6e.update(); p6f.update(); bool stanP6a = p6a.read(); bool stanP6b = p6b.read(); bool stanP6c = p6c.read(); bool stanP6d = p6d.read(); bool stanP6e = p6e.read(); bool stanP6f = p6f.read(); // 1a if (p1a.fell() && LED1b == LOW) { Serial.println("Przycisk 1a"); LED1a = !LED1a; digitalWrite(30, LED1a); czasLED1a = aktualnyCzas; } if (LED1a){ Serial.println("LED1a"); if (aktualnyCzas - czasLED1a >= 1000UL){ czasLED1a = aktualnyCzas; digitalWrite(30, LOW); LED1a = LOW; } } // 1b if (p1b.fell() && LED1a == LOW) { Serial.println("Przycisk 1b"); LED1b = !LED1b; digitalWrite(31, LED1b); czasLED1b = aktualnyCzas; } if (LED1b){ Serial.println("LED1b"); if (aktualnyCzas - czasLED1b >= 1000UL){ czasLED1b = aktualnyCzas; digitalWrite(31, LOW); LED1b = LOW; } } // 6c if (p6c.fell() && LED6d == LOW) { Serial.println("Przycisk 6c"); LED6c =!LED6c; digitalWrite(48, LED6c); czasLED6c = aktualnyCzas; } if (LED6c){ Serial.println("LED6c"); if (aktualnyCzas - czasLED6c >= 1000UL){ czasLED6c = aktualnyCzas; digitalWrite(48, LOW); LED6c = LOW; } } // 6d if (p6d.fell() && LED6c == LOW) { Serial.println("Przycisk 6d"); LED6d =!LED6d; digitalWrite(49, LED6d); czasLED6d = aktualnyCzas; } if (LED6d){ Serial.println("LED6d"); if (aktualnyCzas - czasLED6d >= 1000UL){ czasLED6d = aktualnyCzas; digitalWrite(49, LOW); LED6d = LOW; } } // 6e if (p6e.fell() && LED6f == LOW) { Serial.println("PRZYCISK 6e"); LED6e =!LED6e; digitalWrite(50, LED6e); czasLED6e = aktualnyCzas; } if (LED6e){ Serial.println("LED6e"); if (aktualnyCzas - czasLED6e >= 1000UL){ czasLED6e = aktualnyCzas; digitalWrite(50, LOW); LED6e = LOW; } } // 6f if (p6f.fell() && LED6e == LOW) { Serial.println("PRZYCISK 6f"); LED6f =!LED6f; digitalWrite(51, LED6f); czasLED6f = aktualnyCzas; } if (LED6f){ Serial.println("LED6f"); if (aktualnyCzas - czasLED6f >= 1000UL){ czasLED6f = aktualnyCzas; digitalWrite(51, LOW); LED6f = LOW; } } } Edytowano Luty 4, 2022 przez LeKeR uściślenie problemu Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!