From b9ca29a81d949602658cbbca631af6e46d159df1 Mon Sep 17 00:00:00 2001 From: Simon Couball Date: Mon, 17 Aug 2020 00:29:13 +0200 Subject: [PATCH] added button & different led configurations --- src/main.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index fb087c1..e53a42c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,10 +2,11 @@ static uint8_t led_duration = 8; + /* * Function: configureTimer * ---------------------------- - * Configures both 16bit timer for 25 kHz pwm signals. + * */ void configureTimer() { @@ -30,7 +31,7 @@ void configureTimer() // non-inverted PWM on ch. A, B and C, mode 10: ph. correct PWM, TOP = ICR1 // TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(COM1C1) | _BV(WGM11); - ICR1 = 640; // TOP = 320, @16Mhz CPU -> 25kHz PWM + ICR1 = 320; // TOP = 320, @16Mhz CPU -> 25kHz PWM OCR1A = 500; // Set duty-cycle TCCR1B = _BV(WGM13) | _BV(CS10); // prescaler = 1 // Configure Timer 3 @@ -56,6 +57,35 @@ void configureTimer() // TCCR1A |= _BV(WGM11); //WGM13:WGM10 set 1010 } +uint8_t value_switcher = 0; + +float led_a_multiplier = 3; +float led_b_multiplier = led_a_multiplier + led_a_multiplier * 0.02; +float led_c_multiplier = led_a_multiplier - led_a_multiplier * 0.02; + +void changeValue (uint8_t value) { + switch (value) + { + case 0: + led_a_multiplier = 3; + led_b_multiplier = 6; + led_c_multiplier = 9; + break; + + case 1: + led_a_multiplier = 6; + led_b_multiplier = 3; + led_c_multiplier = 6; + break; + + case 2: + led_a_multiplier = 9; + led_b_multiplier = 9; + led_c_multiplier = 3; + value_switcher = 0; + break; + } +} /* * Function: setup @@ -74,6 +104,7 @@ void setup() pinMode(4, OUTPUT); pinMode(9, OUTPUT); pinMode(7, INPUT); + pinMode(12, INPUT); // configure timer Serial.println("configure timer for 25kHz PWM..."); @@ -98,10 +129,21 @@ static uint16_t led_b_counter = led_b_period; static uint16_t led_c_period = (uint16_t)-1; static uint16_t led_c_counter = led_c_period; + +uint8_t button_last_state = HIGH; + ISR(TIMER0_COMPA_vect){ iterator++; uint8_t tacho_current = digitalRead(7); + uint8_t button_current = digitalRead(12); + + if(button_last_state == HIGH && button_current == LOW){ + changeValue(value_switcher++); + } + + button_last_state = button_current; + /* Get number of loop iterations per fan revolution */ if (!tacho_last && tacho_current) { @@ -110,9 +152,9 @@ ISR(TIMER0_COMPA_vect){ } else { tacho_counter = 0; period = iterator; - led_a_period = period / 3; - led_b_period = period * 20 / 61; - led_c_period = period * 20 / 59; + led_a_period = period / led_a_multiplier; + led_b_period = period / led_b_multiplier; + led_c_period = period / led_c_multiplier; iterator = 0; rotations++; } @@ -155,4 +197,5 @@ ISR(TIMER0_COMPA_vect){ void loop() { + } \ No newline at end of file