Ви не увійшли.
Green, это досадная случайность )
Rauf_AF, тогда нужно искать
для примера вторую строку никогда не менять
данные выводить в serial для контроля
а что проверяли? какой вариант, это явно не мой код )
для теста проверьте не уходит ли в ресет arduino
например так
lcd.setCursor(0, 0);
lcd.print("restart")
delay (5000); // is it pause в 5 sec?
Неактивний
Хочу поделится рабочей версией. Спасибо доброму человеку выручил. Я его совместил со своим кодом и всё прекрасно работает.
/*
#1 светодиоды led1-led8
#2 I2C LCD1602 GND -> GND
+5V -> +5V
SDA -> A4(SDA)
SCL -> A5(SCL)
подсветка ->13 (backlight_pin)
#3 кнопка ->2 (BUTTON_PIN)
#4 пищалка ->9 (BUTTON_PIN)
#5 RХ->0
TХ->1
*/
//#1 флаги
const int MSG_End = 8 ; // количество исслед каналов
uint8_t msgFlag[MSG_End] = {0, 0, 0, 0, 0, 0, 0, 0}; // флаги текущих состояний UPS (1 - это авария)
void ledControl() { // моргание нужными LED
}
//#2 дисплей
const char * message[MSG_End] = { // сообщения об авариях
"1:UPS1 Inver OFF",
"2:UPS1 On Batter",
"3:UPS1 Gen Alarm",
"4:UPS1 Inver OFF",
"5:UPS2 Inver OFF",
"6:UPS2 ON Batter",
"7:UPS2 Gen Alarm",
"8:UPS2 Inver OFF",
};
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int backlight_pin = 13;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Устанавливаем дисплей
void displayData() {// отображение информации
static uint8_t number_step = 0; // номер шага вывода
lcd.setCursor(0, 0);
// вывод верхней строки
for (int i = 0; i < MSG_End; i++) {
if (!msgFlag[i]) {
lcd.print(i + 1);
lcd.print(" ");
}
else {
if (number_step & 1) lcd.print("X");
else lcd.print(i + 1);
lcd.print(" ");
}
}
// вывод нижней строки
lcd.setCursor(0, 1);
if (msgFlag[number_step] )lcd.print(message[number_step]);
number_step++;
if (number_step >= MSG_End) number_step = 0;
}
//#3 кнопка
const int BUTTON_PIN = 2;
void readButtons(byte pin) {// сканируем кнопку
}
//#4 пищалка
const int BUZZER_PIN = 9;
void buzzer(byte pin) { // звуковые уведомления
}
//#5 сериал
const int RX_PIN = 0;
const int TX_PIN = 1;
void readSerial(byte rxPin) {// слушаем Serial
}
void dataManager() { // обработка данных
msgFlag[0] = true; // авария на 2-м UPS
msgFlag[5] = true; // авария на 7-м UPS
//msgFlag[7] = true; // авария на 8-м UPS
}
void sendData(byte txPin) {// отправка данных
}
// mail
void setup() {
//#1 флаги
//#2 дисплей
lcd.init() ; // инициализация LCD
pinMode ( backlight_pin, OUTPUT );
digitalWrite ( backlight_pin, 1 );
lcd.backlight(); // Включаем подсветку дисплея
//#3 кнопка
//#4 пищалка
//#5 сериал
}
void loop() {
static uint32_t MILLIS ;
MILLIS = millis() ;
//#1 флаги
ledControl(); // моргание нужными LED
//#2 1000 милисек дисплей
static uint32_t future2 = 0 ;
if (MILLIS >= future2) {
future2 = MILLIS + 1000 ;
displayData(); // отображение информации
}
//#3 кнопка
readButtons(BUTTON_PIN); // сканируем кнопку
//#4 пищалка
buzzer(BUZZER_PIN); // звуковые уведомления
//#5 сериал
static uint32_t future5 = 10000 ;
if (MILLIS >= future5) {
future5 = MILLIS + 1000 ;
readSerial(RX_PIN); // слушаем Serial
dataManager(); // обработка данных
sendData(TX_PIN); // отправка данных
}
}
Неактивний
Здесь работающий код для вывода данных на LCD http://ngin.pro/arduino/205-ispolzovanie-i2c_lcd-dlya-otladki-proekta-na-arduino.html