Tasmota/lib/lib_display/arduino-tm1637/examples/LowLevel/LowLevel.ino

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);
}