pentabug/firmware/main.c

82 lines
1.7 KiB
C
Raw Normal View History

2012-07-17 01:05:27 +02:00
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
2012-10-01 21:39:25 +02:00
#define __DELAY_BACKWARD_COMPATIBLE__
2012-07-17 01:05:27 +02:00
#include <util/delay.h>
#include <stdlib.h>
#include "main.h"
2012-09-02 21:53:11 +02:00
#include "lib/usart.h"
2012-09-02 23:49:57 +02:00
#include "lib/bughal.h"
2012-10-01 21:39:25 +02:00
#include "lib/util.h"
2012-07-26 01:34:49 +02:00
void __attribute__((noreturn))
main(void)
{
/* hardware initialisation: */
2012-09-02 23:49:57 +02:00
init_leds();
2012-09-06 23:09:20 +02:00
init_buzzr();
2012-10-01 21:39:25 +02:00
init_switch();
USART0_Init();
init_motor();
/* software initialisation */
timer_init();
/* here the show begins:*/
2012-10-01 21:39:25 +02:00
sei();
timer_t t;
uint8_t ledstate_l =0;
uint8_t ledstate_r =0;
uint8_t motorstate =0;
2012-10-01 21:39:25 +02:00
timer_set(&t, 100);
2012-08-07 20:08:57 +02:00
for(;;) /* ever */ {
2012-09-06 23:09:20 +02:00
//do something
2012-10-01 21:39:25 +02:00
//main polling loop;
button_poll();
2012-10-01 21:39:25 +02:00
if (timer_expired(&t)){
//while left button is pressed switch left led on
if (btn_state(BTNST_SDN,BTN_LEFT)|btn_state(BTNST_LDN,BTN_LEFT)){
led_on(LED_L);
} else {
led_off(LED_L);
};
//when right button has been pressed short, toggle right led
if (btn_state(BTNST_SUP,BTN_RIGHT)){
if (ledstate_r ==0){
ledstate_r = 1;
led_on(LED_R);
} else {
ledstate_r = 0;
led_off(LED_R);
};
button_clear(BTN_RIGHT); //this is important, to show the event has been processed
};
//when right button has been pressed long, toggle motor
if (btn_state(BTNST_LUP,BTN_RIGHT)){
if (motorstate ==0){
motorstate = 1;
set_motor(MOTOR_ON);
} else {
motorstate = 0;
set_motor(MOTOR_OFF);
};
button_clear(BTN_RIGHT); //this is important, to show the event has been processed
};
timer_set(&t, 5);
2012-10-01 21:39:25 +02:00
}; //end if timer expired
//USART0_put_uint16(0xA09F);
//USART0_crlf();
2012-10-01 21:39:25 +02:00
2012-08-14 22:53:25 +02:00
}
2012-07-18 15:55:20 +02:00
2012-08-14 22:53:25 +02:00
/* never return 0; */
2012-07-18 15:55:20 +02:00
}
2012-08-05 22:13:43 +02:00