Вопросы о LCD 1602

load1987
Offline
Зарегистрирован: 23.07.2017

Доброго времени суток!

Я начинающий ардуинщик, ну как начинающий - новичек)))

Закралась идея по управлению двумя насосами с возможностью програмирования через дисплей LCD 1602 + ардуино Nano/ Возможно ли это???

И вопрос еще по LCD 1602. 


#include <LiquidCrystal.h>  // Лобавляем необходимую библиотеку
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // (RS, E, DB4, DB5, DB6, DB7)

const int buttonPin = 2;
const int buttonPin1 = 3;

const int ledPin =  13;
const int ledPin1 =  6;
int buttonState = 0; 
int buttonState1 = 0; 

void setup(){ 
   lcd.clear(); 
   lcd.begin(16, 2);                  
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);}
void loop() {
  buttonState = digitalRead(buttonPin);
  buttonState1 = digitalRead(buttonPin1);

  if (buttonState == HIGH) {
    digitalWrite(ledPin1, HIGH);

  lcd.setCursor(0, 0); 
  lcd.print("KRASNIY");
  lcd.setCursor(9, 0); 
  lcd.print("VKL");
 
  } else {
  digitalWrite(ledPin1, LOW);
  lcd.setCursor(0, 0); 
  lcd.print("         ");
  lcd.setCursor(9, 0); 
  lcd.print("   ");
    
  }
  if (buttonState1 == HIGH) {
    digitalWrite(ledPin, HIGH);

  lcd.setCursor(0, 1); 
  lcd.print("SINIY VKL");
  } else {
   
    digitalWrite(ledPin, LOW);
    lcd.setCursor(0, 1); 
    lcd.print("           ");
  
  }
}

То есть, на экране отображается состояние светодиода (включение) - верхняя строчка пишет о включении красного светодиода, а нижняя -для синего. А вот когда я пытаюсь вывести индикацию одну и вторую только в первую строчку, то текст либо смешиваетсяЮ либо моргает или все затемняется... Как же все-таки выводить все на первую строчку адекватно? И все же управление с этого дисплея интересует - может есть какой-то простенький пример?)))

Заранее спасибо!

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
Попробуйте такой код, он должен работать следующим образом:
при нажатии кнопки 1 на екране (не в натуре) состояние насоса будет меняться с вк на вык и наоборот
тоже самое со второй кнопкой только насос 2
когда на екране выставите нужное положение для обох насосов нажимаете кнопку СТАРТ и все это применится в натуре
Плохо здесь то что нет антидребезга поэтому поймать нужное состояние насосов на экране будет сложновато
Но про антидребезг вопроса небыло, значит Вы знаете или разберетесь сами.
#include <LiquidCrystal.h>  // Лобавляем необходимую библиотеку
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // (RS, E, DB4, DB5, DB6, DB7)

#define buttonPin1  2
#define buttonPin2 3
#define startPin 4

const int ledPin1 =  13;
const int ledPin2 =  6;
bool buttonState1 = 0;
bool buttonState2 = 0;
bool startPinState = 0;
bool nasos1 = 0;
bool nasos2 = 0;
bool f_button1= 0;
bool f_button2 = 0;

void setup() {
  lcd.begin(16, 2);
  lcd.clear();
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(startPin, INPUT);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  //Serial.begin(9600); 
}
void loop() {
  buttonState1 = digitalRead(buttonPin1);
  buttonState2 = digitalRead(buttonPin2);
  startPinState = digitalRead(startPin);

  if (buttonState1 == HIGH && f_button1== 0) {
    f_button1= 1;
    nasos1 = !nasos1;
    lcd.setCursor(0, 0);
    lcd.print("KRASNIY ");
    //lcd.setCursor(9, 0);
    lcd.print(nasos1);
 }
  if (buttonState1 == LOW && f_button1== 1)f_button1=0;
  
  if (buttonState2 == HIGH && f_button2 == 0) {
    f_button2 = 1;
    nasos2 = !nasos2;
    lcd.setCursor(0, 1);
    lcd.print("SINIY ");
    lcd.print(nasos2);
 }
    if (buttonState2 == LOW && f_button2== 1)f_button2=0;
  
  if (startPinState == HIGH) {
    digitalWrite(ledPin1, nasos1);
    digitalWrite(ledPin2, nasos2);
  }
}