diff options
Diffstat (limited to 'tuer-rfid/limits.c')
-rw-r--r-- | tuer-rfid/limits.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/tuer-rfid/limits.c b/tuer-rfid/limits.c index 6f567af..4e14b05 100644 --- a/tuer-rfid/limits.c +++ b/tuer-rfid/limits.c @@ -25,40 +25,48 @@ #include "limits.h" #include <LUFA/Drivers/Peripheral/ADC.h> +#include <stdio.h> + #define LIMITS_ADC_CHAN_NUM 8 #define LIMITS_ADC_CHAN ADC_CHANNEL8 #define LIMITS_RINGBUF_SIZE 5 /* HINT: this is compared to a sliding sum not an average! */ -#define LIMITS_TH_CLOSE 250 -#define LIMITS_TH_OPEN 1000 +#define LIMITS_TH_CLOSE 500 +#define LIMITS_TH_OPEN 3200 void limits_init(void) { ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_128); ADC_SetupChannel(LIMITS_ADC_CHAN_NUM); - ADC_StartReading(ADC_REFERENCE_INT2560MV | ADC_LEFT_ADJUSTED | LIMITS_ADC_CHAN); + ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | LIMITS_ADC_CHAN); } -limits_t limits_get(void) +static uint16_t sum = 0; + +void limits_task(void) { - static uint8_t s = 0; - static uint8_t r[LIMITS_RINGBUF_SIZE] = { 0 }; + static uint16_t r[LIMITS_RINGBUF_SIZE] = { 0 }; static uint8_t idx = 0; if(ADC_IsReadingComplete()) { - r[idx] = (ADC_GetResult()>>8); + r[idx] = ADC_GetResult(); idx = (idx + 1) % LIMITS_RINGBUF_SIZE; - s = 0; + cli(); + sum = 0; uint8_t i; - for(i=0; i<LIMITS_RINGBUF_SIZE; ++i) s += r[i]; + for(i=0; i<LIMITS_RINGBUF_SIZE; ++i) sum += r[i]; + sei(); } +} - if(s < LIMITS_TH_CLOSE) +limits_t limits_get(void) +{ + if(sum < LIMITS_TH_CLOSE) return close; - if(s < LIMITS_TH_OPEN) - return moving; + if(sum < LIMITS_TH_OPEN) + return moving; return open; } |