86 lines
2.9 KiB
C++
86 lines
2.9 KiB
C++
#include <DigiUSB.h>
|
|
#include <EEPROM.h>
|
|
#include "LedControl.h"
|
|
|
|
/*
|
|
Now we need a LedControl to work with.
|
|
pin 2 is connected to the DataIn
|
|
pin 1 is connected to the CLK
|
|
pin 0 is connected to LOAD
|
|
We have only a single MAX72XX.
|
|
*/
|
|
|
|
LedControl lc=LedControl(2,1,0,1);
|
|
|
|
void setup() {
|
|
DigiUSB.begin();
|
|
/*
|
|
The MAX72XX is in power-saving mode on startup,
|
|
we have to do a wakeup call
|
|
*/
|
|
lc.shutdown(0,false);
|
|
/* Set the brightness to a medium values */
|
|
lc.setIntensity(0,0);
|
|
/* and clear the display */
|
|
lc.clearDisplay(0);
|
|
pinMode(3, OUTPUT);
|
|
delay(1000);
|
|
}
|
|
|
|
void loop() {
|
|
byte lastRead;
|
|
byte lastCmd = 0xFF;
|
|
byte value;
|
|
DigiUSB.refresh();
|
|
while (true) { // loop forever
|
|
if (DigiUSB.available()) {
|
|
// something to read
|
|
lastRead = DigiUSB.read();
|
|
if (lastRead >= 0x20 && lastRead<=0x7F){
|
|
if (lastCmd == 0xFF){ // Если ранее команд не было, значит считываем команду
|
|
lastCmd = lastRead;
|
|
}else{ // команда есть, операнд считали, выполняем
|
|
if (lastCmd >=0x41 && lastCmd <=0x48){ // команда установки в сегменте нужного кода ABCDEFGH
|
|
value = EEPROM.read(lastRead);
|
|
lc.setRow(0, 7-(lastCmd-0x41), value+0x80);
|
|
}else if (lastCmd >=0x61 && lastCmd <=0x68){ // команда установки в сегменте нужного кода abcdefgh
|
|
value = EEPROM.read(lastRead);
|
|
lc.setRow(0, 7-(lastCmd-0x61), value);
|
|
}else if (lastCmd == 0x69){ // команда яркости i 0..9abcdef
|
|
if (lastRead >=0x30 && lastRead <= 0x39){
|
|
lc.setIntensity(0, lastRead-0x30);
|
|
}else if (lastRead >=0x61 && lastRead <= 0x66){
|
|
lc.setIntensity(0, lastRead-0x57);
|
|
}
|
|
}else if (lastCmd == 0x6C){ // команда количества разрядов l 0..7
|
|
if (lastRead >=0x30 && lastRead <= 0x37){
|
|
lc.setScanLimit(0, lastRead-0x30);
|
|
}
|
|
}else if (lastCmd == 0x78){ // команда очистки экрана x0
|
|
if (lastRead == 0x30){
|
|
lc.clearDisplay(0);
|
|
}
|
|
}else if (lastCmd == 0x73){ // команда s0..1
|
|
if (lastRead == 0x30){
|
|
lc.shutdown(0,false);
|
|
}else{
|
|
lc.shutdown(0,true);
|
|
}
|
|
}else if (lastCmd == 0x7a){ // команда z0..f
|
|
if (lastRead == 0x30){
|
|
noTone(3);
|
|
}else{
|
|
tone(3, 100*(lastRead-0x30));
|
|
}
|
|
}
|
|
lastCmd = 0xFF;
|
|
}
|
|
}else{
|
|
lastCmd = 0xFF;
|
|
}
|
|
}
|
|
// refresh the usb port for 10 milliseconds
|
|
DigiUSB.delay(10);
|
|
}
|
|
}
|