dart erkennung von tasten geht
[svn42.git] / dart / dart.pde
index 03bc643..7fbefaf 100644 (file)
@@ -9,9 +9,16 @@
 //INPUT PINS analog 0-4 PINC
 #define PINC_MASK B00011111
 
-#define INPUT_SIG_PORTD B11111111
-#define INPUT_SIG_PORTC B11111111
-#define INPUT_SIG_PORTB B11111111
+#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;
@@ -29,7 +36,7 @@ union union32 {
 typedef unsigned char byte;
 
 //********************************************************************//
-
+/*
 void start_timer()
 {
   // timer 1: 2 ms
@@ -47,34 +54,23 @@ void stop_timer() // stop the timer
   TCCR1B = 0; // no clock source
   TIMSK1 = 0; // disable timer interrupt
 }
-
+*/
+byte last_input=0;
+byte last_output=0;
 static void PCint(uint8_t port) {
-  union32 data;
-  data.uint32=0;
-  data.uint8[0]=PIND;
-  data.uint8[1]=PINC;
-  data.uint8[2]=PINB;
-  data.uint8[0]|= !PIND_MASK;
-  data.uint8[1]|= !PINC_MASK;
-  data.uint8[2]|= !PINB_MASK;
-  data.uint8[3]=0xff;
-  //PINS with signal:
-  //1
-  //3
-  //9
-  //14
-  //15
-  //21
-  //22
-  //23
-
-  for(int i=0;i<32; i++)
-  {
-    if (! (data.uint32 & 1 ))
-      Serial.println(i);
-    data.uint32>>=1;
-  }
-  //Serial.print(data.uint8[1]);
+  byte input = ( INPUT_SIG_PORTB  & ~ PINB ) | ( ( INPUT_SIG_PORTC  & ~ PINC ) <<1 ) |( INPUT_SIG_PORTD  & ~ PIND );
+  byte output = ( OUTPUT_SIG_PORTC  & ~ PINC ) | (( OUTPUT_SIG_PORTD  & ~ PIND ) <<2 ); // no output on B 
+  if (!input)
+   return;
+  if (last_input==input && last_output==output)
+    return;
+  last_input=input;
+  last_output=output;
+  Serial.print(output,HEX);
+  Serial.print('\t');
+  Serial.println(input,HEX);
+  return;
 }