Зад клавиатурата не мога да съдя кой колко знае. Обикновено питам. И нямам навик да си създавам мнение за някого, когото не познавам лично. Контрастът е един от "глупавите", но чести проблеми.
Не видях къде ми каза, че даденият от мен код работи, за да тестваме if-а. От първото ти обяснение останах с убеждението, че не ти изписва нищо. По принцип, когато пусна част от код, с намерение да търся грешка, очаквам обратна връзка какво става.
lcd.print() трябва да се изпълнява само веднъж при настъпване на промяна. Иначе ще премигва и ще се вижда бледо.
Аз лично, бих оставил чисто "Ардуинския" подход и бих работил с порт, вместо с имена на бутони. Бих го направил не с брояч, а с променлива, в която се записва старото състояние, да я наречем oldstate.
Тя трябва да се променя при смяна на състоянието и изпълняването на условието да е свързано с това oldstate да се различава от контролираната променлива.
Ако държиш да работипш в стила на Ардуино, можеш да въведеш за всеки бутон отделна променлива oldstate: button1oldstate, button2oldstate...
Ето пример за тест, но трябва да се добави опция за повторно изписване на съобщение за избор на артикул;
#include <LiquidCrystal.h>
int relay1 = 22;
int relay2 = 23;
int relay3 = 24;
int relay4 = 25;
int button1= 30;
int button2= 31;
int button3= 32;
int button4= 33;
int button1status = 0;
int button2status = 0;
int button3status = 0;
int button4status = 0;
int button1oldstate, button2oldstate, button3oldstate, button4oldstate;
LiquidCrystal lcd(50, 51, 44, 45, 46, 47);
void setup() {
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
pinMode(button4, INPUT);
lcd.begin (16, 2);
lcd.setCursor(0, 0);
lcd.print("Select item:");
lcd.noCursor();
}
void statusMemorize(){
button1oldstate=button1status;
button2oldstate=button2status;
button3oldstate=button3status;
button4oldstate=button4status;
}
void loop(){
button1status = digitalRead(button1);
button2status = digitalRead(button2);
button3status = digitalRead(button3);
button4status = digitalRead(button4);
if(button1status != button1oldstate){
digitalWrite(relay1,button1status);
lcd.setCursor(0, 0);
lcd.print("Button 1 pressed");
lcd.noCursor();
delay(2000);
statusMemorize();
}
if(button2status != button2oldstate){
digitalWrite(relay2,button2status);
lcd.setCursor(0, 0);
lcd.print("Button 2 pressed");
lcd.noCursor();
delay(2000);
statusMemorize();
}
if(button3status != button3oldstate){
digitalWrite(relay3,button3status);
lcd.setCursor(0, 0);
lcd.print("Button 3 pressed");
lcd.noCursor();
delay(2000);
statusMemorize();
}
if(button4status != button4oldstate){
digitalWrite(relay4,button4status);
lcd.setCursor(0, 0);
lcd.print("Button 4 pressed");
lcd.noCursor();
delay(2000);
statusMemorize();
}
}
Включено повторно съобщение. Тествай, нямам в момента Ардуино за проверка!
#include <LiquidCrystal.h>
int relay1 = 22;
int relay2 = 23;
int relay3 = 24;
int relay4 = 25;
int button1= 30;
int button2= 31;
int button3= 32;
int button4= 33;
int button1status = 0;
int button2status = 0;
int button3status = 0;
int button4status = 0;
int button1oldstate, button2oldstate, button3oldstate, button4oldstate;
int groupstate, groupoldstate;
LiquidCrystal lcd(50, 51, 44, 45, 46, 47);
void setup() {
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
pinMode(button4, INPUT);
lcd.begin (16, 2);
lcd.setCursor(0, 0);
lcd.print("Select item:");
lcd.noCursor();
}
void statusMemorize(){
button1oldstate=button1status;
button2oldstate=button2status;
button3oldstate=button3status;
button4oldstate=button4status;
groupoldstate=groupstate;
}
void loop(){
button1status = digitalRead(button1);
button2status = digitalRead(button2);
button3status = digitalRead(button3);
button4status = digitalRead(button4);
groupstate=button1status+button2status+button3status+button4status;
if (groupstate==0 && groupoldstate!=0){
lcd.setCursor(0, 0);
lcd.print("Select item: ");
lcd.noCursor();
statusMemorize();
}
if(button1status != button1oldstate){
digitalWrite(relay1,button1status);
lcd.setCursor(0, 0);
lcd.print("Button 1 pressed");
lcd.noCursor();
delay(2000);
statusMemorize();
}
if(button2status != button2oldstate){
digitalWrite(relay2,button2status);
lcd.setCursor(0, 0);
lcd.print("Button 2 pressed");
lcd.noCursor();
delay(2000);
statusMemorize();
}
if(button3status != button3oldstate){
digitalWrite(relay3,button3status);
lcd.setCursor(0, 0);
lcd.print("Button 3 pressed");
lcd.noCursor();
delay(2000);
statusMemorize();
}
if(button4status != button4oldstate){
digitalWrite(relay4,button4status);
lcd.setCursor(0, 0);
lcd.print("Button 4 pressed");
lcd.noCursor();
delay(2000);
statusMemorize();
}
}