control numbers using buttons
This commit is contained in:
parent
6c117bc4c2
commit
183cacf730
55
main.c
55
main.c
|
@ -81,8 +81,23 @@ volatile uint8_t frame_count = 0; /**< number of frames passed */
|
|||
#define MUX_S2_PORT B /**< port to select multiplexer output */
|
||||
#define MUX_S2_PIN 5 /**< pin to select multiplexer output */
|
||||
|
||||
/** number to be display and changed using the buttons */
|
||||
struct number_t {
|
||||
uint16_t number; /**< number to display (0-9999, 0xffff=off) */
|
||||
uint8_t up; /**< which of the 16 buttons is to increment the number */
|
||||
uint8_t down; /**< which of the 16 buttons is to decrement the number */
|
||||
};
|
||||
/** episode, scene, take, video 1, audio 1, video 2, audio 2 number (does not have to be in this order) */
|
||||
uint16_t numbers[7] = {0};
|
||||
struct number_t numbers[] = {
|
||||
{0, 2, 3},
|
||||
{0, 14, 15},
|
||||
{0, 10, 11},
|
||||
{0, 6, 7},
|
||||
{0, 1, 0},
|
||||
{0, 13, 12},
|
||||
{0, 5, 4},
|
||||
};
|
||||
|
||||
|
||||
#define POWER_SWITCH_PORT B /**< port to switch power of all devices (including this micro-controller) */
|
||||
#define POWER_SWITCH_PIN 8 /**< pin to switch power of all devices (including this micro-controller) */
|
||||
|
@ -498,10 +513,10 @@ void main(void)
|
|||
// display numbers on TM1637
|
||||
for (uint8_t number=0; number<LENGTH(numbers); number++) {
|
||||
mux_select(number);
|
||||
if (0xffff==numbers[number]) {
|
||||
if (0xffff==numbers[number].number) {
|
||||
led_tm1637_off();
|
||||
} else {
|
||||
led_tm1637_number(numbers[number]);
|
||||
led_tm1637_number(numbers[number].number);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -560,6 +575,7 @@ void main(void)
|
|||
gpio_primary_remap(AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_ON, 0); // enable PA15 (JTDI per default)
|
||||
gpio_clear(GPIO(BUTTONS_READ_PORT), GPIO(BUTTONS_READ_PIN0)|GPIO(BUTTONS_READ_PIN1)|GPIO(BUTTONS_READ_PIN2)|GPIO(BUTTONS_READ_PIN3)); // pull read lines low since they will be high when driven and button is pressed
|
||||
uint16_t buttons = 0;
|
||||
printf("OK\n");
|
||||
|
||||
encode_morse();
|
||||
bool announce = false;
|
||||
|
@ -655,9 +671,38 @@ void main(void)
|
|||
buttons_new |= ((gpio_get(GPIO(BUTTONS_READ_PORT), GPIO(BUTTONS_READ_PIN1)) ? 1 : 0)<<13);
|
||||
buttons_new |= ((gpio_get(GPIO(BUTTONS_READ_PORT), GPIO(BUTTONS_READ_PIN2)) ? 1 : 0)<<14);
|
||||
buttons_new |= ((gpio_get(GPIO(BUTTONS_READ_PORT), GPIO(BUTTONS_READ_PIN3)) ? 1 : 0)<<15);
|
||||
if (buttons_new!=buttons) { // only do something if there is a change
|
||||
buttons = buttons_new; // save new state
|
||||
uint16_t buttons_diff = buttons^buttons_new; // get difference
|
||||
buttons = buttons_new; // save new state
|
||||
if (buttons_diff) { // only do something if there is a change
|
||||
printf("button pressed: %016b\n", buttons);
|
||||
for (uint8_t number=0; number<LENGTH(numbers); number++) {
|
||||
if (buttons_diff&(1<<numbers[number].up) || buttons_diff&(1<<numbers[number].down)) { // buttons for display 0
|
||||
if (buttons&(1<<numbers[number].up) && buttons&(1<<numbers[number].down)) { // both buttons are pressed
|
||||
numbers[number].number = 0xffff; // disable number
|
||||
} else if (buttons&(1<<numbers[number].up) && buttons_diff&(1<<numbers[number].up)) { // only up button has been pressed
|
||||
if (0xffff==numbers[number].number) {
|
||||
numbers[number].number = 0;
|
||||
} else {
|
||||
numbers[number].number = (numbers[number].number+1)%10000;
|
||||
}
|
||||
} else if (buttons&(1<<numbers[number].down) && buttons_diff&(1<<numbers[number].down)) { // only down button has been pressed
|
||||
if (0xffff==numbers[number].number) {
|
||||
numbers[number].number = 9999;
|
||||
} else if (0==numbers[number].number) {
|
||||
numbers[number].number = 0xffff;
|
||||
} else {
|
||||
numbers[number].number -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
// display numbers on TM1637
|
||||
mux_select(number);
|
||||
if (0xffff==numbers[number].number) {
|
||||
led_tm1637_off();
|
||||
} else {
|
||||
led_tm1637_number(numbers[number].number);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// display time and frame number
|
||||
|
|
Loading…
Reference in New Issue