//serialInterface // Tim Hirzel February 2008 // This is a very basic serial interface for controlling the PID loop. // thanks to the Serial exampe code // All code released under // Creative Commons Attribution-Noncommercial-Share Alike 3.0 #include "floatToString.h" int incomingByte = 0; float delta = 1.0; boolean autoupdate = false; float b; // used to changing brightness unsigned long lastUpdateTime = 0; int curVarAddress = MIN_ADDRESS; char buff[20]; // used for printing floats void setupSerialInterface() { Serial.begin(115200); // Serial.println("\nWelcome to the BBCC, the Bare Bones Coffee Controller for Arduino"); // Serial.println("Send back one or more characters to setup the controller."); // Serial.println("If this is your initial run, please enter 'R' to Reset the EEPROM."); //Serial.println("Enter '?' for help. Here's to a great cup!"); Serial.println("hi!"); } void updateSerialInterface() { while(Serial.available()){ incomingByte = Serial.read(); switch (incomingByte) { case 'R': for (int a = MIN_ADDRESS; a <= MAX_ADDRESS; a +=4) { writeFloat(0.0, a); } break; case 'e': //UP curVarAddress -=4; if (curVarAddress < MIN_ADDRESS) curVarAddress = MAX_ADDRESS; break; case 'd': //DOWN curVarAddress +=4; if (curVarAddress > MAX_ADDRESS) curVarAddress = MIN_ADDRESS; break; case 's': //LEFT delta *= 10.0; if (delta > MAX_DELTA) delta = MAX_DELTA; break; case 'f': //RIGHT delta /= 10.0; if (delta < MIN_DELTA) delta = MIN_DELTA; break; case ',': //DECREASE SETTING writeFloat(readFloat(curVarAddress) - delta, curVarAddress); break; case '.': // INCREASE SETTING writeFloat(readFloat(curVarAddress) + delta, curVarAddress); break; case'u' : autoupdate = not autoupdate; break; case 'b': printPIDDebugString(); Serial.println(); break; /* case '-': b = lcdGetBrightness(); b -= 10.0; if (b < 0.0) b = 0.0; lcdSetBrightness(b); break; case '=': b = lcdGetBrightness(); b += 10.0; if (b > 100.0) b = 100.0; lcdSetBrightness(b); break; */ } } if (millis() < lastUpdateTime) { lastUpdateTime = 0; } if ((millis() - lastUpdateTime) > AUTO_PRINT_INTERVAL) { // this is triggers every slightly more than a second from the delay between these two millis() calls lastUpdateTime += AUTO_PRINT_INTERVAL; if (autoupdate) { printStatusForGraph(); } } } void printOneVal(float f) { Serial.print(floatToString(buff, f,PRINT_PLACES_AFTER_DECIMAL, 0, false, true)); Serial.print(", "); } void printStatusForGraph() { printOneVal(getLastTemp()); for (int a = MIN_ADDRESS; a <= MAX_ADDRESS; a +=4) { printOneVal(readFloat(a)); } printOneVal((float)getHeatCycles()); printOneVal(delta); Serial.println(floatToString(buff, curVarAddress,0, 0, false, true)); } /* void printStatus { // A means for getting feedback on the current system status and controllable parameters Serial.print(" SET TEMP:"); Serial.print(floatToString(getTargetTemp(),PRINT_PLACES_AFTER_DECIMAL)); Serial.print(", CUR TEMP:"); Serial.print(floatToString(getLastMeasuredTemp(),PRINT_PLACES_AFTER_DECIMAL)); Serial.print(", GAINS p:"); Serial.print(floatToString(getP(),PRINT_PLACES_AFTER_DECIMAL)); Serial.print(" i:"); Serial.print(floatToString(getI(),PRINT_PLACES_AFTER_DECIMAL)); Serial.print(" d:"); Serial.print(floatToString(getD(),PRINT_PLACES_AFTER_DECIMAL)); Serial.print(", Delta: "); Serial.print(floatToString(delta,PRINT_PLACES_AFTER_DECIMAL)); Serial.print(", Power: "); Serial.print(floatToString((float)getHeatCycles(), 0)); Serial.print(" \n"); } */ // END Serial Interface