Вывод текста на LCD

anton_kulibin
Offline
Зарегистрирован: 28.10.2012

Uno+1602A

При нажатии на кнопку во второй строке  Off меняется на On, при отпускании обратно на Off. При нажатии вместо On появляется Onf. Чтото никак тостучать не могу?

#include <LiquidCrystal.h>
  
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
int buttonState = 0;  
const int buttonPin = 8;
int relaypin = 3;
void setup() {
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.clear();
  lcd.print("Switch");
pinMode(buttonPin, INPUT);
pinMode(relaypin, OUTPUT);
}
void loop() {
  
  buttonState = digitalRead(buttonPin);
  lcd.setCursor(0, 1);
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // turn LED on: 
    // lcd.clear();
     
     lcd.write("On");
     digitalWrite(relaypin, HIGH);
      } 
  else {
     lcd.write("Off"); 
     digitalWrite(relaypin, LOW);
  }
 
 
}

 

maksim
Offline
Зарегистрирован: 12.02.2012

Перед тем как хотите вывести что-то новое дисплей нужно очищать, раскоментируйте строку 25

       lcd.clear();

 

anton_kulibin
Offline
Зарегистрирован: 28.10.2012

Ну это я тоже пробовал, приэтом экран начинает мерцать

maksim
Offline
Зарегистрирован: 12.02.2012

Это потому что вы часто выводите.Задержку в конце поставьте

delay(200);

 

msng
Offline
Зарегистрирован: 07.06.2012

27     lcd.write("On ");

Предлагаю такую редакцию строики 27

 

anton_kulibin
Offline
Зарегистрирован: 28.10.2012

msng пишет:

27     lcd.write("On ");

Предлагаю такую редакцию строики 27

 

Оригинально конечно,  чтото о пробеле я не подумал

maksim
Offline
Зарегистрирован: 12.02.2012

Орегинально то оно оригинально, но подход сам по себе не верный и с задержкой тоже самое. Вам нужно реализовать такой код, что бы при нажатии и отпускании кнопки информация отправлялась на дисплей только один раз.

maksim
Offline
Зарегистрирован: 12.02.2012

Скажем например так

#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
boolean buttonState = 0;  
const int buttonPin = 8;
int relaypin = 3;
void setup() {
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.clear();
  lcd.print("Switch");
  pinMode(buttonPin, INPUT);
  pinMode(relaypin, OUTPUT);
}
void loop() {

  if(digitalRead(buttonPin) && !buttonState){
    lcd.clear();    
    lcd.setCursor(0, 1);    
    lcd.write("On");
    digitalWrite(relaypin, HIGH);
    buttonState = 1;
  } 

  if(!digitalRead(buttonPin) && buttonState){   
    lcd.clear(); 
    lcd.setCursor(0, 1); 
    lcd.write("Off"); 
    digitalWrite(relaypin, LOW);
    buttonState = 0;
  }

}

 

anton_kulibin
Offline
Зарегистрирован: 28.10.2012

maksim пишет:

Орегинально то оно оригинально, но подход сам по себе не верный и с задержкой тоже самое. Вам нужно реализовать такой код, что бы при нажатии и отпускании кнопки информация отправлялась на дисплей только один раз.

Да, ты верно мыслишь, пока проверить твой код не могу приду домой залью в ардуино, я вчера пробовал и с задержкой и с очисткой, но все получалось не так как надо