mirror of
https://github.com/letscontrolit/ESPEasy.git
synced 2026-09-14 10:35:30 +00:00
Merge branch 'mega' into P036_improvement
This commit is contained in:
@@ -0,0 +1,432 @@
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@file Adafruit_PCD8544.cpp
|
||||
|
||||
@mainpage Adafruit PCD8544 Nokia 5110 LCD Library
|
||||
|
||||
@section intro Introduction
|
||||
|
||||
This is a library for our Monochrome Nokia 5110 LCD Displays
|
||||
|
||||
Pick one up today in the adafruit shop!
|
||||
------> http://www.adafruit.com/products/338
|
||||
|
||||
These displays use SPI to communicate, 4 or 5 pins are required to
|
||||
interface
|
||||
|
||||
Adafruit invests time and resources providing this open source code,
|
||||
please support Adafruit and open-source hardware by purchasing
|
||||
products from Adafruit!
|
||||
|
||||
@section author Author
|
||||
|
||||
Written by Limor Fried/Ladyada for Adafruit Industries.
|
||||
|
||||
@section license License
|
||||
|
||||
BSD license, check license.txt for more information
|
||||
All text above, and the splash screen below must be included in any
|
||||
redistribution
|
||||
|
||||
*/
|
||||
/**************************************************************************/
|
||||
|
||||
#include "Adafruit_PCD8544.h"
|
||||
#include "Arduino.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
/** the memory buffer for the LCD */
|
||||
uint8_t pcd8544_buffer[LCDWIDTH * LCDHEIGHT / 8] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFC, 0xFE, 0xFF, 0xFC, 0xE0,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
|
||||
0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0x80, 0xC0,
|
||||
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC7, 0xC7, 0x87, 0x8F, 0x9F,
|
||||
0x9F, 0xFF, 0xFF, 0xFF, 0xC1, 0xC0, 0xE0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFC, 0xFC, 0xFC, 0xFC, 0xFE, 0xFE, 0xFE, 0xFC, 0xFC, 0xF8, 0xF8,
|
||||
0xF0, 0xE0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0,
|
||||
0xF1, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0x0F, 0x0F, 0x87,
|
||||
0xE7, 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0x3F, 0xF9, 0xF8, 0xF8, 0xF8, 0xF8,
|
||||
0xF8, 0xF8, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x7F, 0x3F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFE, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7E, 0x3F, 0x3F, 0x0F,
|
||||
0x1F, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xE0, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFC, 0xF0, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03,
|
||||
0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x03, 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x7F, 0x7F, 0x1F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
/*!
|
||||
@brief Update the bounding box for partial updates
|
||||
@param xmin left
|
||||
@param ymin bottom
|
||||
@param xmax right
|
||||
@param ymax top
|
||||
*/
|
||||
void Adafruit_PCD8544::updateBoundingBox(uint8_t xmin, uint8_t ymin,
|
||||
uint8_t xmax, uint8_t ymax) {
|
||||
xUpdateMin = min(xUpdateMin, xmin);
|
||||
xUpdateMax = max(xUpdateMax, xmax);
|
||||
yUpdateMin = min(yUpdateMin, ymin);
|
||||
yUpdateMax = max(yUpdateMax, ymax);
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief Constructor for software SPI with explicit CS pin
|
||||
@param sclk_pin SCLK pin
|
||||
@param din_pin DIN pin
|
||||
@param dc_pin DC pin
|
||||
@param cs_pin CS pin
|
||||
@param rst_pin RST pin
|
||||
*/
|
||||
Adafruit_PCD8544::Adafruit_PCD8544(int8_t sclk_pin, int8_t din_pin,
|
||||
int8_t dc_pin, int8_t cs_pin, int8_t rst_pin)
|
||||
: Adafruit_GFX(LCDWIDTH, LCDHEIGHT) {
|
||||
spi_dev = new Adafruit_SPIDevice(cs_pin, sclk_pin, -1, din_pin,
|
||||
4000000); // 4mhz max speed
|
||||
|
||||
_dcpin = dc_pin;
|
||||
_rstpin = rst_pin;
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief Constructor for hardware SPI based on hardware controlled SCK (SCLK)
|
||||
and MOSI (DIN) pins. CS is still controlled by any IO pin. NOTE: MISO and SS
|
||||
will be set as an input and output respectively, so be careful sharing those
|
||||
pins!
|
||||
@param dc_pin DC pin
|
||||
@param cs_pin CS pin
|
||||
@param rst_pin RST pin
|
||||
@param theSPI Pointer to SPIClass device for hardware SPI
|
||||
*/
|
||||
Adafruit_PCD8544::Adafruit_PCD8544(int8_t dc_pin, int8_t cs_pin, int8_t rst_pin,
|
||||
SPIClass *theSPI)
|
||||
: Adafruit_GFX(LCDWIDTH, LCDHEIGHT) {
|
||||
spi_dev = new Adafruit_SPIDevice(cs_pin, 4000000, SPI_BITORDER_MSBFIRST,
|
||||
SPI_MODE0, theSPI);
|
||||
|
||||
_dcpin = dc_pin;
|
||||
_rstpin = rst_pin;
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief The most basic function, set a single pixel, in the main buffer
|
||||
@param x x coord
|
||||
@param y y coord
|
||||
@param color pixel color (BLACK or WHITE)
|
||||
*/
|
||||
void Adafruit_PCD8544::drawPixel(int16_t x, int16_t y, uint16_t color) {
|
||||
setPixel(x, y, color, pcd8544_buffer);
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief The most basic function, set a single pixel
|
||||
@param x x coord
|
||||
@param y y coord
|
||||
@param color pixel color (BLACK or WHITE)
|
||||
@param buffer The framebuffer to set the pixel in
|
||||
*/
|
||||
void Adafruit_PCD8544::setPixel(int16_t x, int16_t y, bool color,
|
||||
uint8_t *buffer) {
|
||||
if ((x < 0) || (x >= _width) || (y < 0) || (y >= _height))
|
||||
return;
|
||||
|
||||
int16_t t;
|
||||
switch (rotation) {
|
||||
case 1:
|
||||
t = x;
|
||||
x = y;
|
||||
y = LCDHEIGHT - 1 - t;
|
||||
break;
|
||||
case 2:
|
||||
x = LCDWIDTH - 1 - x;
|
||||
y = LCDHEIGHT - 1 - y;
|
||||
break;
|
||||
case 3:
|
||||
t = x;
|
||||
x = LCDWIDTH - 1 - y;
|
||||
y = t;
|
||||
break;
|
||||
}
|
||||
updateBoundingBox(x, y, x, y);
|
||||
|
||||
// x is which column
|
||||
if (color)
|
||||
buffer[x + (y / 8) * LCDWIDTH] |= 1 << (y % 8);
|
||||
else
|
||||
buffer[x + (y / 8) * LCDWIDTH] &= ~(1 << (y % 8));
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief The most basic function, get a single pixel
|
||||
@param x x coord
|
||||
@param y y coord
|
||||
@param buffer The framebuffer to get the pixel from
|
||||
@return color of the pixel at x,y
|
||||
*/
|
||||
bool Adafruit_PCD8544::getPixel(int16_t x, int16_t y, uint8_t *buffer) {
|
||||
if ((x < 0) || (x >= _width) || (y < 0) || (y >= _height))
|
||||
return false;
|
||||
|
||||
int16_t t;
|
||||
switch (rotation) {
|
||||
case 1:
|
||||
t = x;
|
||||
x = y;
|
||||
y = LCDHEIGHT - 1 - t;
|
||||
break;
|
||||
case 2:
|
||||
x = LCDWIDTH - 1 - x;
|
||||
y = LCDHEIGHT - 1 - y;
|
||||
break;
|
||||
case 3:
|
||||
t = x;
|
||||
x = LCDWIDTH - 1 - y;
|
||||
y = t;
|
||||
break;
|
||||
}
|
||||
|
||||
return (buffer[x + (y / 8) * LCDWIDTH] >> (y % 8)) & 0x1;
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief Initialize the display. Set bias and contrast, enter normal mode.
|
||||
*/
|
||||
void Adafruit_PCD8544::initDisplay() {
|
||||
|
||||
// toggle RST low to reset
|
||||
if (_rstpin >= 0) {
|
||||
pinMode(_rstpin, OUTPUT);
|
||||
digitalWrite(_rstpin, LOW);
|
||||
delay(1); // 1 ns minimum
|
||||
digitalWrite(_rstpin, HIGH);
|
||||
}
|
||||
|
||||
setBias(_bias);
|
||||
setContrast(_contrast);
|
||||
|
||||
// normal mode
|
||||
command(PCD8544_FUNCTIONSET);
|
||||
|
||||
// Set display to Normal
|
||||
command(PCD8544_DISPLAYCONTROL | PCD8544_DISPLAYNORMAL);
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief Set up SPI, initialize the display, set the bounding box
|
||||
@param contrast Initial contrast value
|
||||
@param bias Initial bias value
|
||||
@returns True on initialization success
|
||||
*/
|
||||
bool Adafruit_PCD8544::begin(uint8_t contrast, uint8_t bias) {
|
||||
|
||||
if (!spi_dev->begin()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Set common pin outputs.
|
||||
pinMode(_dcpin, OUTPUT);
|
||||
if (_rstpin >= 0)
|
||||
pinMode(_rstpin, OUTPUT);
|
||||
|
||||
_bias = bias;
|
||||
_contrast = contrast;
|
||||
_reinit_interval = 0;
|
||||
_display_count = 0;
|
||||
initDisplay();
|
||||
|
||||
// initial display line
|
||||
// set page address
|
||||
// set column address
|
||||
// write display data
|
||||
|
||||
// set up a bounding box for screen updates
|
||||
|
||||
updateBoundingBox(0, 0, LCDWIDTH - 1, LCDHEIGHT - 1);
|
||||
// Push out pcd8544_buffer to the Display (will show the AFI logo)
|
||||
display();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief Send a command to the LCD
|
||||
@param c Command byte
|
||||
*/
|
||||
void Adafruit_PCD8544::command(uint8_t c) {
|
||||
digitalWrite(_dcpin, LOW);
|
||||
spi_dev->write(&c, 1);
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief Send data to the LCD
|
||||
@param c Data byte
|
||||
*/
|
||||
void Adafruit_PCD8544::data(uint8_t c) {
|
||||
digitalWrite(_dcpin, HIGH);
|
||||
spi_dev->write(&c, 1);
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief Set the contrast level
|
||||
@param val Contrast value
|
||||
*/
|
||||
void Adafruit_PCD8544::setContrast(uint8_t val) {
|
||||
if (val > 0x7f) {
|
||||
val = 0x7f;
|
||||
}
|
||||
_contrast = val;
|
||||
command(PCD8544_FUNCTIONSET | PCD8544_EXTENDEDINSTRUCTION);
|
||||
command(PCD8544_SETVOP | val);
|
||||
command(PCD8544_FUNCTIONSET);
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief Set the bias level
|
||||
@param val Bias value
|
||||
*/
|
||||
void Adafruit_PCD8544::setBias(uint8_t val) {
|
||||
if (val > 0x07) {
|
||||
val = 0x07;
|
||||
}
|
||||
_bias = val;
|
||||
command(PCD8544_FUNCTIONSET | PCD8544_EXTENDEDINSTRUCTION);
|
||||
command(PCD8544_SETBIAS | val);
|
||||
command(PCD8544_FUNCTIONSET);
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief Get the bias level
|
||||
@return Bias value
|
||||
*/
|
||||
uint8_t Adafruit_PCD8544::getBias() { return _bias; }
|
||||
|
||||
/*!
|
||||
@brief Get the contrast level
|
||||
@return Contrast value
|
||||
*/
|
||||
uint8_t Adafruit_PCD8544::getContrast() { return _contrast; }
|
||||
|
||||
/*!
|
||||
@brief Set the interval for reinitializing the display
|
||||
@param val Reinit after this many calls to display()
|
||||
*/
|
||||
void Adafruit_PCD8544::setReinitInterval(uint8_t val) {
|
||||
_reinit_interval = val;
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief Get the reinit interval
|
||||
@return Reinit interval
|
||||
*/
|
||||
uint8_t Adafruit_PCD8544::getReinitInterval() { return _reinit_interval; }
|
||||
|
||||
/*!
|
||||
@brief Update the display
|
||||
*/
|
||||
void Adafruit_PCD8544::display(void) {
|
||||
if (_reinit_interval) {
|
||||
_display_count++;
|
||||
if (_display_count >= _reinit_interval) {
|
||||
_display_count = 0;
|
||||
initDisplay();
|
||||
}
|
||||
}
|
||||
|
||||
for (uint8_t page = (yUpdateMin / 8); page < (yUpdateMax / 8) + 1; page++) {
|
||||
command(PCD8544_SETYADDR | page);
|
||||
|
||||
uint8_t startcol = xUpdateMin;
|
||||
uint8_t endcol = xUpdateMax;
|
||||
|
||||
command(PCD8544_SETXADDR | startcol);
|
||||
|
||||
digitalWrite(_dcpin, HIGH);
|
||||
spi_dev->write(pcd8544_buffer + (LCDWIDTH * page) + startcol,
|
||||
endcol - startcol + 1);
|
||||
}
|
||||
|
||||
command(PCD8544_SETYADDR); // no idea why this is necessary but it is to
|
||||
// finish the last byte?
|
||||
|
||||
xUpdateMin = LCDWIDTH - 1;
|
||||
xUpdateMax = 0;
|
||||
yUpdateMin = LCDHEIGHT - 1;
|
||||
yUpdateMax = 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief Clear the entire display
|
||||
*/
|
||||
void Adafruit_PCD8544::clearDisplay(void) {
|
||||
memset(pcd8544_buffer, 0, LCDWIDTH * LCDHEIGHT / 8);
|
||||
updateBoundingBox(0, 0, LCDWIDTH - 1, LCDHEIGHT - 1);
|
||||
cursor_y = cursor_x = 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief Invert the entire display
|
||||
@param i True to invert the display, false to keep it uninverted
|
||||
*/
|
||||
void Adafruit_PCD8544::invertDisplay(bool i) {
|
||||
command(PCD8544_FUNCTIONSET);
|
||||
command(PCD8544_DISPLAYCONTROL |
|
||||
(i ? PCD8544_DISPLAYINVERTED : PCD8544_DISPLAYNORMAL));
|
||||
}
|
||||
|
||||
/*!
|
||||
@brief Scroll the display by creating a new buffer and moving each pixel
|
||||
@param xpixels The x offset, can be negative to scroll backwards
|
||||
@param ypixels The y offset, can be negative to scroll updwards
|
||||
*/
|
||||
void Adafruit_PCD8544::scroll(int8_t xpixels, int8_t ypixels) {
|
||||
uint8_t new_buffer[LCDWIDTH * LCDHEIGHT / 8];
|
||||
memset(new_buffer, 0, LCDWIDTH * LCDHEIGHT / 8);
|
||||
|
||||
// negative pixels wrap around
|
||||
while (ypixels < 0) {
|
||||
ypixels += height();
|
||||
}
|
||||
ypixels %= height();
|
||||
while (xpixels < 0) {
|
||||
xpixels += width();
|
||||
}
|
||||
xpixels %= width();
|
||||
|
||||
for (int x = 0; x < width(); x++) {
|
||||
for (int y = 0; y < height(); y++) {
|
||||
if (getPixel(x, y, pcd8544_buffer)) {
|
||||
int new_x = (x + xpixels) % _width;
|
||||
int new_y = (y + ypixels) % _height;
|
||||
setPixel(new_x, new_y, true, new_buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
memcpy(pcd8544_buffer, new_buffer, LCDWIDTH * LCDHEIGHT / 8);
|
||||
updateBoundingBox(0, 0, LCDWIDTH - 1, LCDHEIGHT - 1);
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@file Adafruit_PCD8544.h
|
||||
|
||||
This is a library for our Monochrome Nokia 5110 LCD Displays
|
||||
|
||||
Pick one up today in the adafruit shop!
|
||||
------> http://www.adafruit.com/products/338
|
||||
|
||||
These displays use SPI to communicate, 4 or 5 pins are required to
|
||||
interface
|
||||
|
||||
Adafruit invests time and resources providing this open source code,
|
||||
please support Adafruit and open-source hardware by purchasing
|
||||
products from Adafruit!
|
||||
|
||||
Written by Limor Fried/Ladyada for Adafruit Industries.
|
||||
BSD license, check license.txt for more information
|
||||
All text above, and the splash screen must be included in any redistribution
|
||||
*/
|
||||
/**************************************************************************/
|
||||
#ifndef _ADAFRUIT_PCD8544_H
|
||||
#define _ADAFRUIT_PCD8544_H
|
||||
|
||||
#include "Arduino.h"
|
||||
#include <Adafruit_GFX.h>
|
||||
#include <Adafruit_SPIDevice.h>
|
||||
#include <SPI.h>
|
||||
|
||||
#define LCDWIDTH 84 ///< LCD is 84 pixels wide
|
||||
#define LCDHEIGHT 48 ///< 48 pixels high
|
||||
|
||||
#define PCD8544_POWERDOWN 0x04 ///< Function set, Power down mode
|
||||
#define PCD8544_ENTRYMODE 0x02 ///< Function set, Entry mode
|
||||
#define PCD8544_EXTENDEDINSTRUCTION \
|
||||
0x01 ///< Function set, Extended instruction set control
|
||||
|
||||
#define PCD8544_DISPLAYBLANK 0x0 ///< Display control, blank
|
||||
#define PCD8544_DISPLAYNORMAL 0x4 ///< Display control, normal mode
|
||||
#define PCD8544_DISPLAYALLON 0x1 ///< Display control, all segments on
|
||||
#define PCD8544_DISPLAYINVERTED 0x5 ///< Display control, inverse mode
|
||||
|
||||
#define PCD8544_FUNCTIONSET 0x20 ///< Basic instruction set
|
||||
#define PCD8544_DISPLAYCONTROL \
|
||||
0x08 ///< Basic instruction set - Set display configuration
|
||||
#define PCD8544_SETYADDR \
|
||||
0x40 ///< Basic instruction set - Set Y address of RAM, 0 <= Y <= 5
|
||||
#define PCD8544_SETXADDR \
|
||||
0x80 ///< Basic instruction set - Set X address of RAM, 0 <= X <= 83
|
||||
|
||||
#define PCD8544_SETTEMP \
|
||||
0x04 ///< Extended instruction set - Set temperature coefficient
|
||||
#define PCD8544_SETBIAS 0x10 ///< Extended instruction set - Set bias system
|
||||
#define PCD8544_SETVOP \
|
||||
0x80 ///< Extended instruction set - Write Vop to register
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief The PCD8544 LCD class
|
||||
*/
|
||||
class Adafruit_PCD8544 : public Adafruit_GFX {
|
||||
public:
|
||||
Adafruit_PCD8544(int8_t sclk_pin, int8_t din_pin, int8_t dc_pin,
|
||||
int8_t cs_pin, int8_t rst_pin);
|
||||
Adafruit_PCD8544(int8_t dc_pin, int8_t cs_pin, int8_t rst_pin,
|
||||
SPIClass *theSPI = &SPI);
|
||||
|
||||
virtual ~Adafruit_PCD8544() {}
|
||||
|
||||
bool begin(uint8_t contrast = 40, uint8_t bias = 0x04);
|
||||
|
||||
void command(uint8_t c);
|
||||
void data(uint8_t c);
|
||||
|
||||
void setContrast(uint8_t val);
|
||||
uint8_t getContrast(void);
|
||||
|
||||
uint8_t getBias(void);
|
||||
void setBias(uint8_t val);
|
||||
|
||||
void clearDisplay(void);
|
||||
void display();
|
||||
void updateBoundingBox(uint8_t xmin, uint8_t ymin, uint8_t xmax,
|
||||
uint8_t ymax);
|
||||
|
||||
void setReinitInterval(uint8_t val);
|
||||
uint8_t getReinitInterval(void);
|
||||
|
||||
void drawPixel(int16_t x, int16_t y, uint16_t color);
|
||||
void setPixel(int16_t x, int16_t y, bool color, uint8_t *buffer);
|
||||
bool getPixel(int16_t x, int16_t y, uint8_t *buffer);
|
||||
|
||||
void initDisplay();
|
||||
void invertDisplay(bool i);
|
||||
void scroll(int8_t vpixels, int8_t hpixels);
|
||||
|
||||
private:
|
||||
Adafruit_SPIDevice *spi_dev = NULL;
|
||||
int8_t _rstpin = -1, _dcpin = -1;
|
||||
|
||||
uint8_t _contrast; ///< Contrast level, Vop
|
||||
uint8_t _bias; ///< Bias value
|
||||
uint8_t _reinit_interval; ///< Reinitialize the display after this many calls
|
||||
///< to display()
|
||||
uint8_t _display_count; ///< Count for reinit interval
|
||||
|
||||
uint8_t xUpdateMin, xUpdateMax, yUpdateMin, yUpdateMax;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,24 @@
|
||||
# Adafruit PCD8544 Nokia 5110 LCD Library [](https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library/actions)[](http://adafruit.github.io/Adafruit-PCD8544-Nokia-5110-LCD-library/html/index.html)
|
||||
|
||||
This is a library for our Monochrome Nokia 5110 LCD Displays
|
||||
|
||||
Pick one up today in the Adafruit shop!
|
||||
------> https://www.adafruit.com/product/338
|
||||
|
||||
These displays use SPI to communicate, 4 or 5 pins are required to
|
||||
interface.
|
||||
|
||||
Adafruit invests time and resources providing this open source code,
|
||||
please support Adafruit and open-source hardware by purchasing
|
||||
products from Adafruit!
|
||||
|
||||
Written by Limor Fried/Ladyada for Adafruit Industries.
|
||||
BSD license, check license.txt for more information.
|
||||
All text above must be included in any redistribution.
|
||||
|
||||
To install, use the Arduino Library Manager to search for 'Adafruit VCNL4010'
|
||||
and install the library.
|
||||
|
||||
You will also need the Adafruit GFX Graphics core which does all the circles, text, rectangles, etc.
|
||||
You can get it by searching for 'Adafruit GFX' in the Arduino Library Manager or check it out here:
|
||||
https://github.com/adafruit/Adafruit-GFX-Library
|
||||
@@ -0,0 +1,127 @@
|
||||
# Adafruit Community Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and leaders pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, gender identity and expression, level or type of
|
||||
experience, education, socio-economic status, nationality, personal appearance,
|
||||
race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
We are committed to providing a friendly, safe and welcoming environment for
|
||||
all.
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Be kind and courteous to others
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Collaborating with other community members
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and sexual attention or advances
|
||||
* The use of inappropriate images, including in a community member's avatar
|
||||
* The use of inappropriate language, including in a community member's nickname
|
||||
* Any spamming, flaming, baiting or other attention-stealing behavior
|
||||
* Excessive or unwelcome helping; answering outside the scope of the question
|
||||
asked
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate
|
||||
|
||||
The goal of the standards and moderation guidelines outlined here is to build
|
||||
and maintain a respectful community. We ask that you don’t just aim to be
|
||||
"technically unimpeachable", but rather try to be your best self.
|
||||
|
||||
We value many things beyond technical expertise, including collaboration and
|
||||
supporting others within our community. Providing a positive experience for
|
||||
other community members can have a much more significant impact than simply
|
||||
providing the correct answer.
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project leaders are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project leaders have the right and responsibility to remove, edit, or
|
||||
reject messages, comments, commits, code, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any community member for other behaviors that they deem
|
||||
inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
## Moderation
|
||||
|
||||
Instances of behaviors that violate the Adafruit Community Code of Conduct
|
||||
may be reported by any member of the community. Community members are
|
||||
encouraged to report these situations, including situations they witness
|
||||
involving other community members.
|
||||
|
||||
You may report in the following ways:
|
||||
|
||||
In any situation, you may send an email to <support@adafruit.com>.
|
||||
|
||||
On the Adafruit Discord, you may send an open message from any channel
|
||||
to all Community Helpers by tagging @community helpers. You may also send an
|
||||
open message from any channel, or a direct message to @kattni#1507,
|
||||
@tannewt#4653, @Dan Halbert#1614, @cater#2442, @sommersoft#0222, or
|
||||
@Andon#8175.
|
||||
|
||||
Email and direct message reports will be kept confidential.
|
||||
|
||||
In situations on Discord where the issue is particularly egregious, possibly
|
||||
illegal, requires immediate action, or violates the Discord terms of service,
|
||||
you should also report the message directly to Discord.
|
||||
|
||||
These are the steps for upholding our community’s standards of conduct.
|
||||
|
||||
1. Any member of the community may report any situation that violates the
|
||||
Adafruit Community Code of Conduct. All reports will be reviewed and
|
||||
investigated.
|
||||
2. If the behavior is an egregious violation, the community member who
|
||||
committed the violation may be banned immediately, without warning.
|
||||
3. Otherwise, moderators will first respond to such behavior with a warning.
|
||||
4. Moderators follow a soft "three strikes" policy - the community member may
|
||||
be given another chance, if they are receptive to the warning and change their
|
||||
behavior.
|
||||
5. If the community member is unreceptive or unreasonable when warned by a
|
||||
moderator, or the warning goes unheeded, they may be banned for a first or
|
||||
second offense. Repeated offenses will result in the community member being
|
||||
banned.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct and the enforcement policies listed above apply to all
|
||||
Adafruit Community venues. This includes but is not limited to any community
|
||||
spaces (both public and private), the entire Adafruit Discord server, and
|
||||
Adafruit GitHub repositories. Examples of Adafruit Community spaces include
|
||||
but are not limited to meet-ups, audio chats on the Adafruit Discord, or
|
||||
interaction at a conference.
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. As a community
|
||||
member, you are representing our community, and are expected to behave
|
||||
accordingly.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 1.4, available at
|
||||
<https://www.contributor-covenant.org/version/1/4/code-of-conduct.html>,
|
||||
and the [Rust Code of Conduct](https://www.rust-lang.org/en-US/conduct.html).
|
||||
|
||||
For other projects adopting the Adafruit Community Code of
|
||||
Conduct, please contact the maintainers of those projects for enforcement.
|
||||
If you wish to use this code of conduct for your own project, consider
|
||||
explicitly mentioning your moderation policy or making a copy with your
|
||||
own moderation policy so as to avoid confusion.
|
||||
@@ -0,0 +1,377 @@
|
||||
/*********************************************************************
|
||||
This is an example sketch for our Monochrome Nokia 5110 LCD Displays
|
||||
|
||||
Pick one up today in the adafruit shop!
|
||||
------> http://www.adafruit.com/products/338
|
||||
|
||||
These displays use SPI to communicate, 4 or 5 pins are required to
|
||||
interface
|
||||
|
||||
Adafruit invests time and resources providing this open source code,
|
||||
please support Adafruit and open-source hardware by purchasing
|
||||
products from Adafruit!
|
||||
|
||||
Written by Limor Fried/Ladyada for Adafruit Industries.
|
||||
BSD license, check license.txt for more information
|
||||
All text above, and the splash screen must be included in any redistribution
|
||||
*********************************************************************/
|
||||
|
||||
#include <SPI.h>
|
||||
#include <Adafruit_GFX.h>
|
||||
#include <Adafruit_PCD8544.h>
|
||||
|
||||
// Software SPI (slower updates, more flexible pin options):
|
||||
// pin 7 - Serial clock out (SCLK)
|
||||
// pin 6 - Serial data out (DIN)
|
||||
// pin 5 - Data/Command select (D/C)
|
||||
// pin 4 - LCD chip select (CS)
|
||||
// pin 3 - LCD reset (RST)
|
||||
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
|
||||
|
||||
// Hardware SPI (faster, but must use certain hardware pins):
|
||||
// SCK is LCD serial clock (SCLK) - this is pin 13 on Arduino Uno
|
||||
// MOSI is LCD DIN - this is pin 11 on an Arduino Uno
|
||||
// pin 5 - Data/Command select (D/C)
|
||||
// pin 4 - LCD chip select (CS)
|
||||
// pin 3 - LCD reset (RST)
|
||||
// Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);
|
||||
// Note with hardware SPI MISO and SS pins aren't used but will still be read
|
||||
// and written to during SPI transfer. Be careful sharing these pins!
|
||||
|
||||
#define NUMFLAKES 10
|
||||
#define XPOS 0
|
||||
#define YPOS 1
|
||||
#define DELTAY 2
|
||||
|
||||
#define BLACK 1 ///< Black pixel
|
||||
#define WHITE 0 ///< White pixel
|
||||
|
||||
|
||||
#define LOGO16_GLCD_HEIGHT 16
|
||||
#define LOGO16_GLCD_WIDTH 16
|
||||
|
||||
static const unsigned char PROGMEM logo16_glcd_bmp[] =
|
||||
{ 0B00000000, 0B11000000,
|
||||
0B00000001, 0B11000000,
|
||||
0B00000001, 0B11000000,
|
||||
0B00000011, 0B11100000,
|
||||
0B11110011, 0B11100000,
|
||||
0B11111110, 0B11111000,
|
||||
0B01111110, 0B11111111,
|
||||
0B00110011, 0B10011111,
|
||||
0B00011111, 0B11111100,
|
||||
0B00001101, 0B01110000,
|
||||
0B00011011, 0B10100000,
|
||||
0B00111111, 0B11100000,
|
||||
0B00111111, 0B11110000,
|
||||
0B01111100, 0B11110000,
|
||||
0B01110000, 0B01110000,
|
||||
0B00000000, 0B00110000 };
|
||||
|
||||
void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
|
||||
uint8_t icons[NUMFLAKES][3];
|
||||
randomSeed(666); // whatever seed
|
||||
|
||||
// initialize
|
||||
for (uint8_t f=0; f< NUMFLAKES; f++) {
|
||||
icons[f][XPOS] = random(display.width());
|
||||
icons[f][YPOS] = 0;
|
||||
icons[f][DELTAY] = random(5) + 1;
|
||||
|
||||
Serial.print("x: ");
|
||||
Serial.print(icons[f][XPOS], DEC);
|
||||
Serial.print(" y: ");
|
||||
Serial.print(icons[f][YPOS], DEC);
|
||||
Serial.print(" dy: ");
|
||||
Serial.println(icons[f][DELTAY], DEC);
|
||||
}
|
||||
|
||||
while (1) {
|
||||
// draw each icon
|
||||
for (uint8_t f=0; f< NUMFLAKES; f++) {
|
||||
display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, BLACK);
|
||||
}
|
||||
display.display();
|
||||
delay(200);
|
||||
|
||||
while(Serial.available()) {
|
||||
switch (Serial.read()) {
|
||||
case 'w':display.setContrast(display.getContrast() + 1);
|
||||
break;
|
||||
case 's':if(display.getContrast()) display.setContrast(display.getContrast() - 1);
|
||||
break;
|
||||
case 'e':display.setBias(display.getBias() + 1);
|
||||
break;
|
||||
case 'd':if(display.getBias()) display.setBias(display.getBias() - 1);
|
||||
break;
|
||||
case 'R':display.setReinitInterval(10);
|
||||
break;
|
||||
case 'r':display.initDisplay();
|
||||
display.setReinitInterval(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
Serial.print("contrast (w/s): 0x");
|
||||
Serial.print(display.getContrast(), HEX);
|
||||
Serial.print(" bias (e/d): 0x");
|
||||
Serial.print(display.getBias(), HEX);
|
||||
Serial.print(" reinitialize display (r/R): 0x");
|
||||
Serial.print(display.getReinitInterval(), HEX);
|
||||
Serial.print(" \r");
|
||||
|
||||
// then erase it + move it
|
||||
for (uint8_t f=0; f< NUMFLAKES; f++) {
|
||||
display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE);
|
||||
// move it
|
||||
icons[f][YPOS] += icons[f][DELTAY];
|
||||
// if its gone, reinit
|
||||
if (icons[f][YPOS] > display.height()) {
|
||||
icons[f][XPOS] = random(display.width());
|
||||
icons[f][YPOS] = 0;
|
||||
icons[f][DELTAY] = random(5) + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void testdrawchar(void) {
|
||||
display.setTextSize(1);
|
||||
display.setTextColor(BLACK);
|
||||
display.setCursor(0,0);
|
||||
|
||||
for (uint8_t i=0; i < 168; i++) {
|
||||
if (i == '\n') continue;
|
||||
display.write(i);
|
||||
//if ((i > 0) && (i % 14 == 0))
|
||||
//display.println();
|
||||
}
|
||||
display.display();
|
||||
}
|
||||
|
||||
void testdrawcircle(void) {
|
||||
for (int16_t i=0; i<display.height(); i+=2) {
|
||||
display.drawCircle(display.width()/2, display.height()/2, i, BLACK);
|
||||
display.display();
|
||||
}
|
||||
}
|
||||
|
||||
void testfillrect(void) {
|
||||
uint8_t color = 1;
|
||||
for (int16_t i=0; i<display.height()/2; i+=3) {
|
||||
// alternate colors
|
||||
display.fillRect(i, i, display.width()-i*2, display.height()-i*2, color%2);
|
||||
display.display();
|
||||
color++;
|
||||
}
|
||||
}
|
||||
|
||||
void testdrawtriangle(void) {
|
||||
for (int16_t i=0; i<min(display.width(),display.height())/2; i+=5) {
|
||||
display.drawTriangle(display.width()/2, display.height()/2-i,
|
||||
display.width()/2-i, display.height()/2+i,
|
||||
display.width()/2+i, display.height()/2+i, BLACK);
|
||||
display.display();
|
||||
}
|
||||
}
|
||||
|
||||
void testfilltriangle(void) {
|
||||
uint8_t color = BLACK;
|
||||
for (int16_t i=min(display.width(),display.height())/2; i>0; i-=5) {
|
||||
display.fillTriangle(display.width()/2, display.height()/2-i,
|
||||
display.width()/2-i, display.height()/2+i,
|
||||
display.width()/2+i, display.height()/2+i, color);
|
||||
if (color == WHITE) color = BLACK;
|
||||
else color = WHITE;
|
||||
display.display();
|
||||
}
|
||||
}
|
||||
|
||||
void testdrawroundrect(void) {
|
||||
for (int16_t i=0; i<display.height()/2-2; i+=2) {
|
||||
display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, BLACK);
|
||||
display.display();
|
||||
}
|
||||
}
|
||||
|
||||
void testfillroundrect(void) {
|
||||
uint8_t color = BLACK;
|
||||
for (int16_t i=0; i<display.height()/2-2; i+=2) {
|
||||
display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, color);
|
||||
if (color == WHITE) color = BLACK;
|
||||
else color = WHITE;
|
||||
display.display();
|
||||
}
|
||||
}
|
||||
|
||||
void testdrawrect(void) {
|
||||
for (int16_t i=0; i<display.height()/2; i+=2) {
|
||||
display.drawRect(i, i, display.width()-2*i, display.height()-2*i, BLACK);
|
||||
display.display();
|
||||
}
|
||||
}
|
||||
|
||||
void testdrawline() {
|
||||
for (int16_t i=0; i<display.width(); i+=4) {
|
||||
display.drawLine(0, 0, i, display.height()-1, BLACK);
|
||||
display.display();
|
||||
}
|
||||
for (int16_t i=0; i<display.height(); i+=4) {
|
||||
display.drawLine(0, 0, display.width()-1, i, BLACK);
|
||||
display.display();
|
||||
}
|
||||
delay(250);
|
||||
|
||||
display.clearDisplay();
|
||||
for (int16_t i=0; i<display.width(); i+=4) {
|
||||
display.drawLine(0, display.height()-1, i, 0, BLACK);
|
||||
display.display();
|
||||
}
|
||||
for (int8_t i=display.height()-1; i>=0; i-=4) {
|
||||
display.drawLine(0, display.height()-1, display.width()-1, i, BLACK);
|
||||
display.display();
|
||||
}
|
||||
delay(250);
|
||||
|
||||
display.clearDisplay();
|
||||
for (int16_t i=display.width()-1; i>=0; i-=4) {
|
||||
display.drawLine(display.width()-1, display.height()-1, i, 0, BLACK);
|
||||
display.display();
|
||||
}
|
||||
for (int16_t i=display.height()-1; i>=0; i-=4) {
|
||||
display.drawLine(display.width()-1, display.height()-1, 0, i, BLACK);
|
||||
display.display();
|
||||
}
|
||||
delay(250);
|
||||
|
||||
display.clearDisplay();
|
||||
for (int16_t i=0; i<display.height(); i+=4) {
|
||||
display.drawLine(display.width()-1, 0, 0, i, BLACK);
|
||||
display.display();
|
||||
}
|
||||
for (int16_t i=0; i<display.width(); i+=4) {
|
||||
display.drawLine(display.width()-1, 0, i, display.height()-1, BLACK);
|
||||
display.display();
|
||||
}
|
||||
delay(250);
|
||||
}
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
Serial.println("PCD test");
|
||||
display.begin();
|
||||
// init done
|
||||
|
||||
// you can change the contrast around to adapt the display
|
||||
// for the best viewing!
|
||||
display.setContrast(75);
|
||||
|
||||
display.display(); // show splashscreen
|
||||
delay(2000);
|
||||
display.clearDisplay(); // clears the screen and buffer
|
||||
|
||||
// draw a single pixel
|
||||
display.drawPixel(10, 10, BLACK);
|
||||
display.display();
|
||||
delay(2000);
|
||||
display.clearDisplay();
|
||||
|
||||
// draw many lines
|
||||
testdrawline();
|
||||
display.display();
|
||||
delay(2000);
|
||||
display.clearDisplay();
|
||||
|
||||
// draw rectangles
|
||||
testdrawrect();
|
||||
display.display();
|
||||
delay(2000);
|
||||
display.clearDisplay();
|
||||
|
||||
// draw multiple rectangles
|
||||
testfillrect();
|
||||
display.display();
|
||||
delay(2000);
|
||||
display.clearDisplay();
|
||||
|
||||
// draw mulitple circles
|
||||
testdrawcircle();
|
||||
display.display();
|
||||
delay(2000);
|
||||
display.clearDisplay();
|
||||
|
||||
// draw a circle, 10 pixel radius
|
||||
display.fillCircle(display.width()/2, display.height()/2, 10, BLACK);
|
||||
display.display();
|
||||
delay(2000);
|
||||
display.clearDisplay();
|
||||
|
||||
testdrawroundrect();
|
||||
delay(2000);
|
||||
display.clearDisplay();
|
||||
|
||||
testfillroundrect();
|
||||
delay(2000);
|
||||
display.clearDisplay();
|
||||
|
||||
testdrawtriangle();
|
||||
delay(2000);
|
||||
display.clearDisplay();
|
||||
|
||||
testfilltriangle();
|
||||
delay(2000);
|
||||
display.clearDisplay();
|
||||
|
||||
// draw the first ~12 characters in the font
|
||||
testdrawchar();
|
||||
display.display();
|
||||
delay(2000);
|
||||
display.clearDisplay();
|
||||
|
||||
// text display tests
|
||||
display.setTextSize(1);
|
||||
display.setTextColor(BLACK);
|
||||
display.setCursor(0,0);
|
||||
display.println("Hello, world!");
|
||||
display.setTextColor(WHITE, BLACK); // 'inverted' text
|
||||
display.println(3.141592);
|
||||
display.setTextSize(2);
|
||||
display.setTextColor(BLACK);
|
||||
display.print("0x"); display.println(0xDEADBEEF, HEX);
|
||||
display.display();
|
||||
delay(2000);
|
||||
|
||||
// rotation example
|
||||
display.clearDisplay();
|
||||
display.setRotation(1); // rotate 90 degrees counter clockwise, can also use values of 2 and 3 to go further.
|
||||
display.setTextSize(1);
|
||||
display.setTextColor(BLACK);
|
||||
display.setCursor(0,0);
|
||||
display.println("Rotation");
|
||||
display.setTextSize(2);
|
||||
display.println("Example!");
|
||||
display.display();
|
||||
delay(2000);
|
||||
|
||||
// revert back to no rotation
|
||||
display.setRotation(0);
|
||||
|
||||
// miniature bitmap display
|
||||
display.clearDisplay();
|
||||
display.drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1);
|
||||
display.display();
|
||||
|
||||
// invert the display
|
||||
display.invertDisplay(true);
|
||||
delay(1000);
|
||||
display.invertDisplay(false);
|
||||
delay(1000);
|
||||
|
||||
// draw a bitmap icon and 'animate' movement
|
||||
testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_WIDTH, LOGO16_GLCD_HEIGHT);
|
||||
}
|
||||
|
||||
|
||||
void loop() {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
name=Adafruit PCD8544 Nokia 5110 LCD library
|
||||
version=2.0.1
|
||||
author=Adafruit
|
||||
maintainer=Adafruit <info@adafruit.com>
|
||||
sentence=Arduino driver for PC8544, most commonly found in small Nokia 5110's
|
||||
paragraph=Arduino driver for PC8544, most commonly found in small Nokia 5110's
|
||||
category=Display
|
||||
url=https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library
|
||||
architectures=*
|
||||
depends=Adafruit GFX Library, Adafruit BusIO
|
||||
@@ -0,0 +1,26 @@
|
||||
Software License Agreement (BSD License)
|
||||
|
||||
Copyright (c) 2012, Adafruit Industries
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
3. Neither the name of the copyright holders nor the
|
||||
names of its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
|
||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
Reference in New Issue
Block a user