2 pins, 2 recorders 4 inputs each
22 Serial.begin(9600); // FIXME check speed
24 pinMode(REC_MASTER, INPUT_PULLUP); // pullup for jumper/button
26 pinMode(REC_1_A, INPUT);
27 pinMode(REC_1_B, INPUT);
28 pinMode(REC_1_C, INPUT);
29 pinMode(REC_1_D, INPUT);
31 pinMode(REC_2_A, INPUT);
32 pinMode(REC_2_B, INPUT);
33 pinMode(REC_2_C, INPUT);
34 pinMode(REC_2_D, INPUT);
39 Serial.print("boot master=");
40 Serial.println(digitalRead(REC_MASTER) == HIGH );
44 int recorder_inputs( int PinA, int PinB, int PinC, int PinD ) {
45 int StateA = digitalRead( PinA ) == HIGH;
46 int StateB = digitalRead( PinB ) == HIGH;
47 int StateC = digitalRead( PinC ) == HIGH;
48 int StateD = digitalRead( PinD ) == HIGH;
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
87 int sat = recorder_inputs( REC_1_A, REC_1_B, REC_1_C, REC_1_D );
88 volatile int try_slave = 1;
97 if ( sat == 0 ) { // slow blink
98 blink_interval = LED_NO_ACTIVE_INPUTS;
99 } else if ( sat < 0 ) { // error
100 blink_interval = LED_MULTIPLE_INPUTS;
103 if ( digitalRead(REC_MASTER) == HIGH ) {
108 if ( current_sat != sat ) {
111 blink_interval = LED_OFF;
113 for(int repeat=0; repeat<2; repeat++) {
116 Serial.println( char('A' - 1 + sat) );
118 for(int i=0; i<sat; i++) {
119 digitalWrite(LED, HIGH);
121 digitalWrite(LED, LOW);
124 delay( 2000 - sat * LED_SERIAL ); // sleep up to 2s
125 //assert(4 * LED_SERIAL < 2000);
131 if ( try_slave == 1 ) {
133 sat = recorder_inputs( REC_2_A, REC_2_B, REC_2_C, REC_2_D );
135 Serial.print(" r2 ");
138 goto again_for_slave;
142 Serial.print(" sat=");
143 Serial.print(current_sat);
144 Serial.print(" blink=");
145 Serial.println(blink_interval);
148 // handle next led blink event in time
149 int m = millis() % ( blink_interval * 2 );
150 if ( blink_interval != 0 ) {
151 if ( m > blink_interval ) {
152 digitalWrite(LED, HIGH);
154 digitalWrite(LED, LOW);
157 digitalWrite(LED, LOW);