• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Pomoc w kodzie
#1
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:");
}
}
 
Odpowiedź
#2
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
 
Odpowiedź
#3
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ł.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości