22-02-2020, 18:47
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.
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;
}
}