7 // serial commands for loop-back test
10 // pins, 2 recorders 4 inputs each
11 int receiver[2][4] = {
21 int test_pins[] = { 12,11,10,9, 8,7,6,5, 4 };
22 int test_out[] = { 0, 0, 0,0, 0,0,0,0, 1};
23 int nr_test_pins = sizeof(test_pins)/sizeof(int);
26 Serial.begin(9600); // FIXME check speed
28 pinMode(REC_MASTER, INPUT_PULLUP); // pullup for jumper/button
30 for(int nr=0; nr<2; nr++) {
31 for(int input=0; input<4; input++) {
32 pinMode(receiver[nr][input], INPUT);
39 Serial.print("boot master=");
40 Serial.println(digitalRead(REC_MASTER) == HIGH );
44 for(int i=0;i<nr_test_pins;i++) {
45 pinMode(test_pins[i], OUTPUT);
46 digitalWrite(test_pins[i], test_out[i]);
51 int receiver_selection( int nr ) {
59 for(int i=0; i<4; i++) {
60 int a = analogRead( receiver[nr][i] );
61 int on_off = a > 512 ? 1 : 0;
63 if ( on_off ) selected = i+1;
72 Serial.print(selected);
74 if ( active == 0 ) { // no inputs active
78 if ( active != 1 ) { // only one active at a time
85 #define LED_NO_ACTIVE_INPUTS 2000
86 #define LED_MULTIPLE_INPUTS 125
87 #define LED_SERIAL 200 // < 250
91 int blink_interval = LED_NO_ACTIVE_INPUTS; // 2 sec on/off no receivers turned on
92 int last_changed_nr = -1;
93 int last_receiver_selection[2] = { -1, -1 };
99 while(nr && nr <= 2) {
104 int sat = receiver_selection(i);
105 int last_sat = last_receiver_selection[i];
106 last_receiver_selection[i] = sat;
113 Serial.print(" last:");
114 Serial.print(last_sat);
118 int prefer_master = 0;
119 if ( digitalRead(REC_MASTER) == HIGH ) {
122 if ( last_sat != sat ) {
124 last_changed_nr = current_nr;
132 if ( last_changed_nr != current_nr ) {
133 sat = current_sat; // ignore, last not changed
140 if ( sat == 0 ) { // slow blink
141 blink_interval = LED_NO_ACTIVE_INPUTS;
143 } else if ( sat < 0 ) { // error
144 blink_interval = LED_MULTIPLE_INPUTS;
147 blink_interval = LED_OFF;
149 if ( prefer_master ) {
155 if ( last_sat != sat ) {
157 last_changed_nr = current_nr;
164 if ( last_changed_nr != current_nr ) {
165 sat = current_sat; // ignore, last not changed
171 if ( current_sat != sat ) {
173 last_changed_nr = current_nr;
177 for(int repeat=0; repeat<2; repeat++) {
180 Serial.println( char('A' + sat - 1) );
182 for(int i=0; i<sat; i++) {
183 digitalWrite(LED, HIGH);
185 digitalWrite(LED, LOW);
188 delay( ( 5 - sat ) * LED_SERIAL * 2 ); // sleep up to 2s
189 //assert(4 * LED_SERIAL < 2000);
200 Serial.print(" sat=");
201 Serial.print(current_sat);
202 Serial.print(" from:");
203 Serial.print(last_changed_nr);
204 Serial.print(" blink=");
205 Serial.println(blink_interval);
208 // handle next led blink event in time
209 int m = millis() % ( blink_interval * 2 );
210 if ( blink_interval != 0 ) {
211 if ( m > blink_interval ) {
212 digitalWrite(LED, HIGH);
214 digitalWrite(LED, LOW);
217 digitalWrite(LED, LOW);
221 while ( Serial.available() ) {
222 int serial = Serial.read();
223 Serial.print(serial, HEX);
224 if ( serial >= '1' && serial <= ( '1' + nr_test_pins ) ) {
225 int nr = serial - '1';
226 Serial.print(" toggle pin ");
227 test_out[nr] = ! test_out[nr];
228 int pin = test_pins[nr];
231 int out = test_out[nr];
233 digitalWrite( pin, out );
237 for(int i=0;i<nr_test_pins;i++) {
238 if ( i == 4 || i == 8 ) Serial.print(" ");
239 Serial.print(test_out[i]);