• 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
przycisk - long press
#1
Cześć,
od niedawna rozkminiam Arduino na potrzeby projektu, który mam w głowie. Na razie ćwiczę sobie na Tinkercadzie programując Arduino Uno. Żeby ogarniać w miarę na bieżąco buduję kod od podstaw i dorzucam kolejne elementy. Jestem na etapie na którym mam problem z rozwiązaniem błędu.
Układ: 1 przycisk, 2 diody, ekran
Kiedy przyciskam krótko przycisk diody przechodzą przez 3 opisane stany - tu mi wszystko działa.
Kiedy przytrzymuję przycisk wciśnięty dłużej chciałbym, żeby zapalały się obie diody i na wyświetlaczu pojawiał się napis "clear", dzieje się to, ale chciałbym, żeby ten stan utrzymywał się po puszczeniu przycisku, a teraz wraca do stanu sprzed długiego naciśnięcia.// opcjonalnie chciałbym, żeby po zakończeniu długiego przyciśnięcia układ wracał do stanu opisanego jako "default". Podpowiedzcie proszę gdzie mam błąd, bo już przestałem ogarniać. Dzięki za pomoc.
Kod:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int LED1 = 7;
const int LED2 = 8;
const int button = 6;
int state = 0;
int old = 0;
int buttonState = 0;

boolean LED1State = false;
boolean LED2State = false;

long buttonTimer = 0;
long longPressTime = 250;

boolean buttonActive = false;
boolean longPressActive = false;

void setup() {
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(button, INPUT);
     // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("Usmiechnij sie,");
  lcd.setCursor (0, 1);
  lcd.print("to nie pogrzeb.");
  delay (3000);
  lcd.clear ();
  lcd.print("Nogovcisk v0.01b");
  delay (3000);
}
void loop() {
  if (digitalRead(button) == HIGH) {
    if (buttonActive == false) {
      buttonActive = true;
      buttonTimer = millis();
    }
    if ((millis() - buttonTimer > longPressTime) && (longPressActive == false)) {
      longPressActive = true;
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, HIGH);
      lcd.setCursor (4, 1);
      lcd.print ("          ");
      lcd.setCursor (0, 0);
      lcd.print ("Nogovcisk v0.01b");
      lcd.setCursor(0, 1);
      lcd.print("CLEAR");
    }
  } else {
    if (buttonActive == true) {
      if (longPressActive == true) {
        longPressActive = false;
      } else {
  buttonState = digitalRead(button);
  if(buttonState == 0) {
    state = old + 1;
  }
   }}
  switch (state) {
   case 1:
    digitalWrite(LED1,HIGH);
    digitalWrite(LED2,LOW);
    old = state;
    lcd.setCursor (0, 0);
    lcd.print ("Nogovcisk v0.01b");
    lcd.setCursor(0, 1);
    lcd.print("RECORD LOOP");
    break;
   case 2:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,HIGH);
    old = state;
    lcd.setCursor (4, 1);
    lcd.print ("       ");
    lcd.setCursor (0, 0);
    lcd.print ("Nogovcisk v0.01b");
    lcd.setCursor(0, 1);
    lcd.print("PLAY");
    break;
    case 3:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    old = state;
    lcd.setCursor (4, 1);
    lcd.print ("       ");
    lcd.setCursor (0, 0);
    lcd.print ("Nogovcisk v0.01b");
    lcd.setCursor(0, 1);
    lcd.print("STOP");
    break;
   default:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    old = 0;
    break;
      }
      buttonActive = false;
    }
  }
 
Odpowiedź
  


Wiadomości w tym wątku
przycisk - long press - przez matn - 22-02-2020, 18:47
RE: przycisk - long press - przez kaczakat - 23-02-2020, 22:45
RE: przycisk - long press - przez matn - 23-02-2020, 23:35
RE: przycisk - long press - przez OMK - 03-03-2020, 00:40
RE: przycisk - long press - przez Agregacik - 03-03-2020, 10:04
RE: przycisk - long press - przez OMK - 03-03-2020, 19:52
RE: przycisk - long press - przez OMK - 05-03-2020, 09:59

Skocz do:


Przeglądający: 1 gości