mirror of https://github.com/arendst/Tasmota.git
112 lines
3.2 KiB
C++
Executable File
112 lines
3.2 KiB
C++
Executable File
/*
|
|
Low level (advanced) example
|
|
|
|
In this example the display is controlled by the low level command function.
|
|
See SevenSegmentTM1637.h for more details on how the protocol actually works and which commands it accepts.
|
|
|
|
The circuit:
|
|
* connect TM1637 pin CLK to Arduino pin D4
|
|
* connect TM1637 pin DIO to Arduino pin D5
|
|
* connect TM1637 pin Vcc to Arduino pin 5V
|
|
* connect TM1637 pin GND to Arduino pin GND
|
|
|
|
Created 25 September 2015
|
|
By Bram Harmsen
|
|
|
|
https://github.com/bremme/arduino-tm1637
|
|
|
|
*/
|
|
|
|
// include the SevenSegmentTM1637 library
|
|
#include "SevenSegmentTM1637.h"
|
|
|
|
/* initialize global TM1637 Display object
|
|
* The constructor takes two arguments, the number of the clock pin and the digital output pin:
|
|
* SevenSegmentTM1637(byte pinCLK, byte pinDIO);
|
|
*/
|
|
const byte PIN_CLK = 4; // define CLK pin (any digital pin)
|
|
const byte PIN_DIO = 5; // define DIO pin (any digital pin)
|
|
SevenSegmentTM1637 display(PIN_CLK, PIN_DIO);
|
|
|
|
// run setup code
|
|
void setup() {
|
|
Serial.begin(9600); // initializes the Serial connection @ 9600 baud
|
|
};
|
|
|
|
void loop() {
|
|
// set brightness
|
|
uint8_t setDisplayCmd = B10000000; // bit 6,7
|
|
uint8_t brightnessBits = B111; // bit 0,1,2 (7 = max)
|
|
uint8_t displayOnBit = B1000; // bit 3
|
|
// construct complete command
|
|
uint8_t command = setDisplayCmd | brightnessBits | displayOnBit;
|
|
|
|
// turn display on and set brightness to max (7)
|
|
bool ack = display.command(command);
|
|
// print acknowledged?
|
|
Serial.println(ack);
|
|
|
|
// write init to display using automatic address
|
|
uint8_t setDataCmd = B01000000; // bit 6,7
|
|
ack = display.command(setDataCmd);
|
|
Serial.println(ack);
|
|
|
|
uint8_t setAddrCmd = B11000000; // bit 6,7 set addr to 0
|
|
uint8_t dataI = B00000110; // I
|
|
uint8_t dataN = B00110111; // N
|
|
uint8_t dataT = B01111000; // T
|
|
|
|
uint8_t commands[5];
|
|
commands[0] = setAddrCmd;
|
|
commands[1] = dataI;
|
|
commands[2] = dataN;
|
|
commands[3] = dataI;
|
|
commands[4] = dataT;
|
|
|
|
ack = display.command(commands, 5);
|
|
Serial.println(ack);
|
|
delay(1000);
|
|
|
|
// dim display
|
|
brightnessBits = B001; // bit 0,1,2 level=1;
|
|
command = setDisplayCmd | brightnessBits | displayOnBit;
|
|
display.command(command);
|
|
delay(1000);
|
|
|
|
// set back to full brightness
|
|
brightnessBits = B111; // bit 0,1,2 (7 = max)
|
|
command = setDisplayCmd | brightnessBits | displayOnBit;
|
|
display.command(command);
|
|
delay(1000);
|
|
|
|
// write characters to display in non auto mode
|
|
setDataCmd |= 1 << 2; // bit 2 control auto/manual address
|
|
ack = display.command(setDataCmd);
|
|
Serial.println(ack);
|
|
|
|
commands[1] = B01110111;
|
|
commands[2] = B01111111;
|
|
commands[3] = B00111001;
|
|
commands[4] = B01011110;
|
|
|
|
for (uint8_t i = 1; i < 5; i++) {
|
|
commands[1] = commands[i]; // set character
|
|
display.command(commands, 2); // write character to display
|
|
commands[0]++; // increase address
|
|
}
|
|
delay(1000);
|
|
|
|
// set back to auto address mode
|
|
setDataCmd &= ~(1 << 2); // bit 2 control auto/manual address
|
|
ack = display.command(setDataCmd);
|
|
Serial.println(ack);
|
|
|
|
// clear display
|
|
commands[0] = setAddrCmd;
|
|
commands[1] = 0; commands[2] = 0;commands[3] = 0; commands[4] = 0;
|
|
|
|
// clear display
|
|
display.command(commands, 5);
|
|
delay(1000);
|
|
}
|