Ein Roboter mit bürstenlosem Antrieb, differenzial und NRF24L01 Funk. Großflächig gebaut um ein großes Solarpanel aufzunehmen.
https://gitlab.informatik.hs-fulda.de/fdai5253/roboter
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
242 lines
9.3 KiB
242 lines
9.3 KiB
/********************************************************************
|
|
This is a "Fast PCD8544 Library". It is designed to be used with
|
|
Nokia 5110 type of display, driven by the PCD8544 controller.
|
|
This library uses hardware SPI of your Arduino microcontroller,
|
|
and does not supprt 'software SPI' mode.
|
|
|
|
Written by Arthur Liberman (aka 'The Coolest'). http://www.alcpu.com
|
|
Special thanks goes out to 'robtillaart' for his help with debugging
|
|
and optimization.
|
|
|
|
BSD license, check license.txt for more information.
|
|
All text above must be included in any redistribution.
|
|
********************************************************************/
|
|
|
|
// Version 1.2 -- Sept. 15, 2013
|
|
|
|
#pragma once
|
|
#include "Arduino.h"
|
|
|
|
// It is very important to wire the LCD correctly.
|
|
// The following is the default wiring configuration for an Atmega168/328 based Arduino:
|
|
// PIN_DC D8
|
|
// PIN_RESET D9
|
|
// PIN_SCE D10
|
|
// PIN_SDIN D11
|
|
// PIN_SCLK D13
|
|
|
|
// You may change pins DC, Reset and SCE to map them to different pins on your Arduino board.
|
|
// Please keep SDIN and SCLK connected to your Arduino's MOSI and SCK (hardware SPI) pins.
|
|
// You can remap the LCD control pins by changing the following '#define' values:
|
|
// Please refer to the pin/port mapping for your Arduino device:
|
|
// http://arduino.cc/en/Hacking/PinMapping168
|
|
// http://arduino.cc/en/Hacking/PinMapping2560
|
|
// Pins labeled Px (PB, PC, etc.) stand for PORTx.
|
|
// The current version of this library only allows the use of one port for the control pins.
|
|
// Pins are mapped in binary order. Valid values are 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80.
|
|
// Px0 is the LSB pin of the port, which in turn is represented by the hexadecimal number 0x01.
|
|
// Px7 is the MSB pin of the port, which in turn is represented by the hexadecimal number 0x80.
|
|
|
|
// This is the port where the LCD is connected.
|
|
#define PCD8544_PORT PORTD
|
|
#define PCD8544_DDR DDRD // Should be DDRx, x = port name (B, C, D, etc.)
|
|
|
|
#define PIN_DC 0x20 // D5
|
|
#define PIN_RESET 0x08 // D3
|
|
#define PIN_CE 0x10 // D4
|
|
#define PINS_CE_DC (PIN_DC | PIN_CE)
|
|
|
|
// When DC is '1' the LCD expects data, when it is '0' it expects a command.
|
|
#define PCD8544_COMMAND 0
|
|
#define PCD8544_DATA PIN_DC
|
|
|
|
// You may find a different size screen, but this one is 84 by 48 pixels
|
|
#define PCD8544_X_PIXELS 84
|
|
#define PCD8544_Y_PIXELS 48
|
|
#define PCD8544_ROWS 6
|
|
|
|
#define BUF_LEN 504 // 84 * 6 (6 rows of 8 bits)
|
|
|
|
// Functions gotoXY, writeBitmap, renderString, writeLine and writeRect
|
|
// will return PCD8544_SUCCESS if they succeed and PCD8544_ERROR if they fail.
|
|
#define PCD8544_SUCCESS 1
|
|
#define PCD8544_ERROR 0
|
|
|
|
//Umlaute
|
|
#define Ae 0x80
|
|
#define ae 0x81
|
|
#define Oe 0x82
|
|
#define oe 0x83
|
|
#define Ue 0x84
|
|
#define ue 0x85
|
|
|
|
|
|
class PCD8544_SPI : public Print
|
|
{
|
|
public:
|
|
PCD8544_SPI();
|
|
|
|
void begin(bool invert = false);
|
|
void begin(bool invert, uint8_t vop, uint8_t tempCoef, uint8_t bias);
|
|
void clear();
|
|
uint8_t gotoXY(uint8_t x, uint8_t y);
|
|
virtual size_t write(uint8_t uint8_t);
|
|
uint8_t writeBitmap(const uint8_t *bitmap, uint8_t x, uint8_t y, uint8_t width, uint8_t height);
|
|
void contrast(uint8_t cnt);
|
|
|
|
private:
|
|
|
|
//void init(void);
|
|
void writeLcd(uint8_t dataOrCommand, uint8_t data);
|
|
void writeLcd(uint8_t dataOrCommand, const uint8_t *data, uint16_t count);
|
|
|
|
uint8_t m_Column;
|
|
uint8_t m_Line;
|
|
void advanceXY(uint8_t columns);
|
|
};
|
|
|
|
class PCD8544_SPI_FB : public Print
|
|
{
|
|
public:
|
|
PCD8544_SPI_FB();
|
|
|
|
// Call a render method after any print/write methods are called.
|
|
// For best perofrmance aggragate all writes before calling a render method.
|
|
void renderLine();
|
|
void renderAll();
|
|
uint8_t renderString(uint8_t x, uint8_t y, uint16_t length);
|
|
|
|
void setPixel(uint8_t x, uint8_t y, uint8_t value);
|
|
bool PCD8544_SPI_FB::getPixel(uint8_t x, uint8_t y);
|
|
|
|
// WriteLine currently only supports horizontal and vertical lines.
|
|
uint8_t writeLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2);
|
|
uint8_t writeRect(uint8_t x, uint8_t y, uint8_t width, uint8_t height, bool fill = false);
|
|
|
|
void begin(bool invert = false);
|
|
void begin(bool invert, uint8_t vop, uint8_t tempCoef, uint8_t bias);
|
|
void clear(bool render = true);
|
|
uint8_t gotoXY(uint8_t x, uint8_t y);
|
|
virtual size_t write(uint8_t uint8_t);
|
|
uint8_t writeBitmap(const uint8_t *bitmap, uint8_t x, uint8_t y, uint8_t width, uint8_t height);
|
|
void contrast(uint8_t cnt);
|
|
void printOut(String string, uint8_t line, uint8_t start);
|
|
|
|
private:
|
|
|
|
//void init(void);
|
|
void writeLcd(uint8_t dataOrCommand, uint8_t data);
|
|
void writeLcd(uint8_t dataOrCommand, const uint8_t *data, uint16_t count);
|
|
|
|
inline void swap(uint8_t &a, uint8_t &b);
|
|
uint16_t m_Position;
|
|
uint8_t m_Buffer[BUF_LEN];
|
|
};
|
|
|
|
//This table contains the hex values that represent pixels
|
|
//for a font that is 5 pixels wide and 8 pixels high
|
|
static const PROGMEM uint8_t ASCII[][5] = {
|
|
{ 0x00, 0x00, 0x00, 0x00, 0x00 } // 20 (space)
|
|
,{ 0x00, 0x00, 0x5f, 0x00, 0x00 } // 21 !
|
|
,{ 0x00, 0x07, 0x00, 0x07, 0x00 } // 22 "
|
|
,{ 0x14, 0x7f, 0x14, 0x7f, 0x14 } // 23 #
|
|
,{ 0x24, 0x2a, 0x7f, 0x2a, 0x12 } // 24 $
|
|
,{ 0x23, 0x13, 0x08, 0x64, 0x62 } // 25 %
|
|
,{ 0x36, 0x49, 0x55, 0x22, 0x50 } // 26 &
|
|
,{ 0x00, 0x05, 0x03, 0x00, 0x00 } // 27 '
|
|
,{ 0x00, 0x1c, 0x22, 0x41, 0x00 } // 28 (
|
|
,{ 0x00, 0x41, 0x22, 0x1c, 0x00 } // 29 )
|
|
,{ 0x14, 0x08, 0x3e, 0x08, 0x14 } // 2a *
|
|
,{ 0x08, 0x08, 0x3e, 0x08, 0x08 } // 2b +
|
|
,{ 0x00, 0x50, 0x30, 0x00, 0x00 } // 2c ,
|
|
,{ 0x08, 0x08, 0x08, 0x08, 0x08 } // 2d -
|
|
,{ 0x00, 0x60, 0x60, 0x00, 0x00 } // 2e .
|
|
,{ 0x20, 0x10, 0x08, 0x04, 0x02 } // 2f /
|
|
,{ 0x3e, 0x51, 0x49, 0x45, 0x3e } // 30 0
|
|
,{ 0x00, 0x42, 0x7f, 0x40, 0x00 } // 31 1
|
|
,{ 0x42, 0x61, 0x51, 0x49, 0x46 } // 32 2
|
|
,{ 0x21, 0x41, 0x45, 0x4b, 0x31 } // 33 3
|
|
,{ 0x18, 0x14, 0x12, 0x7f, 0x10 } // 34 4
|
|
,{ 0x27, 0x45, 0x45, 0x45, 0x39 } // 35 5
|
|
,{ 0x3c, 0x4a, 0x49, 0x49, 0x30 } // 36 6
|
|
,{ 0x01, 0x71, 0x09, 0x05, 0x03 } // 37 7
|
|
,{ 0x36, 0x49, 0x49, 0x49, 0x36 } // 38 8
|
|
,{ 0x06, 0x49, 0x49, 0x29, 0x1e } // 39 9
|
|
,{ 0x00, 0x36, 0x36, 0x00, 0x00 } // 3a :
|
|
,{ 0x00, 0x56, 0x36, 0x00, 0x00 } // 3b ;
|
|
,{ 0x08, 0x14, 0x22, 0x41, 0x00 } // 3c <
|
|
,{ 0x14, 0x14, 0x14, 0x14, 0x14 } // 3d =
|
|
,{ 0x00, 0x41, 0x22, 0x14, 0x08 } // 3e >
|
|
,{ 0x02, 0x01, 0x51, 0x09, 0x06 } // 3f ?
|
|
,{ 0x32, 0x49, 0x79, 0x41, 0x3e } // 40 @
|
|
,{ 0x7e, 0x11, 0x11, 0x11, 0x7e } // 41 A
|
|
,{ 0x7f, 0x49, 0x49, 0x49, 0x36 } // 42 B
|
|
,{ 0x3e, 0x41, 0x41, 0x41, 0x22 } // 43 C
|
|
,{ 0x7f, 0x41, 0x41, 0x22, 0x1c } // 44 D
|
|
,{ 0x7f, 0x49, 0x49, 0x49, 0x41 } // 45 E
|
|
,{ 0x7f, 0x09, 0x09, 0x09, 0x01 } // 46 F
|
|
,{ 0x3e, 0x41, 0x49, 0x49, 0x7a } // 47 G
|
|
,{ 0x7f, 0x08, 0x08, 0x08, 0x7f } // 48 H
|
|
,{ 0x00, 0x41, 0x7f, 0x41, 0x00 } // 49 I
|
|
,{ 0x20, 0x40, 0x41, 0x3f, 0x01 } // 4a J
|
|
,{ 0x7f, 0x08, 0x14, 0x22, 0x41 } // 4b K
|
|
,{ 0x7f, 0x40, 0x40, 0x40, 0x40 } // 4c L
|
|
,{ 0x7f, 0x02, 0x0c, 0x02, 0x7f } // 4d M
|
|
,{ 0x7f, 0x04, 0x08, 0x10, 0x7f } // 4e N
|
|
,{ 0x3e, 0x41, 0x41, 0x41, 0x3e } // 4f O
|
|
,{ 0x7f, 0x09, 0x09, 0x09, 0x06 } // 50 P
|
|
,{ 0x3e, 0x41, 0x51, 0x21, 0x5e } // 51 Q
|
|
,{ 0x7f, 0x09, 0x19, 0x29, 0x46 } // 52 R
|
|
,{ 0x46, 0x49, 0x49, 0x49, 0x31 } // 53 S
|
|
,{ 0x01, 0x01, 0x7f, 0x01, 0x01 } // 54 T
|
|
,{ 0x3f, 0x40, 0x40, 0x40, 0x3f } // 55 U
|
|
,{ 0x1f, 0x20, 0x40, 0x20, 0x1f } // 56 V
|
|
,{ 0x3f, 0x40, 0x38, 0x40, 0x3f } // 57 W
|
|
,{ 0x63, 0x14, 0x08, 0x14, 0x63 } // 58 X
|
|
,{ 0x07, 0x08, 0x70, 0x08, 0x07 } // 59 Y
|
|
,{ 0x61, 0x51, 0x49, 0x45, 0x43 } // 5a Z
|
|
,{ 0x00, 0x7f, 0x41, 0x41, 0x00 } // 5b [
|
|
,{ 0x02, 0x04, 0x08, 0x10, 0x20 } // 5c backslash
|
|
,{ 0x00, 0x41, 0x41, 0x7f, 0x00 } // 5d ]
|
|
,{ 0x04, 0x02, 0x01, 0x02, 0x04 } // 5e ^
|
|
,{ 0x40, 0x40, 0x40, 0x40, 0x40 } // 5f _
|
|
,{ 0x00, 0x01, 0x02, 0x04, 0x00 } // 60 `
|
|
,{ 0x20, 0x54, 0x54, 0x54, 0x78 } // 61 a
|
|
,{ 0x7f, 0x48, 0x44, 0x44, 0x38 } // 62 b
|
|
,{ 0x38, 0x44, 0x44, 0x44, 0x20 } // 63 c
|
|
,{ 0x38, 0x44, 0x44, 0x48, 0x7f } // 64 d
|
|
,{ 0x38, 0x54, 0x54, 0x54, 0x18 } // 65 e
|
|
,{ 0x08, 0x7e, 0x09, 0x01, 0x02 } // 66 f
|
|
,{ 0x0c, 0x52, 0x52, 0x52, 0x3e } // 67 g
|
|
,{ 0x7f, 0x08, 0x04, 0x04, 0x78 } // 68 h
|
|
,{ 0x00, 0x44, 0x7d, 0x40, 0x00 } // 69 i
|
|
,{ 0x20, 0x40, 0x44, 0x3d, 0x00 } // 6a j
|
|
,{ 0x7f, 0x10, 0x28, 0x44, 0x00 } // 6b k
|
|
,{ 0x00, 0x41, 0x7f, 0x40, 0x00 } // 6c l
|
|
,{ 0x7c, 0x04, 0x18, 0x04, 0x78 } // 6d m
|
|
,{ 0x7c, 0x08, 0x04, 0x04, 0x78 } // 6e n
|
|
,{ 0x38, 0x44, 0x44, 0x44, 0x38 } // 6f o
|
|
,{ 0x7c, 0x14, 0x14, 0x14, 0x08 } // 70 p
|
|
,{ 0x08, 0x14, 0x14, 0x18, 0x7c } // 71 q
|
|
,{ 0x7c, 0x08, 0x04, 0x04, 0x08 } // 72 r
|
|
,{ 0x48, 0x54, 0x54, 0x54, 0x20 } // 73 s
|
|
,{ 0x04, 0x3f, 0x44, 0x40, 0x20 } // 74 t
|
|
,{ 0x3c, 0x40, 0x40, 0x20, 0x7c } // 75 u
|
|
,{ 0x1c, 0x20, 0x40, 0x20, 0x1c } // 76 v
|
|
,{ 0x3c, 0x40, 0x30, 0x40, 0x3c } // 77 w
|
|
,{ 0x44, 0x28, 0x10, 0x28, 0x44 } // 78 x
|
|
,{ 0x0c, 0x50, 0x50, 0x50, 0x3c } // 79 y
|
|
,{ 0x44, 0x64, 0x54, 0x4c, 0x44 } // 7a z
|
|
,{ 0x00, 0x08, 0x36, 0x41, 0x00 } // 7b {
|
|
,{ 0x00, 0x00, 0x7f, 0x00, 0x00 } // 7c |
|
|
,{ 0x00, 0x41, 0x36, 0x08, 0x00 } // 7d }
|
|
,{ 0x10, 0x08, 0x08, 0x10, 0x08 } // 7e ~
|
|
,{ 0x78, 0x46, 0x41, 0x46, 0x78 } // 7f DEL
|
|
//Umlaute
|
|
,{ 0xfd, 0x22, 0x22, 0x22, 0xfd } // 80 Ae
|
|
,{ 0x21, 0x54, 0x54, 0x54, 0x79 } // 81 ae
|
|
,{ 0x7d, 0x41, 0x41, 0x41, 0x7d } // 82 Oe
|
|
,{ 0x38, 0x88, 0x88, 0x88, 0x38 } // 83 oe
|
|
,{ 0x7e, 0x41, 0x40, 0x41, 0x7e } // 84 Ue
|
|
,{ 0x3c, 0x41, 0x40, 0x21, 0x7c } // 85 ue
|
|
};
|