/* Hausboot #2 Lights * Version 1 * ATTiny84 at 1 MHz * * Pin 5 : Signal * Pin 10 : Cabin lights : 2x negative PWM * Pin 9 : Deck lights : 2x positive PWM * Pin 6 : BBQ 1 : 3x positive PWM * Pin 7 : BBQ 2 : " * Pin 8 : Nautic lights : 1x positive PWM * Pin 4 : Anchor light : 1x negative PWM * * * !NOTE! Digital HIGH is LED off (?) */ int pwmSignal = 0; boolean pwmSignalLock = false; int pwmSignalPin = 5; int counterWait = 0; int waitForInputTrigger = 100; int triggerPositive = 0; int triggerNegative = 0; boolean bbqToogle = false; int BBQ1level = 255; int BBQ2level = 255; int BBQ1nextLevel = 0; int BBQ2nextLevel = 0; void setup() { pinMode(pwmSignalPin, INPUT); pinMode(10, OUTPUT); pinMode(9, OUTPUT); pinMode(8, OUTPUT); pinMode(7, OUTPUT); pinMode(6, OUTPUT); pinMode(4, OUTPUT); digitalWrite(10, HIGH); digitalWrite(9, HIGH); digitalWrite(8, HIGH); digitalWrite(7, HIGH); digitalWrite(6, HIGH); digitalWrite(4, HIGH); } // the loop function void loop() { pwmSignal = pulseIn(pwmSignalPin, HIGH); // Read the pulse of current input signal if (pwmSignal < 1200 && pwmSignalLock == false) { // negativ triggering pwm signal pwmSignalLock = true; triggerNegative++; triggerPositive = 0; } else if (pwmSignal > 1900 && pwmSignalLock == false) { // positive triggering pwm signal pwmSignalLock = true; triggerNegative = 0; triggerPositive++; } else if (pwmSignal >= 1200 && pwmSignal <= 1900) { // neutral pwm signal -> no active trigger if (pwmSignalLock == true) { // if signal was recognized pwmSignalLock = false; // reset pwmSignalLock to be able to recognize next trigger counterWait = 0; // restart wait counter } if (pwmSignalLock == false) counterWait++; // handle functions after period to wait for more triggers if (counterWait == waitForInputTrigger) { if (triggerPositive == 1) { // Nautic lights toogle if (digitalRead(8) == HIGH) { digitalWrite(8, LOW); } else { digitalWrite(8, HIGH); } } if (triggerNegative == 1) { // Anchor lights toogle if (digitalRead(4) == HIGH) { digitalWrite(4, LOW); } else { digitalWrite(4, HIGH); } } if (triggerPositive == 2) { // Deck lights toogle if (digitalRead(9) == HIGH) { digitalWrite(9, LOW); } else { digitalWrite(9, HIGH); } } if (triggerNegative == 2) { // Cabin lights toogle if (digitalRead(10) == HIGH) { digitalWrite(10, LOW); } else { digitalWrite(10, HIGH); } } if (triggerPositive == 3) { // BBQ toogle if (bbqToogle == false) { bbqToogle = true; } else { bbqToogle = false; } } if (triggerNegative == 3) { // no function } // reset trigger counts triggerNegative = 0; triggerPositive = 0; } // handle BBQ glowing if (bbqToogle == true) { // calculate fading for BBQ1 LED if (BBQ1level == BBQ1nextLevel) { BBQ1nextLevel = random(0, 200); } else if (BBQ1level > BBQ1nextLevel) { BBQ1level = BBQ1level - 1; } else if (BBQ1level < BBQ1nextLevel) { BBQ1level = BBQ1level + 1; } // calculate fading for BBQ2 LED if (BBQ2level == BBQ2nextLevel) { BBQ2nextLevel = random(0, 200); } else if (BBQ2level > BBQ2nextLevel) { BBQ2level = BBQ2level - 1; } else if (BBQ2level < BBQ2nextLevel) { BBQ2level = BBQ2level + 1; } analogWrite(6, BBQ1level); analogWrite(7, BBQ2level); } else if (bbqToogle == false) { BBQ1nextLevel = 255; BBQ2nextLevel = 255; if (BBQ1level < BBQ1nextLevel) BBQ1level = BBQ1level + 1; if (BBQ2level < BBQ2nextLevel) BBQ2level = BBQ2level + 1; analogWrite(6, BBQ1level); analogWrite(7, BBQ2level); } } }