// Dance button code local unitState = 0; local counter1 = 1; local counter2 = 1; local bounceTimer; local impOutServer = OutputPort("Imp out to Imp Server", "number"); // set impeeOutput as a string function initLEDs() { hardware.pin1.configure(PWM_OUT, 1.0/500.0, 1.0); hardware.pin2.configure(PWM_OUT, 1.0/500.0, 1.0); hardware.pin5.configure(PWM_OUT, 1.0/500.0, 1.0); hardware.pin1.write(0); hardware.pin2.write(0); hardware.pin5.write(0); } function initButton() { hardware.pin8.configure(DIGITAL_IN_PULLUP, pin8change); bounceTimer = clock(); } function pin8change() { // server.log("pin8 change"); local buttonState = hardware.pin8.read(); if (buttonState==0) { server.show("Button pressed!");} else { server.show("Button released!");} // server.log(clock()); // server.log(bounceTimer); // server.log(buttonState); if ( clock() - bounceTimer > 0.5 ) { // if buttonState = 0, button is pushed if (buttonState == 0) { // if dance mode is not engaged... if (unitState == 0) { server.log("Dance mode engaged"); unitState = 1; impOutServer.set(1); // Turn off dance mode after 5 minutes imp.wakeup(5*60, selfTimer); } // if dance mode is already engaged... else if (unitState == 1) { server.log("Dance mode dis-engaged"); unitState = 0; } bounceTimer = clock(); } } } // called to automatically turn off dance mode some time after pushed function selfTimer() { server.log("self timer"); unitState = 0; } function setRGB(r, g, b) { hardware.pin1.write(b); hardware.pin2.write(g); hardware.pin5.write(r); } // Originally animate local function danceModeOn() { local brightness = (45.0 - counter2) / 45.0; switch (counter1) { case 1: setRGB(brightness,0,0); break; case 2: setRGB(0,brightness,0); break; case 3: setRGB(0,0,brightness); break; case 4: setRGB(0,0,0); break; } // Increment counter for fading if (counter2 < 45) { counter2++; } else { counter2 = 0; if ( counter1 < 4 ) { counter1++; } else { counter1 = 1; } } } function danceModeOff() { setRGB(0,0,0); } function animateButton() { imp.wakeup(0.01, animateButton.bindenv(this)); // determine which animation based on unit states if (unitState==1) { danceModeOn(); } else { danceModeOff(); } } imp.configure("DanceButton", [], [impOutServer]); initLEDs(); initButton(); animateButton();