// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ARDUINO - iBitmeter - Source .pde // Author: iSnotter@facebook.com // Version: 0.1a Revision: 001 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // INCLUDE FILES // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #include // ProtoThreads Library (used for multi-threading purpose) // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // GENERAL VARIABLES // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #define BAUD_RATE 9600 // Serial Device Baud Rate #define TERM_CHAR '\n' // Terminating Character #define BUF_LEN 128 // Buffer Length int led1 = 2; int led2 = 3; int led3 = 4; int led4 = 5; int led5 = 6; int led6 = 7; int led7 = 8; int led8 = 9; // Thread Structure struct pt pt_iSerialDaemon; // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // THREAD: iSERIALDAEMON // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ static int pThread_iSerialDaemon(struct pt *pt) { static unsigned long timestamp = 0; PT_BEGIN(pt); while(1) { PT_WAIT_UNTIL(pt, millis() - timestamp > 1); timestamp = millis(); int i; char incomingChar, buf[BUF_LEN]; memset(buf,'\0',BUF_LEN); i = 0; while(Serial.available()) { incomingChar = (char) Serial.read(); if(incomingChar != TERM_CHAR && i != BUF_LEN) { buf[i++] = incomingChar; } else { break; } delay(1); // wait for another byte } if (i > 2) { Serial.print("iCMD: "); Serial.print(buf); Serial.print(TERM_CHAR); } char *buffer = buf; char *str; int y=0; char *KBin; char *KBout; while((str = strtok_r(buffer, ":", &buffer)) != NULL) { if(y == 1) { KBin = str; } if(y == 2) { KBout = str; } y++; } int kbIN = atoi(KBin); int kbOUT = atoi(KBout); if(kbIN < 5) { digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); } if(kbIN > 5 && kbIN <= 100) { // set led 1 high digitalWrite(led1, HIGH); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); } if(kbIN > 100 && kbIN <= 500) { // set led 1/2 high digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, LOW); digitalWrite(led4, LOW); } if(kbIN > 500 && kbIN <= 1000) { digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, LOW); } if(kbIN > 1000) { // set led 1/2/3/4 high digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); } if(kbOUT < 5) { digitalWrite(led5, LOW); digitalWrite(led6, LOW); digitalWrite(led7, LOW); digitalWrite(led8, LOW); } if(kbOUT > 5 && kbOUT <= 25) { // set led 5 high digitalWrite(led5, HIGH); digitalWrite(led6, LOW); digitalWrite(led7, LOW); digitalWrite(led8, LOW); } if(kbOUT > 25 && kbOUT <= 50) { // set led 5/6 high digitalWrite(led5, HIGH); digitalWrite(led6, HIGH); digitalWrite(led7, LOW); digitalWrite(led8, LOW); } if(kbOUT > 50 && kbIN <= 100) { // set led 5/6/7 high digitalWrite(led5, HIGH); digitalWrite(led6, HIGH); digitalWrite(led7, HIGH); digitalWrite(led8, LOW); } if(kbOUT > 100) { // set led 5/6/7/8 high digitalWrite(led5, HIGH); digitalWrite(led6, HIGH); digitalWrite(led7, HIGH); digitalWrite(led8, HIGH); } delay(1000); } PT_END(pt); } // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ARDUINO SETUP // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void setup() { delay(5000); Serial.begin(BAUD_RATE); Serial.println("-------------"); Serial.println("Arduino Setup"); Serial.println("-------------"); delay(500); // INIT PINMODE Serial.print("Init PinMode"); delay(500); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); pinMode(led8, OUTPUT); Serial.println(" done ..."); delay(500); // INIT THREADS Serial.print("Init Threads"); PT_INIT(&pt_iSerialDaemon); delay(500); Serial.println(" done ..."); delay(500); Serial.println("------------"); Serial.println("Arduino Loop"); Serial.println("------------"); } // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ARDUINO LOOP // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void loop() { pThread_iSerialDaemon(&pt_iSerialDaemon); }