Liczba postów: 880
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
42
Kod:
uint8_t odczyt_SW = digitalRead(SW_); //Odczyt stanu przycisku do zmiennej GPIO 0
if (odczyt_SW != ostatni_stan_SW) {
SW_Time = millis();
}
ostatni_stan_SW = odczyt_SW; // zapisywanie odcztanej wartosci stanu przyciku
if ((millis() - SW_Time) > 100 ) { // warunek czasu krotkiego nacisniecia drganie stykow
if (odczyt_SW != stan_short_SW) {
stan_short_SW = odczyt_SW;
if (stan_short_SW == LOW) { // Jesli przycisk jest wcisniety (stan niski)
// akcja krótkiego przyciskania
}
}
}
if ((millis() - SW_Time) > 1000) {
if (odczyt_SW != stan_long_SW) {
stan_long_SW = odczyt_SW;
if (stan_long_SW == LOW) {
// akcja długiego przyciskania
}
}
}
}
}
Macie może pomysł jak to przerobić, bo w tej chwili jes tak krótkie naciśniecie=akcja, długie naciśniencie= akcja a przydało by się jeszcze dwuklik= akcja ??
Nic mi do głowy nie przychodzi, dodatkowe wejście nie wchodzi w rachubę.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Liczba postów: 71
Liczba wątków: 2
Dołączył: Oct 2018
Reputacja:
1
Timer, sprawdzac czy drugie wcisniecie miesci sie w czasie ustalonym..proste
Wysłane z mojego SM-G950F przy użyciu Tapatalka
Liczba postów: 880
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
42
27-04-2019, 22:56
(Ten post był ostatnio modyfikowany: 27-04-2019, 23:11 przez Jarewa0606.)
Kod:
uint8_t odczyt_SW = digitalRead(SW_); // Odczyt stanu przycisku do zmiennej GPIO 0
if (odczyt_SW != ostatni_stan_SW) { // jezeli wykryto inny stan wlacz odliczanie
SW_Time = millis();
}
ostatni_stan_SW = odczyt_SW; // zapisywanie odcztanej wartosci stanu przyciku
if ((millis() - SW_Time) > 50 ) { // warunek czasu minimalnego krotkiego nacisniecia drganie stykow
if (odczyt_SW != stan_short_SW) {
stan_short_SW = odczyt_SW;
if (stan_short_SW == LOW) { // jesli przycisk jest wcisniety (stan niski)
klik_SW_Time=millis(); // odliczanie czasu na drugie przycisniecie (podliczenie licznika)
data_klik_SW++; // licznik przycisnienc
klik_SW=true; // przelacznik zadzialania licznika
}
}
}
if ((millis() - klik_SW_Time) > 500 && odczyt_SW == HIGH){ // czas na podliczenie licznika przycisniec po puszczeniu przycisku
if (klik_SW == true){ // sprawdzanie czy byl uruchomiony licznik przycisniec SW
if (data_klik_SW == 1){ // jezeli raz przycisnieto
//////// akcja jednego przycisniecia
}
}
if (data_klik_SW == 2){ // jezeli przycisnieto dwa razy
//////// akcja dwuklika
}
klik_SW = false; // wylaczenie podliczenie licznika
data_klik_SW = 0; // zresetowanie licznika przycisku
/// akcja ogolna
}
if ((millis() - SW_Time) > 2000) { // warunek czasu na przycisniecie długie
if (odczyt_SW != stan_long_SW) {
stan_long_SW = odczyt_SW;
if (stan_long_SW == LOW) { // jezeli przycisk wcisniety ponad 2s
klik_SW = false; // wylaczenie podliczenie licznika
data_klik_SW = 0; // zresetowanie licznika przycisku
/// akcja długiego trzymania przycisku
}
}
}
Takie coś skleiłem
Minimalne klikniecie to 50ms przerwa miedzy kliknięciami to max 500ms z tym ze drugie nie może przekraczać 2s bo uwzględni to jako 3 funkcje przycisku
Po menu mi się łatwiej teraz poruszać bo mam do przodu do tyłu i zatwierdzenie
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.