diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 28 |
1 files changed, 12 insertions, 16 deletions
@@ -56,15 +56,9 @@ void shieldConfig() { GPIOB->PUPDR &= ~(0b11 << (PINOUT_BTN * 2)); GPIOB->PUPDR |= (0b01 << (PINOUT_BTN * 2)); - ADC1->SMPR &= ~(0x7); - // ADC1->SMPR |= (0x7); - // calirate ADC1 ADC1->CR |= ADC_CR_ADCAL; - while ((ADC1->CR & ADC_CR_ADCAL)); - - // enable ADC V_REFINT - ADC->CCR |= ADC_CCR_VREFEN; + while (ADC1->CR & ADC_CR_ADCAL); // enable ADC1 ADC1->CR |= ADC_CR_ADEN; @@ -101,10 +95,6 @@ unsigned int potRead() { return result; } -void delay(int amount) { - for (int i = 0; i < 500 * amount; i++) asm("nop"); -} - int mod(int a, int b) { int m = a % b; return m < 0 ? (b < 0) ? m - b : m + b : m; @@ -121,6 +111,7 @@ int main() { uint8_t reverse = 0; uint8_t led = 0; + unsigned long cycles = 0; button_state state = up_idle; while (1) { @@ -143,13 +134,18 @@ int main() { if (state == pressed) reverse ^= 1; - for(int j = 0; j < 4; j++) ledWrite(j, 0); + unsigned int delay_amount = 4e3 + 8e3 * potRead(); + if (cycles >= delay_amount) { + for(int j = 0; j < 4; j++) ledWrite(j, 0); + + // calculate next led index + led = mod(led + ((2 * reverse) - 1), 4); - // calculate next led index - led = mod(led + ((2 * reverse) - 1), 4); + ledWrite(led, 1); - ledWrite(led, 1); + cycles = 0; + } - delay(100 + 300 * potRead()); + cycles += 1; } } |