added Attiny84 extra functionality

This commit is contained in:
kflux 2020-04-24 14:21:05 +02:00
parent 8a02cbee7f
commit 691d94e9f6

View file

@ -25,14 +25,31 @@ SOFTWARE.
*/ */
#define btnA 9 //PB0 / Button A: #define Attiny 261 //84 or 261
#define btnB 8 //PB1 / Button B:
#define btnC 13 //PA7 / Button C: #if Attiny == 261
#define led_R 12 //PA6 / RED LED #define btnA 9 //PB0 / Button A:
#define led_G 14 //PA3 / GREEN LED #define btnB 8 //PB1 / Button B:
#define led_B 1 //PA1 / BLUE LED #define btnC 13 //PA7 / Button C:
#define uv_LED 6 //PB3 / UV LED #define led_R 12 //PA6 / RED LED
#define OPAMP 3 //PB6 / turns on the Op Amp circuit #define led_G 14 //PA3 / GREEN LED
#define led_B 1 //PA1 / BLUE LED
#define uv_LED 6 //PB3 / UV LED
#define OPAMP 3 //PB6 / turns on the Op Amp circuit
#endif
#if Attiny == 84
#define btnA 6 //PA4 / Button A:
#define btnB 5 //PA5 / Button B:
#define btnC 4 //PA6/ Button C:
#define led_R 10 //PA0 / RED LED
#define led_G 9 //PA1/ GREEN LED
#define led_B 8 //PA2 / BLUE LED
#define uv_LED 7 //PA3 / UV LED
#define OPAMP 3 //PA7 / turns on the Op Amp circuit
#define ANALOG 2 //PB2 // Get analog
#endif
#define ON HIGH #define ON HIGH
#define OFF LOW #define OFF LOW
@ -50,6 +67,7 @@ static bool last_btnC = false; //Previous state of button C
bool enabled_LED = false; //turn on a tricolor LED bool enabled_LED = false; //turn on a tricolor LED
bool was_on_LED = false; //was LED on? bool was_on_LED = false; //was LED on?
bool usePWM = false; //use softPWM for more nuanced colors bool usePWM = false; //use softPWM for more nuanced colors
bool dimmer = false; //LED brightness follows analog input signal
void offLeds() { void offLeds() {
analogWrite(led_R, 255); analogWrite(led_R, 255);
analogWrite(led_B, 255); analogWrite(led_B, 255);
@ -59,6 +77,9 @@ void offLeds() {
//---- TIMER ---- //---- TIMER ----
bool countDelay = false; //are we counting ticks to time out the UV LEDs? bool countDelay = false; //are we counting ticks to time out the UV LEDs?
static uint32_t delayCount = 0; static uint32_t delayCount = 0;
#if Attiny == 84
uint32_t oldTime = millis();
#endif
long lastDebounceTime = 0; // the last time the output pin was toggled long lastDebounceTime = 0; // the last time the output pin was toggled
long debounceDelay = 50; // the debounce time; increase if the output flickers long debounceDelay = 50; // the debounce time; increase if the output flickers
@ -80,11 +101,21 @@ void setColor(COLOR paint, bool full = true) {
showColor(); showColor();
} }
void showColor() { void showColor() { // 100% of color
if (enabled_LED == true) { if (enabled_LED == true) {
#if Attiny == 84
byte full = 100;
if( dimmer == true ){
full = (255 / analogRead(ANALOG)) * full;
}
softPWM(led_R, selectedColor.r - ((selectedColor.r / full) * full), 1);
softPWM(led_B, selectedColor.b - ((selectedColor.b / full) * full) , 1);
softPWM(led_G, selectedColor.g - ((selectedColor.g / full) * full) , 1);
#else
softPWM(led_R, selectedColor.r, 1); softPWM(led_R, selectedColor.r, 1);
softPWM(led_B, selectedColor.b, 1); softPWM(led_B, selectedColor.b, 1);
softPWM(led_G, selectedColor.g, 1); softPWM(led_G, selectedColor.g, 1);
#endif
} else { } else {
offLeds(); offLeds();
} }
@ -168,12 +199,17 @@ void loop() {
showColor(); showColor();
//Counts up and turns UV LED off after 1min //Counts up and turns UV LED off after 1min
#if Attiny == 261
if (countDelay == true) { if (countDelay == true) {
delayCount++; delayCount++;
counterB = 1; counterB = 1;
} }
else delayCount = 0; else delayCount = 0;
if (delayCount > 1200000) { if (delayCount > 1200000) {
#endif
#if Attiny == 84
if ( countDelay == true && ((millis()-oldTime) > 60000)) {
#endif
//Turn the UV LED off //Turn the UV LED off
digitalWrite(uv_LED, LOW); digitalWrite(uv_LED, LOW);
countDelay = false; countDelay = false;
@ -249,6 +285,11 @@ void pressButton_B() {
digitalWrite(OPAMP, OFF); digitalWrite(OPAMP, OFF);
enabled_btnB == true; enabled_btnB == true;
digitalWrite(uv_LED, ON); digitalWrite(uv_LED, ON);
#if Attiny == 84
if ( countDelay == false ) {
oldTime = millis();
}
#endif
countDelay = true; // turn on delay counter in loop() countDelay = true; // turn on delay counter in loop()
} }
if (counterB == 2) { //2nd press: if (counterB == 2) { //2nd press: