int searchSpot() { //menelusuri garis hitam sampai menemukan "color" int hue; int colortemp; int threshold = 65; resetGyro(gyroSensor); moveMotorTarget(leftMotor,360,100); moveMotorTarget(rightMotor,360,100); while(getMotorMoving(leftMotor)||getMotorMoving(rightMotor)) sleep(1); while(1) { // sensor sees light: if(getColorReflected(colorSensor) < threshold) { // counter-steer right: motor[leftMotor] = 55; motor[rightMotor] = 15; } // sensor sees dark: else { // counter-steer left: motor[leftMotor] = 15; motor[rightMotor] = 55; } hue=getColorHue(colorSensor); if(hue==99 || hue==253) { colortemp=hue==99?green:red; break; } } return colortemp; }
void cekHue(){ int hue; motor[leftMotor] = 0; motor[rightMotor] = 0; while(1) { displayTextLine(1,"Hue : %d",hue); hue=getColorHue(colorSensor); } }
void Lamp::doLed() { analogWrite(lpin,getColorHue()+ _currentHue); }
void Lamp::drawMenu(unsigned long index) { //Serial.println("Draw"); unsigned char almhr; almhr= getAlarmHour(); unsigned char almmn; almmn = getAlarmMin(); bool almAM; almAM = getAlarmAM(); bool almOn; almOn = getAlarmOn(); byte dspMode = getDisplayMode(); byte lmpbr = getLampBrightness(); byte lcdbr = getLCDBrightness(); // byte lcdsl = getLCDSleepTime(); // byte audfs = getAudioFadeSpeed(); byte cych = getCycleHoldTime(); byte cycf = getCycleFadeTime(); byte cycs = getCycleSteps(); byte rndh = getRandomHoldTime(); byte rndf = getRandomFadeTime(); byte solh = getColorHue(); byte sols = getColorSat(); char strSec[5] = "sec."; char strON[3] = "ON"; char strOFF[4] = "OFF"; char strAM[5] = " AM"; char strPM[5] = " PM"; char strPad0[2] = "0"; char strBr[11] = "Brightness"; char strHT[11] = "Hold Time"; char strFT[11] = "Fade Time"; char strST[7] = "Steps"; char strTimeH[15] = "Hour Min AM/PM"; char strDateH[14] = "d. D. M. Y."; char strBL[10] = "Backlight"; char* weekdayStr[] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat","ERR"}; char* monthStr[] = {"","Jan", "Feb", "Mar","Apr","May","Jun", "Jul","Aug", "Sep","Oct","Nov","Dec","ERR"}; goTo(0); hideCursor(); clearLCD(); // selectLineOne(); switch (index) { case 0x000000: //Main menu // Serial1.println("03:28 PM Alm."); // Serial1.println("Mon Nov 10 2012 "); if (tHour12 < 10) Serial1.print(strPad0); Serial1.print(tHour12); Serial1.print(":"); if (tMinute < 10) Serial1.print(strPad0); Serial1.print(tMinute); if(tHour<12) Serial1.print(strAM); if(tHour>=12)Serial1.print(strPM); if(almOn) Serial1.print(" Alm."); if(!almOn) Serial1.print(""); selectLineTwo(); Serial1.print(weekdayStr[tDay]); Serial1.print(" "); Serial1.print(monthStr[tMonth]); Serial1.print(" "); Serial1.print(tDate); Serial1.print(" "); Serial1.print(tYear +2000); break; case 0x000001: //Clock Settings Serial1.print("Clock Settings"); // Serial1.println(""); break; case 0x000002: //Lamp Settings Serial1.print("Lamp Settings"); // selectLineTwo(); // Serial1.println(""); break; case 0x000011: //set Date/time top menu Serial1.print("Set Date/Time"); selectLineTwo(); if (tHour12 < 10) Serial1.print(strPad0); Serial1.print(tHour12); Serial1.print(":"); if(tMinute < 10) Serial1.print(strPad0); Serial1.print(tMinute); if(tHour<12) Serial1.print("AM "); if(tHour>=12) Serial1.print("PM "); Serial1.print(tDate); Serial1.print("/"); Serial1.print(tMonth); Serial1.print("/"); Serial1.print(tYear); break; case 0x000012: //Set Display mode top menu Serial1.print("Dispay Mode"); selectLineTwo(); if (dspMode==0) Serial1.print("Audio Viz."); if (dspMode==1) Serial1.print("Cycle"); if (dspMode==2) Serial1.print("Random"); if (dspMode==3) Serial1.print("Solid"); break; case 0x000021: //set Alarm top menu Serial1.print("Set Alarm"); selectLineTwo(); //Serial1.print("07:00AM OFF"); if (almhr < 10) Serial1.print(strPad0); Serial1.print(almhr); Serial1.print(":"); if(almmn < 10) Serial1.print(strPad0); Serial1.print(almmn); if(almAM) Serial1.print(strAM); if(!almAM)Serial1.print(strPM); if(almOn) { Serial1.print(" "); Serial1.print(strON); } if(!almOn) { Serial1.print(" "); Serial1.print(strOFF); } break; case 0x000022: //Set Brightness top menu Serial1.print(strBr); selectLineTwo(); Serial1.print(lmpbr,DEC); break; case 0x000032: //set LCD Backlight top menu Serial1.print(strBL); selectLineTwo(); Serial1.print(lcdbr,DEC); break; case 0x000111: //set clock time / current time Serial1.print(strTimeH); selectLineTwo(); if (tHour12 < 10) Serial1.print(strPad0); Serial1.print(tHour12); Serial1.print(" "); if(tMinute < 10) Serial1.print(strPad0); Serial1.print(tMinute); if(tHour<12) Serial1.print(strAM); if(tHour>=12) Serial1.print(strPM); break; case 0x000121: //set alarm time / current time Serial1.print(strTimeH); selectLineTwo(); if (almhr < 10) Serial1.print(strPad0); Serial1.print(almhr); Serial1.print(" "); if(almmn < 10) Serial1.print(strPad0); Serial1.print(almmn); if(almAM) Serial1.print(strAM); if(!almAM) Serial1.print(strPM); break; case 0x000122: //Set lamp Brigthness //should display cursor Serial1.print(strBr); selectLineTwo(); Serial1.print(lmpbr,DEC); showCursor(); goTo(18); break; case 0x000132: //set lcd backlight brightness //should display cursor Serial1.print(strBL); selectLineTwo(); Serial1.print(lcdbr,DEC); // showCursor(); goTo(17); break; case 0x000211: //set clock date menu Serial1.print(strDateH); selectLineTwo(); Serial1.print(weekdayStr[tDay]); Serial1.print(" "); Serial1.print(tDate); Serial1.print(" "); Serial1.print(monthStr[tMonth]); Serial1.print(" "); Serial1.print(tYear); break; case 0x000212: //Cycle display mode Serial1.print("Cycle"); break; case 0x000221: //set alarm on/off menu Serial1.print("Alarm"); selectLineTwo(); if (almOn) Serial1.print(strON); if (!almOn) Serial1.print(strOFF); break; case 0x000312: //random color display mode Serial1.print("Random"); // Serial1.print(""); break; case 0x000412: //solid color display mode Serial1.print("Solid"); // Serial1.print(""); break; case 0x001111: //set clock time / set hour //show cursor at hour Serial1.print(strTimeH); selectLineTwo(); if (tHour12 < 10) Serial1.print(strPad0); Serial1.print(tHour12); Serial1.print(" "); if(tMinute < 10) Serial1.print(strPad0); Serial1.print(tMinute); if(tHour<12) Serial1.print(strAM); if(tHour>=12) Serial1.print(strPM); showCursor(); goTo(17); break; case 0x001121: //set alarm time / hour //show cursor at hour Serial1.print(strTimeH); selectLineTwo(); if (almhr < 10) Serial1.print(strPad0); Serial1.print(almhr); Serial1.print(" "); if(almmn < 10) Serial1.print(strPad0); Serial1.print(almmn); if(almAM) Serial1.print(strAM); if(!almAM) Serial1.print(strPM); showCursor(); goTo(17); break; case 0x001211: //set clock date / day of week //show cursor at d o w Serial1.print(strDateH); selectLineTwo(); //Serial1.print("Mon 3_ Dec 12"); Serial1.print(weekdayStr[tDay]); Serial1.print(" "); Serial1.print(tDate); Serial1.print(" "); Serial1.print(monthStr[tMonth]); Serial1.print(" "); Serial1.print(tYear); showCursor(); goTo(18); break; case 0x001212: //set Cycle hold time //show cursor Serial1.print(strHT); selectLineTwo(); Serial1.print(cych,DEC); Serial1.print(strSec); showCursor(); goTo(17); break; case 0x001221: //set alarm on / off //show cursor Serial1.print("Alarm"); selectLineTwo(); if (almOn) Serial1.print(strON); if (!almOn) Serial1.print(strOFF); showCursor(); goTo(18); break; case 0x001312: //set random mode holde time //show cursor Serial1.print(strHT); selectLineTwo(); Serial1.print(rndh,DEC); Serial1.print(strSec); showCursor(); goTo(17); break; case 0x001412: //set solid mode Hue //show cursor Serial1.print("Hue"); selectLineTwo(); Serial1.print(solh,DEC); showCursor(); goTo(19); break; case 0x002111: //set clock time / min //show curso at min Serial1.print(strTimeH); selectLineTwo(); if (tHour12 < 10) Serial1.print(strPad0); Serial1.print(tHour12); Serial1.print(" "); if(tMinute < 10) Serial1.print(strPad0); Serial1.print(tMinute); if(tHour<12) Serial1.print(strAM); if(tHour>=12) Serial1.print(strPM); showCursor(); goTo(22); break; case 0x002121: //set alarm time / min //show cursor at min Serial1.print(strTimeH); selectLineTwo(); if (almhr < 10) Serial1.print(strPad0); Serial1.print(almhr); Serial1.print(" "); if(almmn < 10) Serial1.print(strPad0); Serial1.print(almmn); if(almAM) Serial1.print(strAM); if(!almAM)Serial1.print(strPM); showCursor(); goTo(22); break; case 0x002211: //set clock date / day //show cursor at day Serial1.print(strDateH); //Serial1.print("Mon 3_ Dec 12"); selectLineTwo(); Serial1.print(weekdayStr[tDay]); Serial1.print(" "); Serial1.print(tDate); Serial1.print(" "); Serial1.print(monthStr[tMonth]); Serial1.print(" "); Serial1.print(tYear); showCursor(); goTo(21); break; case 0x002212: //set cycle mode fade time //show cursor Serial1.print(strFT); selectLineTwo(); Serial1.print(cycf,DEC); Serial1.print(strSec); showCursor(); goTo(17); break; case 0x003212: //set cycle mode steps //show cursor Serial1.print(strST); selectLineTwo(); Serial1.print(cycs,DEC); showCursor(); goTo(18); break; case 0x002312: //set randome mode fade time //show cursor Serial1.print(strFT); selectLineTwo(); Serial1.print(rndf,DEC); Serial1.print(strSec); showCursor(); goTo(17); break; case 0x002412: //set solid mode color sat //show cursor Serial1.print("Saturation"); selectLineTwo(); Serial1.print(sols,DEC); showCursor(); goTo(18); break; case 0x003111: //set clock time am/pm //show cursor Serial1.print(strTimeH); selectLineTwo(); if (tHour12 < 10) Serial1.print(strPad0); Serial1.print(tHour12); Serial1.print(" "); if(tMinute < 10) Serial1.print(strPad0); Serial1.print(tMinute); if(tHour<12) Serial1.print(strAM); if(tHour>=12) Serial1.print(strPM); showCursor(); goTo(26); break; case 0x003121: //set alarm am/pm //show cursor at AM Serial1.print(strTimeH); selectLineTwo(); if (almhr < 10) Serial1.print(strPad0); Serial1.print(almhr); Serial1.print(" "); if(almmn < 10) Serial1.print(strPad0); Serial1.print(almmn); if(almAM) Serial1.print(strAM); if(!almAM)Serial1.print(strPM); showCursor(); goTo(26); break; case 0x003211: //set clock date / month //show cursor at month Serial1.print(strDateH); selectLineTwo(); Serial1.print(weekdayStr[tDay]); Serial1.print(" "); Serial1.print(tDate); Serial1.print(" "); Serial1.print(monthStr[tMonth]); Serial1.print(" "); Serial1.print(tYear); showCursor(); goTo(25); break; case 0x004211: //set clock date / year //show cursor at year Serial1.print(strDateH); selectLineTwo(); Serial1.print(weekdayStr[tDay]); Serial1.print(" "); Serial1.print(tDate); Serial1.print(" "); Serial1.print(monthStr[tMonth]); Serial1.print(" "); Serial1.print(tYear); showCursor(); goTo(28); break; default: break; } // backLightBr(getLCDBrightness()); }
void Lamp::updateMenuIndex(unsigned char dir) { switch (dir) { case 't': //top this->_menuIndex=0x0; this->_menuDepth=0x0; break; case 'c': //set time if(menuPosition()==0x0) break; if (menuPosition()==0x1111 || menuPosition()==0x2111 || menuPosition()==0x3111 || menuPosition()==0x1211 || menuPosition()==0x2211 || menuPosition()==0x3211 || menuPosition()==0x4211) { if (menuPosition() == 0x3111) this->_menuIndex = 0x1111; else if (menuPosition() == 0x4211) this->_menuIndex = 0x1211; else this->_menuIndex = this->_menuIndex + (1 << menuDepth()); break; } //set alarm if (menuPosition()==0x1121 || menuPosition()==0x2121 || menuPosition()==0x3121 || menuPosition()==0x1221) { if (menuPosition() == 0x3121) this->_menuIndex = 0x1121; else if (menuPosition() == 0x1221) this->_menuIndex = 0x1221; else this->_menuIndex = this->_menuIndex + (1 << menuDepth()); break; } //brightness / LCD backlight / lcd sleep time if (menuPosition() == 0x122 || menuPosition() == 0x132 || menuPosition() == 0x142) { break; } //AudioViz if (menuPosition()==0x1112) break; if (menuPosition()==0x12) { this->_menuDepth +=4; //ignore 0x112 replace with 0x212; if (getDisplayMode()==0) this->_menuIndex = 0x212; if (getDisplayMode()==1) this->_menuIndex = 0x212; if (getDisplayMode()==2) this->_menuIndex = 0x312; if (getDisplayMode()==3) this->_menuIndex = 0x412; break; } //Cycle if (menuPosition()==0x1212 || menuPosition()==0x2212 || menuPosition()==0x3212) { if (menuPosition() == 0x1212) this->_menuIndex = 0x2212; else if (menuPosition() == 0x2212) this->_menuIndex = 0x3212; else if (menuPosition() == 0x3212) this->_menuIndex = 0x1212; break; } //Random if (menuPosition()==0x1312 || menuPosition()==0x2312) { if (menuPosition() == 0x1312) this->_menuIndex = 0x2312; else if (menuPosition() == 0x2312) this->_menuIndex = 0x1312; break; } //Solid if (menuPosition()==0x1412 || menuPosition()==0x2412) { if (menuPosition() == 0x1412) this->_menuIndex = 0x2412; else if (menuPosition() == 0x2412) this->_menuIndex = 0x1412; break; } this->_menuDepth +=4; this-> _menuIndex = this->_menuIndex + (1 << menuDepth()); //ignore set weekday // if (menuPosition() == 0x1211) this->_menuIndex = 0x2211; break; case 'h': if (_alarming == true) _alarming = false; if (menuDepth() == 0x0) { this->_menuIndex=0x0; break; } this->_menuIndex =this->_menuIndex - (this->_menuCurrent << menuDepth()); this->_menuDepth -=4; break; //Going Left case 'l': //Clock if (menuPosition()==0x1111 || menuPosition()==0x2111 || menuPosition()==0x3111 || menuPosition()==0x1211 || menuPosition()==0x2211 || menuPosition()==0x3211 || menuPosition()==0x4211) { if (menuPosition()==0x01111 && tHour >0 ) tHour-- ; else if (menuPosition()==0x01111 && tHour ==0 ) tHour = 23; //hour if (menuPosition()==0x02111 && tMinute >0 ) tMinute-- ; else if (menuPosition()==0x02111 && tMinute ==0 ) tMinute = 59; //min if (menuPosition()==0x03111 && tHour >=12) tHour-=12; //am if (menuPosition()==0x01211 && tDay>0 ) tDay-- ; else if (menuPosition()==0x01211 && tDay ==0 ) tDay==6; //day if (menuPosition()==0x02211 && tDate >1 ) tDate-- ; else if (menuPosition()==0x02211 && tDate ==1 ) tDate==31; //day if (menuPosition()==0x03211 && tMonth >1 ) tMonth-- ; else if (menuPosition()==0x03211 && tMonth ==1 ) tMonth=12; //month if (menuPosition()==0x04211 && tYear >0 ) tYear-- ; else if (menuPosition()==0x04211 && tYear ==0 ) tYear=99; //year setDateTime(); break; } //Alarm if (menuPosition()==0x1121 || menuPosition()==0x2121 || menuPosition()==0x3121 || menuPosition()==0x1221) { if (menuPosition()==0x1121 && getAlarmHour() >1 ) setAlarmHour(getAlarmHour() - 1 ); else if (menuPosition()==0x1121 && getAlarmHour()==1) setAlarmHour(12); if (menuPosition()==0x2121 && getAlarmMin() >0 ) setAlarmMin(getAlarmMin() - 1 ); else if (menuPosition()==0x2121 && getAlarmMin()==0) setAlarmMin(59); if (menuPosition()==0x3121) setAlarmAM(true); if (menuPosition()==0x1221) setAlarmOn(false); break; } //brightness / LCD backlight / lcd sleep time if (menuPosition() == 0x122 || menuPosition() == 0x132 || menuPosition() == 0x142) { if (menuPosition()==0x122 && getLampBrightness()>1) setLampBrightness(getLampBrightness() - 1); if (menuPosition()==0x132 && getLCDBrightness()>1) setLCDBrightness(getLCDBrightness() - 1); // if (menuPosition()==0x142 && getLCDSleepTime()>10) setLCDSleepTime(getLCDSleepTime() - 1); delay(5); break; } //AudioViz Fade Speed // if (menuPosition()==0x1112) // { // if (getAudioFadeSpeed() >1 ) setAudioFadeSpeed(getAudioFadeSpeed()-1); // break; // } //Cycle if (menuPosition()==0x1212 || menuPosition()==0x2212 || menuPosition()==0x3212) { if (menuPosition()==0x1212 && getCycleHoldTime() >1 ) setCycleHoldTime(getCycleHoldTime() - 1 ); if (menuPosition()==0x2212 && getCycleFadeTime() >1 ) setCycleFadeTime(getCycleFadeTime() - 1 ); if (menuPosition()==0x3212 && getCycleSteps() >1 ) setCycleSteps(getCycleSteps() - 1 ); break; } //Random if (menuPosition()==0x1312 || menuPosition()==0x2312) { if (menuPosition()==0x1312 && getRandomHoldTime() >1 ) setRandomHoldTime(getRandomHoldTime() - 1 ); if (menuPosition()==0x2312 && getRandomFadeTime() >1 ) setRandomFadeTime(getRandomFadeTime() - 1 ); break; } //Solid if (menuPosition()==0x1412 || menuPosition()==0x2412) { if (menuPosition()==0x1412 && getColorHue() >0 ) setColorHue(getColorHue() - 1 ); if (menuPosition()==0x2412 && getColorSat() >0 ) setColorSat(getColorSat() - 1 ); break; } //limits moving left if (menuPosition() == 0x0) this->_menuIndex = 0x2; else if (menuPosition() == 0x11) this->_menuIndex = 0x21; else if (menuPosition() == 0x111) this->_menuIndex = 0x211; else if (menuPosition() == 0x121) this->_menuIndex = 0x221; else if (menuPosition() == 0x12) this->_menuIndex = 0x32; else if (menuPosition() == 0x212) this->_menuIndex = 0x412; else this->_menuIndex = this->_menuIndex - (1 << menuDepth()); //Display Mode if (menuPosition() == 0x112) setDisplayMode(0x0); if (menuPosition() == 0x212) setDisplayMode(0x1); if (menuPosition() == 0x312) setDisplayMode(0x2); if (menuPosition() == 0x412) setDisplayMode(0x3); break; //Going right case 'r': //Clock if (menuPosition()==0x1111 || menuPosition()==0x2111 || menuPosition()==0x3111 || menuPosition()==0x1211 || menuPosition()==0x2211 || menuPosition()==0x3211 || menuPosition()==0x4211) { if (menuPosition()==0x01111 && tHour <23 ) tHour++ ; else if (menuPosition()==0x01111 && tHour ==23 ) tHour = 0; //hour if (menuPosition()==0x02111 && tMinute <59 ) tMinute++ ; else if (menuPosition()==0x02111 && tMinute ==59 ) tMinute = 0; //min if (menuPosition()==0x03111 && tHour <=12) tHour+=12; //am if (menuPosition()==0x01211 && tDay<6 ) tDay++ ; else if (menuPosition()==0x01211 && tDay ==6 ) tDay==0; //day if (menuPosition()==0x02211 && tDate <31 ) tDate++ ; else if (menuPosition()==0x02211 && tDate ==31 ) tDate==1; //day if (menuPosition()==0x03211 && tMonth <12 ) tMonth++ ; else if (menuPosition()==0x03211 && tMonth ==12 ) tMonth=1; //month if (menuPosition()==0x04211 && tYear <99 ) tYear++ ; else if (menuPosition()==0x04211 && tYear ==99 ) tYear=0; //year setDateTime(); break; } //Alarm if (menuPosition()==0x1121 || menuPosition()==0x2121 || menuPosition()==0x3121 || menuPosition()==0x1221) { if (menuPosition()==0x1121 && getAlarmHour() < 12 ) setAlarmHour(getAlarmHour() + 1 ); else if (menuPosition()==0x1121 && getAlarmHour()==12) setAlarmHour(1); if (menuPosition()==0x2121 && getAlarmMin() < 59 ) setAlarmMin(getAlarmMin() + 1 ); else if (menuPosition()==0x2121 && getAlarmMin()==59) setAlarmMin(0); if (menuPosition()==0x3121) setAlarmAM(false); if (menuPosition()==0x1221) setAlarmOn(true); break; } //brightness / LCD backlight / lcd sleep time if (menuPosition() == 0x122 || menuPosition() == 0x132 || menuPosition() == 0x142) { if (menuPosition()==0x122 && getLampBrightness()<255) setLampBrightness(getLampBrightness() + 1); if (menuPosition()==0x132 && getLCDBrightness()<26) setLCDBrightness(getLCDBrightness() + 1); // if (menuPosition()==0x142 && getLCDSleepTime()<31) setLCDSleepTime(getLCDSleepTime() + 1); delay(5); break; } //AudioViz Fade Speed // if (menuPosition()==0x1112) // { // if (getAudioFadeSpeed() < 255 ) setAudioFadeSpeed(getAudioFadeSpeed()+1); // break; // } //Cycle if (menuPosition()==0x1212 || menuPosition()==0x2212 || menuPosition()==0x3212) { if (menuPosition()==0x1212 && getCycleHoldTime() <30 ) setCycleHoldTime(getCycleHoldTime() + 1 ); if (menuPosition()==0x2212 && getCycleFadeTime() <30 ) setCycleFadeTime(getCycleFadeTime() + 1 ); if (menuPosition()==0x3212 && getCycleSteps() <128 ) setCycleSteps(getCycleSteps() + 1 ); break; } //Random if (menuPosition()==0x1312 || menuPosition()==0x2312) { if (menuPosition()==0x1312 && getRandomHoldTime() <30 ) setRandomHoldTime(getRandomHoldTime() + 1 ); if (menuPosition()==0x2312 && getRandomFadeTime() <30) setRandomFadeTime(getRandomFadeTime() + 1 ); break; } //Solid if (menuPosition()==0x1412 || menuPosition()==0x2412) { if (menuPosition()==0x1412 && getColorHue() <255 ) setColorHue(getColorHue() + 1 ); if (menuPosition()==0x2412 && getColorSat() <255 ) setColorSat(getColorSat() + 1 ); break; } //limits moving right if (menuPosition() == 0x2) this->_menuIndex = 0x0; else if (menuPosition() == 0x21) this->_menuIndex = 0x11; else if (menuPosition() == 0x211) this->_menuIndex = 0x111; else if (menuPosition() == 0x221) this->_menuIndex = 0x121; else if (menuPosition() == 0x32) this->_menuIndex = 0x12; else if (menuPosition() == 0x412) this->_menuIndex = 0x212; else this->_menuIndex = this->_menuIndex + (1 << menuDepth()); //Display Mode if (menuPosition() == 0x112) setDisplayMode(0x0); if (menuPosition() == 0x212) setDisplayMode(0x1); if (menuPosition() == 0x312) setDisplayMode(0x2); if (menuPosition() == 0x412) setDisplayMode(0x3); default: break; } this->_menuCurrent = menuPosition() >> menuDepth(); drawMenu(menuPosition()); }
void Lamp::drawCycle() { long hTime; long fTime; switch (getDisplayMode()) { case lCYCLE: hTime = getCycleHoldTime(); fTime = getCycleFadeTime(); break; case lRANDOM: hTime = getRandomHoldTime(); fTime = getRandomFadeTime(); break; default: break; } long totalCycleLen = (hTime + fTime)*1000; totalCycleLen &=0x0000FFFF; long _step = millis() % totalCycleLen; //end of cycle; if (_step >= hTime*1000 && _step <=(hTime*1000)+10 && _stepped==false) { _stepped = true; switch (getDisplayMode()) { case lCYCLE: _targetHue += getCycleSteps(); break; case lRANDOM: _targetHue += random(-getCycleSteps()*2,getCycleSteps()*2); break; default: break; } // Serial.println(_targetHue); _fadeDirection =0; _fadeSteps = 0; unsigned char _tmp = 0; unsigned char _a = _currentHue; while (_a != _targetHue) { _a++; _tmp++; } _fadeSteps = _tmp; _fadeDirection = 1; _tmp = 0; _a = _currentHue; while (_a != _targetHue) { _a--; _tmp++; } if (_tmp < _fadeSteps) { _fadeSteps = _tmp; _fadeDirection = -1; } } //fade else if (_step >= (hTime*1000)+15) { _stepped=false; if (_currentHue != _targetHue) { long incStep =(fTime*1000)/_fadeSteps ; if (_step % incStep < _prevSubStep) _currentHue+= _fadeDirection; _prevSubStep = _step % incStep; } } _ledColors[0] = hsbToRGB(getColorHue() +_currentHue,getColorSat(),ambBrightness); _ledColors[1] = hsbToRGB(byte(getColorHue() +_currentHue - (getCycleSteps()*(PI/1.5f) )),byte(getColorSat()/1.2f),ambBrightness); _prevStep = _step; }
void Lamp::drawSolid() { _ledColors[0] = hsbToRGB(getColorHue() ,getColorSat(),ambBrightness); _ledColors[1] = hsbToRGB(getColorHue() ,byte(getColorSat()/1.2f),ambBrightness); }