7 // pins, 2 recorders 4 inputs each
18 Serial.begin(9600); // FIXME check speed
20 pinMode(REC_MASTER, INPUT_PULLUP); // pullup for jumper/button
22 pinMode(receiver[0][0], INPUT);
23 pinMode(receiver[0][1], INPUT);
24 pinMode(receiver[0][2], INPUT);
25 pinMode(receiver[0][3], INPUT);
27 pinMode(receiver[1][0], INPUT);
28 pinMode(receiver[1][1], INPUT);
29 pinMode(receiver[1][2], INPUT);
30 pinMode(receiver[1][3], INPUT);
35 Serial.print("boot master=");
36 Serial.println(digitalRead(REC_MASTER) == HIGH );
40 int receiver_selection( int nr ) {
41 int StateA = digitalRead( receiver[nr][0] ) == HIGH;
42 int StateB = digitalRead( receiver[nr][1] ) == HIGH;
43 int StateC = digitalRead( receiver[nr][2] ) == HIGH;
44 int StateD = digitalRead( receiver[nr][3] ) == HIGH;
55 if ( StateA + StateB + StateC + StateD == 0 ) { // no inputs active
59 if ( StateA + StateB + StateC + StateD != 1 ) { // only one active at a time
65 } else if ( StateB ) {
67 } else if ( StateC ) {
69 } else if ( StateD ) {
73 return 0; // receiver off
76 #define LED_NO_ACTIVE_INPUTS 2000
77 #define LED_MULTIPLE_INPUTS 125
78 #define LED_SERIAL 250
82 int blink_interval = LED_NO_ACTIVE_INPUTS; // 2 sec on/off no receivers turned on
90 int sat = receiver_selection(nr-1);
103 if ( sat == 0 ) { // slow blink
104 blink_interval = LED_NO_ACTIVE_INPUTS;
105 } else if ( sat < 0 ) { // error
106 blink_interval = LED_MULTIPLE_INPUTS;
108 blink_interval = LED_OFF;
110 if ( digitalRead(REC_MASTER) == HIGH ) {
117 if ( current_sat != sat ) {
121 for(int repeat=0; repeat<2; repeat++) {
124 Serial.println( char('A' - 1 + sat) );
126 for(int i=0; i<sat; i++) {
127 digitalWrite(LED, HIGH);
129 digitalWrite(LED, LOW);
132 delay( 2000 - sat * LED_SERIAL ); // sleep up to 2s
133 //assert(4 * LED_SERIAL < 2000);
141 Serial.print(" sat=");
142 Serial.print(current_sat);
143 Serial.print(" blink=");
144 Serial.println(blink_interval);
147 // handle next led blink event in time
148 int m = millis() % ( blink_interval * 2 );
149 if ( blink_interval != 0 ) {
150 if ( m > blink_interval ) {
151 digitalWrite(LED, HIGH);
153 digitalWrite(LED, LOW);
156 digitalWrite(LED, LOW);