X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=dart%2Fdart.pde;h=6819665bf3ddb2dea6d2c21f1193821d2d173c9d;hb=ff9137d257207a3a4b03c4f453cc1b7ce1e3cf17;hp=2e5223e9402929ddbfcfc2429a33d29d57d8867c;hpb=45434651a9ef34b3f776b55be0a9ef7635a9703b;p=svn42.git diff --git a/dart/dart.pde b/dart/dart.pde index 2e5223e..6819665 100644 --- a/dart/dart.pde +++ b/dart/dart.pde @@ -2,6 +2,8 @@ #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 @@ -24,6 +26,8 @@ union union16 { 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]; @@ -56,36 +60,49 @@ ISR(TIMER1_COMPA_vect) PCICR|= B111; } +static void send_dart(byte input,byte output) +{ + byte value=0; + while(input>>=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); + +} -byte last_input=0; -byte last_output=0; 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 ); - - if (!input) - return; - if (!output) + byte btn = ( PLAYER_SIG_PORTC & ~ PINC_COPY ); + + if ( input && output) + send_dart(input,output); + else if (btn) + send_btn(btn); + else return; - //if (last_input==input && last_output==output) - //return; - last_input=input; - last_output=output; -// Serial.print(output,HEX); -// Serial.print('\t'); -// Serial.print(input,HEX); -// Serial.print('\t'); - byte value=0; - while(input>>=1) - value++; - value<<=3; - while(output>>=1) - value++; - Serial.println(value,HEX); + //Timeout verhindert zu schnelle Wiederholungen PCICR&= ~ B111; // Disable Interrupt start_timer(); } @@ -115,20 +132,13 @@ void setup() DDRC=0; PORTC=0; Serial.begin(57600); - //Serial.println("starting timer"); PCMSK0=PINB_MASK & INPUT_SIG_PORTB; - PCMSK1=PINC_MASK & INPUT_SIG_PORTC; + PCMSK1=(PINC_MASK & INPUT_SIG_PORTC) | PLAYER_SIG_PORTC; PCMSK2=PIND_MASK & INPUT_SIG_PORTD; PCICR|= B111; -// start_timer(); } -//INPUT PINS digital 2-7 PIND -//INPUT PINS digitat 8-12 PINB -//INPUT PINS analog 0-4 PINC void loop() { -// Serial.Serial.println("foo"); -// return; }