diff --git a/uno-stats-monitor/monitor_uno.ino b/uno-stats-monitor/monitor_uno.ino deleted file mode 100644 index a4eaba9..0000000 --- a/uno-stats-monitor/monitor_uno.ino +++ /dev/null @@ -1,425 +0,0 @@ -/* - * UNO Monitor Receiver (4-bit LCD Version) - * Kidacro - * - * Waits for input over serial connection and displays on LCD & LED - * Receives IR events and reports them over serial connection to a daemon - * - * Input Schema: - * Start char is: '#' - * End char is: '@' - * 2nd char denotes which line number/mode to use - * - * Example: - * Line 1: #1Archamedis Status@ - * Line 2: #299% free / etc.@ - * LAVG 3: #324@ - * - * Output Schema: - * Multimedia Controls use single characters to denote which button was pressed - * P power - * M mute - * m mode - * p pause/play - * b back - * f forward - * e eq - * - vol down - * + vol up - * r return - * u usb scan - * 0 number 0 - * 1 number 1 - * 2 number 2 - * 3 number 3 - * 4 number 4 - * 5 number 5 - * 6 number 6 - * 7 number 7 - * 8 number 8 - * 9 number 9 - * R repeat - * Z other button pressed - */ - -#include -#include -#include - -/* LCD Pinout: - * LCD RS pin to digital pin 12 - * LCD Enable pin to digital pin 11 - * LCD D4 pin to digital pin 5 - * LCD D5 pin to digital pin 4 - * LCD D6 pin to digital pin 3 - * LCD D7 pin to digital pin 2 - * LCD R/W pin to ground - * LCD VSS pin to ground - * LCD VCC pin to 5V - * 10K resistor: - * ends to +5V and ground - * wiper to LCD VO pin (pin 3) -*/ - -/* LED Pinout: - * LED DataIn(DIN) to digital pin 10 - * LED LOAD(CS) to digital pin 9 - * LED CLK to digital pin 8 - * LED VSS pin to 5V - * LED GND to ground -*/ - -/* IR Pinout - * IR Signal to digital pin 13 - * IR VSS pin to 5V - * IR GND to ground -*/ - -// LCD vars -const int LCDRS = 12, LCDEN = 11, LCDD4 = 5, LCDD5 = 4, LCDD6 = 3, LCDD7 = 2; -int LCDLength = 16; -LiquidCrystal LCD(LCDRS, LCDEN, LCDD4, LCDD5, LCDD6, LCDD7); - -// LED vars -const int LEDIN = 10, LEDCS = 9, LEDCLK = 8; -LedControl LEDlc=LedControl(LEDIN,LEDCLK,LEDCS,1); -int LEDBrightness = 1; // default = 8 / max = 15 -unsigned long LEDdelaytime1=3; -unsigned long LEDdelaytime2=3; - -// IR vars -const int IRSIG = 13; -IRrecv Irrecv(IRSIG); -decode_results IRresults; - -// Serial vars -const byte SERnumChars = 32; -char SERrecvChars[SERnumChars]; -boolean SERnewData = false; - -// Debugging -boolean DEBUG = false; - -void LEDSetup(void) -{ - /* - The MAX72XX is in power-saving mode on startup, - we have to do a wakeup call - */ - LEDlc.shutdown(0,false); - - /* Set the brightness */ - LEDlc.setIntensity(0,LEDBrightness); - - /* and clear the display */ - LEDlc.clearDisplay(0); -} - -void LcdSetup(void) -{ - // set up the LCD's number of columns and rows: - LCD.begin(LCDLength, 2); - - // clear - LCD.clear(); -} - -void IRSetup(void) -{ - // start the receiver - Irrecv.enableIRIn(); -} - -void LcdL1(boolean wipe = false) -{ - delay(10); - LCD.setCursor(0, 0); // Define the cursor position as the 1st position of the 1st line - - if(wipe) { - LcdWrite(" "); // 16 spaces for a blank line - LCD.setCursor(0, 0); - } - - delay(10); -} - -void LcdL2(boolean wipe = false) -{ - delay(10); - LCD.setCursor(0, 1); // Define the cursor position as the 1st position of the 2nd line - - if(wipe) { - LcdWrite(" "); // 16 spaces for a blank line - LCD.setCursor(0, 1); - } - - delay(10); -} - -void LcdIntro(void) -{ - // Print a "waiting" message to the LCD. - LcdL1(); - LCD.print("Starting Up..."); - LcdL2(); - LCD.print("Waiting for data"); -} - -void LcdCls(void) -{ - delay(10); - LCD.clear(); // The screen is empty - LcdL1(); // the cursor position is zeroed - delay(10); -} - -/* -TODO: returns starting position of text or 0 for 1st position -void LcdCenter(int mylen) -{ - int mypos = 0; - - return mypos; -}*/ - -void LcdWrite(String mymessage) -{ - int i = 0; - unsigned int mylen = mymessage.length(); - - // trunicate string to lcd line length - if(mylen > LCDLength) { - mylen = LCDLength; - } - - // Debug input and length - if(DEBUG) { - Serial.println("\n\nString: "); - Serial.println(mymessage); - Serial.println(mymessage.length()); - } - - // Output string - //LCD.print(mymessage); - - // Output character by character - for(i=0; i < mylen; i++) { - char c = mymessage[i]; - if(c != '\b') { - delay(10); - LCD.print(c); - delay(10); - } - } -} - -void LedIntro() { - for(int row=0;row<8;row++) { - for(int col=0;col<8;col++) { - delay(LEDdelaytime2); - LEDlc.setLed(0,row,col,true); - delay(LEDdelaytime2); - for(int i=0;i= 12) segments = 1; - if(myload >= 25) segments = 2; - if(myload >= 37) segments = 3; - if(myload >= 50) segments = 4; - if(myload >= 62) segments = 5; - if(myload >= 75) segments = 6; - if(myload >= 87) segments = 7; - if(myload >= 95) segments = 8; - - // segments as rows - for(int row=0;row<8;row++) { - for(int col=0;col 0 && SERnewData == false) { - // process serial signal - rc = Serial.read(); - - if(recvInProgress == true) { - if(rc != endMarker) { - SERrecvChars[ndx] = rc; - ndx++; - if (ndx >= SERnumChars) { - ndx = SERnumChars - 1; - } - } - else { - SERrecvChars[ndx] = '\0'; // terminate the string - recvInProgress = false; - ndx = 0; - SERnewData = true; - } - } - else if(rc == startMarker) { - recvInProgress = true; - } - } -} - -// process new data -// data schema: -// 1st character denotes function: -// 1 - print on 1st line as is -// 2 - print on 2nd line as is -// 3 - display load on LCD matrix -// 4 - set a setting -void procNewData() -{ - if(SERnewData == true) { - if(DEBUG) { - Serial.print("This just in ... "); - Serial.println(SERrecvChars); - } - - // Chooser - // dev: we have to define 1st character (line number) as BS and when printing, search for that BS character to skip printing that 1 character - // print on line 1 - if(SERrecvChars[0] == '1') { - LcdL1(true); - SERrecvChars[0] = '\b'; - LcdWrite(SERrecvChars); - } - - // print on line 2 - else if(SERrecvChars[0] == '2') { - LcdL2(true); - SERrecvChars[0] = '\b'; - LcdWrite(SERrecvChars); - } - - // show load on led matrix - else if(SERrecvChars[0] == '3') { - SERrecvChars[0] = ' '; - LedShowLoad(SERrecvChars); - } - - SERnewData = false; - } -} - -void setup (void) -{ - // init HW - LcdSetup(); - LEDSetup(); - IRSetup(); - - // open serial port - Serial.begin(9600); - - // display intros - LcdIntro(); - LedIntro(); -} - -// main() -void loop (void) -{ - // process IR signal - if(Irrecv.decode(&IRresults)) { - IRtranslate(); - Irrecv.resume(); // receive the next value - } - - // process serial input - SERrecv(); - - // process new data - procNewData(); -}