Adatum
Сен
17
2014

Подключение lcd дисплеев nokia 5110 и QC1602A к Arduino в рамках проекта «Умный дом»

Nokia5110
Представляю еще один модуль к системе умного дома Adatum+, это модуль отображения текста на LCD дисплеях. Может использоваться например для отображения температуры либо другой информации.

Последнюю версию скетча и схемы модулья можно скачать с — Github SmartHomeAdatum



К сожалению модуль работает пока только с английскими буквами.

Схема подключения.

LCDsModule
В соответствии с тем протоколам который был разработан для системы мы имеем 2 команды, рассмотрим их по подробнее.

— TST,6B7DE9KT,0,0,0,0,TST (прием-передача)
Команда отклика устройства TST,6B7DE9KT,0,0,0,KEY,TST это команда двунаправленная, она передаётся при включении устройства, а так же она придет в ответ на неё же для определения «живости» устройства.

— DIS,6B7DE9KT,1,Hello Word,0,0,DIS(передача)
Команда передачи текстовой информации на экран, где DIS-тип команды, 6B7DE9KT-уникальный номер устройства в сети, 1-номер строки на экране (от 0 до максимального поддерживаемого дисплеем),
0-не используется,0-не используется,DIS-подтверждение команды.

lcdmodule

Текст скетча.

#include <LiquidCrystal.h>
#include <PCD8544.h>

static PCD8544 lcdm;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

char serianname[] = "6B7DE9KT" ;      // серийный номер устройства в сети
#define SerialTxControl 10   //RS485 Direction control
#define RS485Transmit    HIGH
#define RS485Receive     LOW  
char buffer[100];
char mode[4];                                 // Переменные для разбора буфера
char addres[10];                                // Переменные для разбора буфера
char vale1[14];                               // Переменные для разбора буфера
char vale2[14];                               // Переменные для разбора буфера
char vale3[14];                               // Переменные для разбора буфера
char vale4[4];                                // Переменные для разбора буфера
char modecontrol[4];                          // Переменные для разбора буфера


void setup() 
{
  
    Serial.begin(9600);
   pinMode(SerialTxControl, OUTPUT);    

   lcd.begin(84, 48);
  digitalWrite(SerialTxControl, RS485Transmit); 
  Serial.print("TST,");   Serial.print(serianname); Serial.println(",0,0,0,iBN,TST");
  delay(100); 
  digitalWrite(SerialTxControl, RS485Receive); 
  
   lcd.begin(16, 2);
  lcdm.begin(84, 48);
  
 

}

void loop() {

 digitalWrite(SerialTxControl, RS485Receive);  
      

  
   int x=0; if(Serial.available()){delay(100);
  while( Serial.available() && x< 99) { buffer[x++] = Serial.read();} buffer[x++]='\0';}
  if(x>0)
  {
  
  Serial.println(buffer);


  
     sscanf(buffer, "%[^','],%[^','],%[^','],%[^','],%[^','],%[^','],%s", &mode, &addres, &vale1, &vale2, &vale3, &vale4, &modecontrol);          
  
     
  
     if ((String)addres == serianname) {
     if ((String)mode == (String)modecontrol) {
       
       
     if ((String)mode == "TST")   
      {
  digitalWrite(SerialTxControl, RS485Transmit); 
 Serial.print("TST,");   Serial.print(serianname); Serial.println(",0,0,0,iBN,TST");
  delay(100); 
  digitalWrite(SerialTxControl, RS485Receive);   
      
     }
     
          if ((String)mode == "DIS")   //DIS,6B7DE9KT,1,Zeroo,0,iBN,DIS
      {
    
 lcd.setCursor(0, atoi(vale1));
 lcd.print(vale2);
 lcdm.setCursor(0, atoi(vale1));
 lcdm.print(vale2);
  
     }
      }
     }
  }
}

Похожие статьи

Оставить комментарий

  • В скетче указываете контакты LiquidCrystal lcd(12, 11, 5, 4, 3, 2); которые по картинке подключены к левому дисплею, а пишете, что подключаете дисплей Nokia 5110.

  • Спасибо за познавательную инфу по дисплеям, давно искал такой пример работы, разных LCD.

  • Спасибо Вам за эту статью, я как раз искал информацию по этим дисплеям,
    надеюсь что она поможет мне быстрее с ними разобраться!