X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=dart%2Fdart.pde;h=6819665bf3ddb2dea6d2c21f1193821d2d173c9d;hb=ff9137d257207a3a4b03c4f453cc1b7ce1e3cf17;hp=35b339cb775a176563b60426823484581119bafd;hpb=2d0ed8b1d34616652604d3f546c4ff9dc038ae5c;p=svn42.git diff --git a/dart/dart.pde b/dart/dart.pde index 35b339c..6819665 100644 --- a/dart/dart.pde +++ b/dart/dart.pde @@ -2,23 +2,46 @@ #include #include +//Player+Handycap BTN analog 5 +#define PLAYER_SIG_PORTC B00100000 //INPUT PINS digital 2-7 PIND +#define PIND_MASK B11111100 //INPUT PINS digitat 8-12 PINB +#define PINB_MASK B00011111 //INPUT PINS analog 0-4 PINC +#define PINC_MASK B00011111 -#define RF433_PIN 10 -//********************************************************************// +#define INPUT_SIG_PORTD B11000000 +#define INPUT_SIG_PORTB B00011111 +#define INPUT_SIG_PORTC B00010000 -typedef unsigned char byte; +#define OUTPUT_SIG_PORTB ( PINB_MASK & ~INPUT_SIG_PORTB ) +// B00011111 & ! B00011111 = 0 +#define OUTPUT_SIG_PORTC ( PINC_MASK & ~INPUT_SIG_PORTC ) +// B00011111 & ! B00010000 = B00001111 +#define OUTPUT_SIG_PORTD ( PIND_MASK & ~INPUT_SIG_PORTD ) +// B11111100 & ! B11000000 = 00111100 +union union16 { + byte uint8[2]; + uint16_t uint16; +}; + +uint8_t zahlen[] = {115,110,46,78,51,83,82,68,99,105,41,73,35,67,50,36,113,108,44,76,49,81,114,100,98,101,37,69,34,66,102,109,111,116,52,84,47,79,57,89,106,97,33,65,42,74,38,45,112,104,40,72,48,80,0,0,103,107,43,75,39,71,70,77} ; + +union union32 { + byte uint8[4]; + uint16_t uint16[2]; + uint32_t uint32; +}; -//********************************************************************// +typedef unsigned char byte; void start_timer() { // timer 1: 2 ms TCCR1A = 0; // prescaler 1:8, WGM = 4 (CTC) - TCCR1B = 1< 0.08ms @ 16 MHz -> 1*alpha + TCCR1B = 1< 0.08ms @ 16 MHz -> 1*alpha // OCR1A = 207; // (1+207)*8 = 1664 -> 0.104ms @ 16 MHz -> 1*alpha TCNT1 = 0; // reseting timer TIMSK1 = 1<>=1) + value++; + value<<=3; + while(output>>=1) + value++; + + uint8_t zahl = zahlen[value]; + uint8_t multi = zahl >> 5; + uint8_t base = zahl & B11111; + Serial.print(0+multi); + Serial.print("\t"); + Serial.println(0+base); } +static void send_btn(byte btn) +{ + uint8_t value=0; + while(btn>>=1) + value++; + Serial.print("btn\t"); + Serial.println(0+value); + +} + +static void PCint() { + byte PINB_COPY = PINB; + byte PINC_COPY = PINC; + byte PIND_COPY = PIND; + byte output = ( OUTPUT_SIG_PORTC & ~ PINC_COPY ) | (( OUTPUT_SIG_PORTD & ~ PIND_COPY ) <<2 ); // no output on B + byte input = ( INPUT_SIG_PORTB & ~ PINB_COPY ) | ( ( INPUT_SIG_PORTC & ~ PINC_COPY ) <<1 ) |( INPUT_SIG_PORTD & ~ PIND_COPY ); + byte btn = ( PLAYER_SIG_PORTC & ~ PINC_COPY ); + + if ( input && output) + send_dart(input,output); + else if (btn) + send_btn(btn); + else + return; + //Timeout verhindert zu schnelle Wiederholungen + PCICR&= ~ B111; // Disable Interrupt + start_timer(); +} + + + +SIGNAL(PCINT0_vect) { + PCint(); +} +SIGNAL(PCINT1_vect) { + PCint(); +} +SIGNAL(PCINT2_vect) { + PCint(); +} void setup() { // pinMode(RF433_PIN, INPUT); // set pin to input @@ -47,32 +128,17 @@ void setup() PORTB=0; DDRD = DDRD & 3; PORTD= PORTD & 3; + DDRC=0; PORTC=0; Serial.begin(57600); - Serial.println("starting timer"); -// start_timer(); + PCMSK0=PINB_MASK & INPUT_SIG_PORTB; + PCMSK1=(PINC_MASK & INPUT_SIG_PORTC) | PLAYER_SIG_PORTC; + PCMSK2=PIND_MASK & INPUT_SIG_PORTD; + PCICR|= B111; } -union union16 { - byte uint8[2]; - uint16_t uint16; -}; -//INPUT PINS digital 2-7 PIND -//INPUT PINS digitat 8-12 PINB -//INPUT PINS analog 0-4 PINC void loop() { -// Serial.println("foo"); -// return; - - union16 data; - data.uint8[0]=PIND; - data.uint16<<=3; - data.uint8[0]|= (PINC & B11111); - data.uint16<<=5; - data.uint8[0]|= (PINB & B11111); - Serial.print(data.uint8[0]); - Serial.print(data.uint8[1]); }