diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2016-09-04 11:58:52 +0200 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2016-09-04 11:58:52 +0200 |
commit | 0957e3135cc8268939955b00333b79c6846f304e (patch) | |
tree | d71995ac1a5614cd7997b4ce73e2af715b5eba3c /src/glutt-o-logique | |
parent | f8d80ab977fcec6952bf215e658b03409222b521 (diff) | |
download | glutte-o-matic-0957e3135cc8268939955b00333b79c6846f304e.tar.gz glutte-o-matic-0957e3135cc8268939955b00333b79c6846f304e.tar.bz2 glutte-o-matic-0957e3135cc8268939955b00333b79c6846f304e.zip |
Fix D and U transmission
Diffstat (limited to 'src/glutt-o-logique')
-rw-r--r-- | src/glutt-o-logique/pio.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/glutt-o-logique/pio.c b/src/glutt-o-logique/pio.c index b3b372a..b7420dc 100644 --- a/src/glutt-o-logique/pio.c +++ b/src/glutt-o-logique/pio.c @@ -77,8 +77,13 @@ struct fsm_input_signals_t pio_signals; * variables are shift registers. */ static uint8_t debounce_sq[3] = {0}; -static uint8_t debounce_discrim_d[3] = {0}; -static uint8_t debounce_discrim_u[3] = {0}; + +/* D and U have to stay on longer than SQ, otherwise the + * letter selection can fail, and transmit a K when it should + * send a D or U + */ +static uint8_t debounce_discrim_d[6] = {0}; +static uint8_t debounce_discrim_u[6] = {0}; void pio_init() @@ -160,21 +165,24 @@ void read_fsm_input_task(void __attribute__ ((unused))*pvParameters) * if one toggles to 1, set to 1; reset to 0 only if all * are at 0 */ - debounce_discrim_u[0] = debounce_discrim_u[1]; - debounce_discrim_u[1] = debounce_discrim_u[2]; - debounce_discrim_u[2] = + for (int i = 0; i < 5; i++) { + debounce_discrim_d[i] = debounce_discrim_d[i+1]; + debounce_discrim_u[i] = debounce_discrim_u[i+1]; + } + + debounce_discrim_u[5] = GPIO_ReadInputDataBit(GPIOC, GPIO_PIN_U) ? 1 : 0; pio_signals.discrim_u = - debounce_discrim_u[0] | debounce_discrim_u[1] | debounce_discrim_u[2]; + debounce_discrim_u[0] | debounce_discrim_u[1] | debounce_discrim_u[2] | + debounce_discrim_u[3] | debounce_discrim_u[4] | debounce_discrim_u[5]; - debounce_discrim_d[0] = debounce_discrim_d[1]; - debounce_discrim_d[1] = debounce_discrim_d[2]; - debounce_discrim_d[2] = + debounce_discrim_d[5] = GPIO_ReadInputDataBit(GPIOC, GPIO_PIN_D) ? 1 : 0; pio_signals.discrim_d = - debounce_discrim_d[0] | debounce_discrim_d[1] | debounce_discrim_d[2]; + debounce_discrim_d[0] | debounce_discrim_d[1] | debounce_discrim_d[2] | + debounce_discrim_d[3] | debounce_discrim_d[4] | debounce_discrim_d[5]; pio_signals.wind_generator_ok = GPIO_ReadInputDataBit(GPIOC, GPIO_PIN_REPLIE) ? 0 : 1; |