есть у меня скетч, точнее меню с дисплеем Код (C++): #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F,16,2); #define interval 300 const int buttonConfigs = 3; const int buttonSelect = 2; int rows=1; int val1=0; int val2=0; int led1= 4; int led2= 5; int led3= 6; int led4= 7; int st1= 0; int st2= 0; int st3= 0; int st4= 0; void setup() { pinMode(buttonSelect,INPUT); pinMode(buttonConfigs,INPUT); pinMode(led1,OUTPUT); pinMode(led2,OUTPUT); pinMode(led3,OUTPUT); pinMode(led4,OUTPUT); Serial.begin(9600); } void loop() { static unsigned long prevM = 0; static unsigned long prevM2 = 0; static unsigned long prevM3 = 0; static unsigned long prevM4 = 0; static unsigned long prevM5 = 0; val1= digitalRead(buttonSelect); val2= digitalRead(buttonConfigs); if(val1== HIGH&&millis()- prevM > interval ){ prevM = millis(); rows++ ; Serial.println(rows); lcd.clear(); } if(rows> 4){ rows=1; } if(rows==1){ lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,0); lcd.print(">"); lcd.setCursor(1,0); lcd.print("ds18b20"); lcd.setCursor(1,1); lcd.print("DHT11"); if(millis()- prevM2 > interval ){ prevM2 = millis(); if(val2==HIGH){ st1= !st1; } if(st1==1){ digitalWrite(led1,1) ; }else{ digitalWrite(led1,0); } } } if(rows==2){ lcd.setCursor(0,0); lcd.print(" "); lcd.setCursor(0,1); lcd.print(">"); lcd.setCursor(1,0); lcd.print("ds18b20"); lcd.setCursor(1,1); lcd.print("DHT11"); if(millis()- prevM3 > interval ){ prevM3 = millis(); if(val2==HIGH){ st2= !st2; } if(st2==1){ digitalWrite(led2,1) ; }else{ digitalWrite(led2,0); } } } if(rows==3){ lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,0); lcd.print(">"); lcd.setCursor(1,0); lcd.print("photosensor"); lcd.setCursor(1,1); lcd.print("led"); if(millis()- prevM4 > interval ){ prevM4 = millis(); if(val2==HIGH){ st3= !st3; } if(st3==1){ digitalWrite(led3,1) ; }else{ digitalWrite(led3,0); } } } if(rows==4){ lcd.setCursor(0,0); lcd.print(" "); lcd.setCursor(0,1); lcd.print(">"); lcd.setCursor(1,0); lcd.print("photosensor"); lcd.setCursor(1,1); lcd.print("led"); if(millis()- prevM5 > interval ){ prevM5 = millis(); if(val2==HIGH){ st4= !st4; } if(st4==1){ digitalWrite(led4,1) ; }else{ digitalWrite(led4,0); } } } } И с ним возникла проблема, дисплей не меняет изображение. Ясно, что ошибка в программе, помогите найти её пожалуйста.
@Arduinos, если вы используете библиотеку https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library добавьте в setup() Код (C++): /* Set the LCD display in the correct begin state, must be called before anything else is done. */ lcd.begin();
Надо так Код (C++): void setup() { pinMode(buttonSelect,INPUT); pinMode(buttonConfigs,INPUT); pinMode(led1,OUTPUT); pinMode(led2,OUTPUT); pinMode(led3,OUTPUT); pinMode(led4,OUTPUT); lcd.init(); lcd.backlight(); Serial.begin(9600); }
lcd.init() - это ветхозаветная форма записи. Согласно нового штилю, изложенного в наставлении отрокам по написанию библиотек - Код (Text): Use the established core libraries and styles. ... Use begin() to initialize a library instance, usually with some settings. Use end() to stop it.