Wykrywanie długiego stanu naciśnięcia przycisku
Aby dodać funkcjonalność przycisku do funkcjonowania po naciśnięciu przez długi czas, wykonaliśmy prosty obwód, którego schemat obwodu podano poniżej, a następnie komponenty, których użyliśmy do wykonania obwodu.
Zespół sprzętu do wykrywania długiego stanu naciśnięcia przycisku
Aby zobaczyć, jak obwód będzie wyglądał na rzeczywistym sprzęcie, stworzyliśmy zespół sprzętu, który podano poniżej na obrazie.
Jak widać na powyższym obrazku, użyliśmy pinu 8 Arduino do podłączenia go z przyciskiem za pomocą zielonego drutu i za pomocą czarnego przewodu do podłączenia przycisku za pomocą blearu Arduino.
Kod Arduino do wykrywania długiego stanu naciśnięcia przycisku
Aby wykryć długie naciśnięcie przycisku, zaprogramowaliśmy mikrokontroler za pomocą funkcji MILLIS (). Wykryliśmy stan długiego prasy, otrzymując czas, dla którego stan przycisku pozostał wysoki i niski. Następnie obliczyliśmy czas, dla którego przycisk został naciśnięty, a następnie porównaliśmy go ze stałą wartością czasu w oparciu o to, że przycisk został naciśnięty przez długi czas.
W takim przypadku podaliśmy stałą wartość czasu na jedną sekundę, jaką jest 1000 milisekund, ponieważ krótka naciśnij przycisk. Jeśli czas trwania prasy to więcej niż czas na krótki czas prasy, zostanie uznany za długą prasę i będzie wyświetlany na monitor szeregowych. Below we have given the Arduino sketch used to program the controller for detecting the long press state of the push button.
Int Button = 8; /* Pin arduino dla przycisku*/
int Short_Time = 1000; / * Czas, który będzie uważany za krótki czas prasy */
długa on_duration;/ * zmienna, która będzie przechowywać wartość czasu, dla którego przycisk jest naciśnięty */
int poprzedniState = niski; / * Ustawienie początkowego stanu przycisku wysoko, ponieważ używamy trybu input_pullup */
int PresentState; /* Zmienna, która będzie przechowywać obecny stan, jeśli przycisk*/
niepodpisany długi press_time = 0; / * Czas, w którym przycisk został naciśnięty */
niepodpisane długie release_time = 0;/ *czas, w którym przycisk jest wydany */
void setup ()
Seryjny.Rozpocznij (9600);/* dając stawkę transmisji dla seryjnej komunikacji*/
pinmode (przycisk, input_pullup);/* Podanie trybu roboczego do przycisku, który jest input_pullup (przewraca wejścia przycisku)*/
void Loop ()
// Odczytaj stan przełącznika/przycisku:
PresentState = DigitalRead (przycisk);/ * Uzyskanie obecnego stanu przycisku */
if (poprzedniState == High && terentState == Low) / * Jeśli przycisk jest naciśnięty * /
press_time = millis ();/ * Zapisz czas w milisekundach za pomocą funkcji Millis */
else if (poprzedniState == Low && prezentState == High) /* Jeśli przycisk zostanie wydany* /
Release_time = millis ();/ * Zapisz czas, w którym przycisk został wydany */
Long On_Time = Release_time - Press_Time;/* Obliczanie czasu, dla którego przycisk pozostał w niskim stanie*/
if (on_time> short_time) /* Porównując wartość czasu, dla którego przycisk jest naciśnięty do wartości dla krótkiego czasu naciśnięcia* /
Seryjny.println („przycisk jest naciśnięty przez długi czas”);/ * Drukowanie danych na monitorze szeregowym */
poprzedniState = obecny state;/ * Zapisanie wartości bieżącej w poprzedniej wartości */
Demonstracja sprzętowa
Zrobiliśmy obwód na sprzęcie w odpowiednim czasie, który jest omawiany wcześniej, a poniższy obraz pokazuje implementację sprzętową obwodu przycisku, aby wykryć stan naciśnięcia przycisku.
Po naciśnięciu przycisku przez więcej niż jedną sekundę, kod Arduino wyświetla się na monitorze szeregowym, że przycisk jest naciśnięty przez długi czas, jak pokazano na poniższym obrazku:
Wniosek
Znaczenie używania stanu długiego naciśnięcia przycisku jest to, że możesz użyć jednego przycisku, aby wykonać więcej niż jedno zadanie. Aby wyjaśnić, w jaki sposób wykryć długi stan prasowy przycisku, który zaprojektowaliśmy obwód i zaimplementowaliśmy go na rzeczywisty sposób.