X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=dart%2Fdart.pde;h=6819665bf3ddb2dea6d2c21f1193821d2d173c9d;hb=8d8a2269a1d6e35085fb73f39dc2488216961f3f;hp=f46449904f89728a1ddd3f93acf2016867f4ae04;hpb=008ba91d9e2cfdcffa263bbfea51298026899d16;p=svn42.git diff --git a/dart/dart.pde b/dart/dart.pde index f464499..6819665 100644 --- a/dart/dart.pde +++ b/dart/dart.pde @@ -2,107 +2,46 @@ #include #include -#define RF433_PIN 10 -//********************************************************************// +//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 INPUT_SIG_PORTD B11000000 +#define INPUT_SIG_PORTB B00011111 +#define INPUT_SIG_PORTC B00010000 + +#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; -typedef struct { - byte offset; - byte state; -} rf_bit_t; - -// offset is number of alphas (0.08ms) - -const rf_bit_t zero_bit[] = { { 4, 1 }, - { 16, 0 }, - { 20, 1 }, - { 32, 0 }, - { 0, 0 } }; - -const rf_bit_t one_bit[] = { { 12, 1 }, - { 16, 0 }, - { 28, 1 }, - { 32, 0 }, - { 0, 0 } }; - -const rf_bit_t float_bit[] = { { 4, 1 }, - { 16, 0 }, - { 28, 1 }, - { 32, 0 }, - { 0, 0 } }; - -const rf_bit_t sync_bit[] = { { 4, 1 }, - { 128, 0 }, - { 0, 0 } }; - -typedef enum { ZERO = 0, ONE , FLOAT , SYNC } adbit_t; -typedef byte ad_bit_t; -#define WORD_LEN 13 -typedef ad_bit_t word_t[WORD_LEN]; - -const rf_bit_t* bit_defs[] = { zero_bit, one_bit, float_bit, sync_bit }; - -byte alpha_cnt = 0; -byte bit_cnt = 0; -byte chunk_cnt = 0; -byte word_cnt = 0; -const ad_bit_t* current_word; -byte volatile frame_finished = 1; - -#define FRAME_LEN 8 - -#define A1_ON 0 -#define A1_OFF 1 -#define A2_ON 2 -#define A2_OFF 3 - -#define B1_ON 4 -#define B1_OFF 5 -#define B2_ON 6 -#define B2_OFF 7 - -#define C1_ON 8 -#define C1_OFF 9 -#define C2_ON 10 -#define C2_OFF 11 - -#define D1_ON 12 -#define D1_OFF 13 -#define D2_ON 14 -#define D2_OFF 15 - -const word_t words[] = { -{ ZERO, ZERO, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // A1_ON -{ ZERO, ZERO, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // A1_OFF -{ ZERO, ZERO, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // A2_ON -{ ZERO, ZERO, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // A2_OFF - -{ FLOAT, ZERO, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // B1_ON -{ FLOAT, ZERO, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // B1_OFF -{ FLOAT, ZERO, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // B2_ON -{ FLOAT, ZERO, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // B2_OFF - -{ ZERO, FLOAT, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // C1_ON -{ ZERO, FLOAT, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // C1_OFF -{ ZERO, FLOAT, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // C2_ON -{ ZERO, FLOAT, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // C2_OFF - -{ FLOAT, FLOAT, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // D1_ON -{ FLOAT, FLOAT, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // D1_OFF -{ FLOAT, FLOAT, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // D2_ON -{ FLOAT, FLOAT, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC } // D2_OFF -}; - - -//********************************************************************// - 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< 2 && rf433_lo_cnt<6 && rf433_hi_cnt>10 && rf433_hi_cnt < 14) - { - rf433_data.uint32<<=1; - rf433_data.uint32|=1; - valid++; - } else if (rf433_hi_cnt > 2 && rf433_hi_cnt<6 && rf433_lo_cnt>10 && rf433_lo_cnt < 14) { - rf433_data.uint32<<=1; - valid++; - } else if (rf433_hi_cnt > 2 && rf433_hi_cnt<6 && rf433_lo_cnt>120 && rf433_lo_cnt < 128 && valid >=24) { - //rf433_data.uint8[3]=0; - //Serial.print(rf433_data.uint32); - Serial.print(rf433_data.uint8[0],BYTE); - Serial.print(rf433_data.uint8[1],BYTE); - Serial.print(rf433_data.uint8[2],BYTE); - //Serial.print(rf433_data.uint8[3],BYTE); - } else { - valid=0; - rf433_data.uint32=0; - } - rf433_hi_cnt=0; - rf433_lo_cnt=0; - } - if (sample == HIGH) - rf433_hi_cnt++; - else - rf433_lo_cnt++; - last_sample=sample; + stop_timer(); + PCICR|= B111; } -//unsigned long wm_start_[3]={0,0,0}; -//bool wait_millis(unsigned long *start_time, unsigned long ms) -//{ -// if (ms == 0) -// return false; -// else if (*start_time > 0) -// { -// if (millis() < *start_time || millis() > (*start_time) + ms) -// { -// *start_time = 0; -// return false; -// } -// else -// return true; -// } -// else -// { -// *start_time=millis(); -// return true; -// } -//} - -//********************************************************************// +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); +} -void setup() +static void send_btn(byte btn) { - pinMode(RF433_PIN, INPUT); // set pin to input - digitalWrite(RF433_PIN, LOW); // turn of pullup resistors + uint8_t value=0; + while(btn>>=1) + value++; + Serial.print("btn\t"); + Serial.println(0+value); + +} - Serial.begin(57600); -// Serial.println("starting timer"); +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 +// digitalWrite(RF433_PIN, LOW); // turn of pullup resistors + //Set Port as input + DDRB=0; +// disable pull up + PORTB=0; + DDRD = DDRD & 3; + PORTD= PORTD & 3; + + DDRC=0; + PORTC=0; + Serial.begin(57600); + PCMSK0=PINB_MASK & INPUT_SIG_PORTB; + PCMSK1=(PINC_MASK & INPUT_SIG_PORTC) | PLAYER_SIG_PORTC; + PCMSK2=PIND_MASK & INPUT_SIG_PORTD; + PCICR|= B111; +} + + void loop() { }