#include "MinWiiChuck.h" //#define ANIMATE_INTERVAL 250 #define BUFFER_SIZE 16 #define SCREEN_WIDTH 16 #define ANGLE_RANGE 12 #define MIN_ACCEL 290 #define MAX_ACCEL 690 //#define BLINK_SPEED 250 char lineOneBuff[SCREEN_WIDTH]; char lineTwoBuff[SCREEN_WIDTH]; //boolean animating = false; char buffer[17]; int shotTime; int varAddress = 0; boolean programMode = false; //int scrollDir = 1; //unsigned long cTime, lastMoveTime; WiiChuck chuck = WiiChuck(); //int range = BUFFER_SIZE - SCREEN_WIDTH; char varnames[][6] = {" Brew", "Steam", "Pgain", "Igain", "Dgain", "Sleep", " Wake"}; float deltas[] = { 1.0, 1.0, 1.0, 0.0001, 10.0, 1.0, 0.25}; byte places[] = { 1,1,1, 4, 1, 0, 2}; float currentVarValue; boolean set = true; byte joyDelay = 30; byte joyWait = 0; //unsigned long lastBlink; //boolean blink; boolean waitOneLoop = true; void setupInterface() { chuck.begin(); //underlineCursorOn(true); chuck.update(); //chuck.calibrateJoy(); currentVarValue= readFloat(varAddress); } void updateInterface() { int y; float by; // cTime = millis(); chuck.update(); if (!isSleeping()) { // if (! programMode) { selectDisplayLineOne(); lcdPrint(floatToString(buffer,getLastTemp(),1, 5, true, true)); lcdPrint(" "); shotTime = getShotTime(); if (shotTime < 10) lcdPrint(" "); lcdPrint(shotTime); if (analogRead(WATER_LEVEL_PIN) > 512) lcdPrint(" H20 "); else //lcdPrint(chuck.readAngle(0)); lcdPrint(" "); //lcdPrint((int)getSleepTime()); // lcdPrint((int)chuck.buttonC); // lcdPrint(" "); // lcdPrint((int)chuck.buttonZ); /* } else { selectDisplayLineOne(); lcdPrint(chuck.readJoyX()); lcdPrint(", "); lcdPrint(chuck.readJoyY()); lcdPrint(" "); } */ if (chuck.zPressed() and !chuck.buttonC) { if (! programMode) { espresso(-1); } else { writeFloat(currentVarValue, varAddress); set = true; } } if (chuck.cPressed()) { programMode = ! programMode; if (chuck.buttonZ and programMode) { writeFloat(0.0, varAddress); currentVarValue = 0.0; set = true; } } if (chuck.rightJoy()) { varAddress += 4; if (varAddress > MAX_ADDRESS) varAddress = MIN_ADDRESS; currentVarValue = readFloat(varAddress); set = true; } if (chuck.leftJoy()) { varAddress -= 4; if (varAddress < MIN_ADDRESS) varAddress = MAX_ADDRESS; currentVarValue = readFloat(varAddress); set = true; } y = chuck.readJoyY(); if (abs(y) > 50) { if (joyWait > joyDelay) { by = y / abs(y) * deltas[varAddress/4]; //by = y / abs(y) * 0.0001; //if (abs(y) > 50) // by = y / abs(y) * 0.01; // if (abs(y) > 70) // by = y / abs(y) * 0.1; //if (abs(y) > 75) // by = y / abs(y); currentVarValue += by; joyWait = 0; joyDelay *= 0.7 ; set = false; } else { joyWait += 1; } } else { joyDelay = 15; joyWait = joyDelay + 1; waitOneLoop = true; } selectDisplayLineTwo(); //lineTwoBuff[currentPosition+SCREEN_WIDTH] = '\0'; if (! programMode) { readTimeString(lineTwoBuff, true); lcdPrint(lineTwoBuff); } else { //if (cTime - lastBlink > BLINK_SPEED or cTime < lastBlink) { // blink = !blink; // lastBlink = cTime; //} lcdPrint(varnames[varAddress/4]); if (set) lcdPrint("="); else lcdPrint(":"); lcdPrint(floatToString(buffer, currentVarValue, places[varAddress/4], 10, true, true)); } } else { // IS SLEEPING char buff[6]; selectDisplayLineOne(); lcdPrint("wake up: "); lcdPrint(getWakeString(buff)); readTimeString(lineTwoBuff, false); selectDisplayLineTwo(); lcdPrint(lineTwoBuff); } } /* #include prog_char pgainVarName[] PROGMEM = "P Gain"; prog_char igainVarName[] PROGMEM = "I Gain "; prog_char dgainVarName[] PROGMEM = "D Gain"; prog_char brewtempVarName[] PROGMEM = "Brew Temp"; prog_char steamtempVarName[] PROGMEM = "Steam Temp"; prog_char sleepAfterVarName[] PROGMEM = "Sleep After"; prog_char wakeupTimeVarName[] PROGMEM = "Wakeup Time"; //prog_char tempcalibVarName[] PROGMEM = "Temp Calib."; // Then set up a table to refer to your strings. PGM_P PROGMEM variableNames[] = // change "string_table" name to suit { pgainVarName, igainVarName, dgainVarName, brewtempVarName, steamtempVarName // tempcalib }; char currentVariableName[30]; // make sure this is large enough for the largest string it must hold void loadVariableNameToBuffer(int i) { //Using the string table in program memory requires the use of special functions to retrieve the data. // The strcpy_P function copies a string from program space to a string in RAM ("buffer"). // Make sure your receiving string in RAM is large enough to hold whatever // you are retrieving from program space. strcpy_P(currentVariableName, (char*)pgm_read_word(&(variableNames[i]))); // Necessary casts and dereferencing, just copy. } */ /*if (animating) { if (((cTime - lastMoveTime) > ANIMATE_INTERVAL) or (cTime < lastMoveTime)) { lastMoveTime += ANIMATE_INTERVAL; currentPosition += scrollDir; if (currentPosition >= 16) scrollDir = -1; if (currentPosition <= 0) scrollDir = 1; } }*/