Код и библиотека из обзора 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(); }