/* * WLED usermod for keypad and brightness-pot. * 3'2020 https://github.com/hobbyquaker */ #include const byte keypad_rows = 4; const byte keypad_cols = 4; char keypad_keys[keypad_rows][keypad_cols] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte keypad_colPins[keypad_rows] = {D3, D2, D1, D0}; byte keypad_rowPins[keypad_cols] = {D7, D6, D5, D4}; Keypad myKeypad = Keypad(makeKeymap(keypad_keys), keypad_rowPins, keypad_colPins, keypad_rows, keypad_cols); void userSetup() { } void userConnected() { } long lastTime = 0; int delayMs = 20; //we want to do something every 2 seconds void userLoop() { if (millis()-lastTime > delayMs) { long analog = analogRead(0); int new_bri = 1; if (analog > 900) { new_bri = 255; } else if (analog > 30) { new_bri = dim8_video(map(analog, 31, 900, 16, 255)); } if (bri != new_bri) { bri = new_bri; colorUpdated(1); } char myKey = myKeypad.getKey(); if (myKey != NULL) { switch (myKey) { case '1': applyPreset(1); colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; case '2': applyPreset(2); colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; case '3': applyPreset(3); colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; case '4': applyPreset(4); colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; case '5': applyPreset(5); colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; case '6': applyPreset(6); colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; case 'A': applyPreset(7); colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; case 'B': applyPreset(8); colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; case '7': effectCurrent += 1; if (effectCurrent >= MODE_COUNT) effectCurrent = 0; colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; case '*': effectCurrent -= 1; if (effectCurrent < 0) effectCurrent = (MODE_COUNT-1); colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; case '8': if (effectSpeed < 240) { effectSpeed += 12; } else if (effectSpeed < 255) { effectSpeed += 1; } colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; case '0': if (effectSpeed > 15) { effectSpeed -= 12; } else if (effectSpeed > 0) { effectSpeed -= 1; } colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; case '9': if (effectIntensity < 240) { effectIntensity += 12; } else if (effectIntensity < 255) { effectIntensity += 1; } colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; case '#': if (effectIntensity > 15) { effectIntensity -= 12; } else if (effectIntensity > 0) { effectIntensity -= 1; } colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; case 'C': effectPalette += 1; if (effectPalette >= 50) effectPalette = 0; colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; case 'D': effectPalette -= 1; if (effectPalette <= 0) effectPalette = 50; colorUpdated(NOTIFIER_CALL_MODE_FX_CHANGED); break; break; } } lastTime = millis(); } }