Pomoc w kodzie - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Pomoc w kodzie (/watek-pomoc-w-kodzie--4205) |
Pomoc w kodzie - Przemek89 - 01-11-2021 Witam dopiero się uczę potrzebuję zmienić przycisk aby włączał stoper kiedy jest wciśnięty a zatrzymywał i resetował kiedy jest puszczony //#include <LiquidCrystal.h> #include <LiquidCrystal_I2C.h> #define button 1 int buttonPushCounter = 0; bool bPress = false; int nalewaki = 6; int timerMode = 0; long startTime; long stopTime; LiquidCrystal_I2C lcd(0x27,20,4); void setup(){ lcd.init(); lcd.backlight(); lcd.begin(16, 2); lcd.clear(); pinMode(button, INPUT_PULLUP); lcd.print("Stoper:"); } void loop(){ lcd.setCursor(16, 2); if (digitalRead(button) == LOW){ startTime = millis(); timerMode++; delay(400); } if (timerMode == 1){ lcd.setCursor(7, 0); lcd.print((millis() - startTime) / 1000.0); } if (timerMode > 1){ delay(2000); timerMode = 0; lcd.clear(); lcd.print("Stoper:"); } } RE: Pomoc w kodzie - mateuszmilke97@gmail.com - 01-11-2021 Spróbuj pod pierwszym ifem w loop dać else i tam instrukcje do resetowania licznika i wyświetlania 0 na wyświetlaczu if (digitalRead(button) == LOW){ startTime = millis(); timerMode++; delay(400); } else { //czyli jak powyższy argument dotyczący włącznika nie zostanie spełniony timerMode = 0; //i inne instrukcje związane z obsługą kiedy przycisk nie jest wciśnięty } tyle mogę podpowiedzieć bo nie wiem za dużo o funkcjonalności Twojego programu RE: Pomoc w kodzie - kaczakat - 04-11-2021 Funkcjonalność jest taka, że tworzysz strasznego gniota. Zacznij od nauczenia się obliczenia ilości "upłyniętych" dziesiątek ms, w tym tygodniu wstawiałem taki przykładowy program już dwa razy. Sprawdzanie czy coś jest wciśnięte można robić w każdym obiegu loop, co określony czas, albo na przerwanie, jeszcze lepiej biblioteką, ale reszta programu musi mieć sens by użyć biblioteki - bez delay, natomiast próba wysyłania czegoś co każdy obieg loop przez I2C na ekran to porażka. Można zrobić bufor w pamięci na obejmujący taki przykładowy napis stopera "00:00:00" i w nim ewentualnie podmieniać znaki co 1/100s, wysyłać taki napis cyklicznie na ekran, ale wysyłanie tego napisu na ekran częściej niż 100ms nie ma większego sensu, ten ekran jest za wolny, a Ty jeszcze go czyścisz cały i zapisujesz od nowa, to trwa z 40ms. W opcji gdy jest wyłączony przez 2s nie zauważy w ogóle wciśniętego przycisku - delay(2000). Finalnie jak wszystko się uda zgodnie z tym planem to będzie zapisywał losowy start i stop, a ekran będzie głównie migotał. |