Обзор, LCD4884 LCD Joystick Shield, код из видео

Код и библиотека из обзора LCD Shield с экраном от телефона Nokia 5110 и джойстиком. ссылка на видео.



Этот шилд прислал на обзор магазин icstation.com, ссылка на шилд в магазине тут

Для работы с экраном, который базируется на контроллере PCD8544, использована библиотека LCD5110_Basic с измененным файлом шрифтов (DefaultFonts.c), благодаря чему IDE версии 1.6.5 не выдает ошибку. Оригинальную библиотеку можно скачать на сайте у автора, возможно уже исправленную.

А вот сам код.

#include <LCD5110_Basic.h>

LCD5110 myGLCD(2,3,4,6,5); 
 
extern uint8_t MediumNumbers[];

byte key(){ //// для кнопок ЛСДшилда
  int val = analogRead(0);
    if (val < 50) return 5;
    else if (val < 200) return 3;
    else if (val < 400) return 4;
    else if (val < 600) return 2;
    else if (val < 800) return 1;
    else return 0;  
}

void setup()
{
  myGLCD.InitLCD();
}

void loop(){
 
    myGLCD.setFont(MediumNumbers);
    myGLCD.printNumI(analogRead(0), RIGHT, 0);
    myGLCD.printNumI(key(), RIGHT, 30);
    delay(100); 
  
 
  myGLCD.clrScr();
}

 

Код для вывода температуры и влажности с градусника DHT11

#include <LCD5110_Basic.h>
#include <dht11.h>

LCD5110 myGLCD(2,3,4,6,5); 
dht11 sensor;

extern uint8_t SmallFont[];
extern uint8_t BigNumbers[];

void setup()
{
  myGLCD.InitLCD(63);
}

void loop()
{
  sensor.read(11);
  
  myGLCD.clrScr();
  myGLCD.setFont(BigNumbers);
  myGLCD.printNumI(sensor.temperature, LEFT, 0);  
  myGLCD.printNumI(sensor.humidity, 45, 0);
  
  myGLCD.setFont(SmallFont);
  myGLCD.print("C", 30, 20);
  myGLCD.print("%", 75, 20);
  
  myGLCD.print("arduinoLab", CENTER, 38);
  
  delay(1000);
 
  
}  

 

и бонусом код для градусника DS18B20, в видео он показан не был.

#include <OneWire.h> // http://www.pjrc.com/teensy/td_libs_OneWire.html
#include <LCD5110_Basic.h>

LCD5110 myGLCD(2,3,4,6,5); 
OneWire  ds(11);  

 
extern uint8_t MediumNumbers[];

byte key(){ //// для кнопок ЛСДшилда
  int val = analogRead(0);
    if (val < 50) return 5;
    else if (val < 200) return 3;
    else if (val < 400) return 4;
    else if (val < 600) return 2;
    else if (val < 800) return 1;
    else return 0;  
}

void setup()
{
  myGLCD.InitLCD();
}

void loop(){

  byte data[12];
  byte addr[8];  

 
  if (!ds.search(addr)) {
    Serial.println("No more addresses."); 
    return;
  }
   ds.reset_search(); 
 
  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      delay(1000);
      return;
  }
 

  ds.reset();            
  ds.select(addr);        
  ds.write(0x44);      
  delay(1000);   
  
  ds.reset();
  ds.select(addr);    
  ds.write(0xBE);          

  for (int i = 0; i < 9; i++) {           
    data[i] = ds.read();  
  }

  int raw = (data[1] << 8) | data[0];
  
  // Переводим в температуру   

  if (data[7] == 0x10) raw = (raw & 0xFFF0) + 12 - data[6];  
  float temperature = raw / 16.0;
 
    myGLCD.setFont(MediumNumbers);
    myGLCD.printNumF(temperature, 2, CENTER, 0);
    delay(100);
     
  myGLCD.clrScr();
}