#include #include #include "adc.h" #include "led.h" /* button driver */ // TODO: make interrupt driven #define BUTTON_DDR DDRB #define BUTTON_PORT PORTB #define BUTTON_REG PINB #define BUTTON_PIN 1 enum { BUTTON_RELEASED, BUTTON_PRESSED } button_state; void button_init() { led_init(); BUTTON_DDR &= ~(1< void comm_write(iface_t * iface, byte_t byte) { // disable interrupt uint8_t temp = USICR; USICR &= ~(1< void on_read(iface_t * sender, byte_t b) { if (!IS_EOM(b)) { sender->write(sender, b); return; } // strip EOM message sender->write(sender, b&0x7F); } struct { volatile message_t buffer; adc_sample_t adc_buffer[5]; } app = {}; ISR(PCINT1_vect) { if(BUTTON_REG&(1<ptr[4]; app.buffer.poti[0] = buf->ptr[3]; app.buffer.poti[1] = buf->ptr[2]; app.buffer.poti[2] = buf->ptr[0]; app.buffer.poti[3] = buf->ptr[1]; } int main() { init(); adc_on_done(adc_int); // start relevant perephials adc_start(); while(1) { delay(app.buffer.poti[0]>>4); } }