Код для реализации простого сигнала светофора, а также отображения на ЖК-дисплее, какой цвет включен?

Я попробовал код, приведенный ниже, для простого сигнала светофора, а также для отображения на ЖК-дисплее, какой цвет включен, но это не сработало. Пожалуйста, сделай так, чтобы это сработало.

int red = 10;
int yellow = 9;
int green = 8;
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup(){
    pinMode(red, OUTPUT);
    pinMode(yellow, OUTPUT);
    pinMode(green, OUTPUT);
}

void loop(){
    changeLights();
    delay(1500);
}

void changeLights(){
    lcd.print("red");
    digitalWrite(yellow,LOW );
    digitalWrite(red, HIGH);
    digitalWrite(green,LOW );
    delay(3000);
    lcd.print("yellow");
    digitalWrite(yellow,HIGH );
    digitalWrite(red,LOW );
    digitalWrite(green,LOW );
    delay(3000);
    lcd.print("green");
    digitalWrite(yellow,LOW );
    digitalWrite(red,LOW );
    digitalWrite(green,HIGH );
    delay(3000);
    //if(
}

, 👍1

Обсуждение

Что не работает? Что он должен делать?, @VE7JRO

ЖК-дисплей не будет работать, если вы не " начнете` его..., @Majenko

Вам необходимо предоставить дополнительную информацию. Что не работает? Вы пробовали простой скетч, который просто включает один из ваших светильников, затем редактируете его, чтобы включить следующий, а затем последний? (Вам нужно использовать максимально простой код, чтобы исключить проблемы с оборудованием), @Duncan C


2 ответа


3

Напишите скетч, чтобы протестировать свой ЖК-дисплей.

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 4, 2);
void setup(){
    lcd.begin();
    lcd.print("Hello World!");
}
void loop() {
    lcd.setCursor(0, 1);
    lcd.print(millis() / 1000);
}

Убедитесь, что вывод R/W подключен к GND на вашем макете. Возможно, вам потребуется подключить контрастный вывод к 5 В. В идеале он должен быть подключен к стеклоочистителю планки 10 Ком с любым концом, подключенным к GND и 5 В (чтобы вы могли варьировать контрастность).

Как только эта настройка заработает, измените свой код

 void setup(){
     lcd.begin();
     lcd.print("Traffic signals");
     delay(500);
     pinMode(red, OUTPUT);
     pinMode(yellow, OUTPUT);
     pinMode(green, OUTPUT);
 }

 void loop(){
     changeLights();
     lcd.setCursor(0,0);
 }
,

0

Небольшое обновление вашего кода

  1. Добавлена функция lcd.begin();
  2. добавлена функция lcd.clear ();, позволяющая удалять старые символы перед добавлением нового дисплея

Вот полный код

int red = 10;
int yellow = 9;
int green = 8;
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  lcd.begin(16, 2);
  pinMode(red, OUTPUT);
  pinMode(yellow, OUTPUT);
  pinMode(green, OUTPUT);
}

void loop() {
  changeLights();
  delay(1500);
}

void changeLights() {
  lcd.clear();
  lcd.print("red");
  digitalWrite(yellow, LOW );
  digitalWrite(red, HIGH);
  digitalWrite(green, LOW );
  delay(3000);
  lcd.clear();
  lcd.print("yellow");
  digitalWrite(yellow, HIGH );
  digitalWrite(red, LOW );
  digitalWrite(green, LOW );
  delay(3000);
  lcd.clear();
  lcd.print("green");
  digitalWrite(yellow, LOW );
  digitalWrite(red, LOW );
  digitalWrite(green, HIGH );
  delay(3000);
  //if(
}

Результат будет выглядеть следующим образом:

Вот ссылка на пример симулятора Arduino

,