#26 2016-10-29 14:06:48

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Последовательный вывод данных на LCD

Green, это досадная случайность )
Rauf_AF, тогда нужно искать

для примера вторую строку никогда не менять
данные выводить в serial для контроля

а что   проверяли? какой вариант, это явно не мой код )
для теста проверьте не уходит ли в ресет  arduino
например так
lcd.setCursor(0, 0);
    lcd.print("restart")
delay (5000);   // is it pause в 5 sec?

Неактивний

#27 2016-11-02 09:02:23

Rauf_AF
Учасник
Зареєстрований: 2016-10-28
Повідомлень: 14

Re: Последовательный вывод данных на LCD

Хочу поделится рабочей версией. Спасибо доброму человеку выручил. Я его совместил со своим кодом и всё прекрасно работает.

/*
#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);             // отправка данных
  }
}
 

Неактивний

#28 2016-11-10 12:10:29

tesla
Гість

Re: Последовательный вывод данных на LCD

Здесь работающий код для вывода данных на LCD http://ngin.pro/arduino/205-ispolzovanie-i2c_lcd-dlya-otladki-proekta-na-arduino.html

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму