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;
109 Serial.print(" nr:");
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 ) {
153 if ( nr == 1 ) { // need to check 2nd recorder error
154 int error = receiver_selection(i + 1);
156 if ( error == -1 ) blink_interval = LED_MULTIPLE_INPUTS;
160 if ( last_sat != sat ) {
162 last_changed_nr = current_nr;
169 if ( last_changed_nr != current_nr ) {
170 sat = current_sat; // ignore, last not changed
176 if ( current_sat != sat ) {
178 last_changed_nr = current_nr;
182 for(int repeat=0; repeat<2; repeat++) {
185 Serial.println( char('A' + sat - 1) );
187 for(int i=0; i<sat; i++) {
188 digitalWrite(LED, HIGH);
190 digitalWrite(LED, LOW);
193 delay( ( 5 - sat ) * LED_SERIAL * 2 ); // sleep up to 2s
194 //assert(4 * LED_SERIAL < 2000);
205 Serial.print(" sat=");
206 Serial.print(current_sat);
207 Serial.print(" from:");
208 Serial.print(last_changed_nr);
209 Serial.print(" blink=");
210 Serial.println(blink_interval);
213 // handle next led blink event in time
214 int m = millis() % ( blink_interval * 2 );
215 if ( blink_interval != 0 ) {
216 if ( m > blink_interval ) {
217 digitalWrite(LED, HIGH);
219 digitalWrite(LED, LOW);
222 digitalWrite(LED, LOW);
226 while ( Serial.available() ) {
227 int serial = Serial.read();
228 Serial.print(serial, HEX);
229 if ( serial >= '1' && serial <= ( '1' + nr_test_pins ) ) {
230 int nr = serial - '1';
231 Serial.print(" toggle pin ");
232 test_out[nr] = ! test_out[nr];
233 int pin = test_pins[nr];
236 int out = test_out[nr];
238 digitalWrite( pin, out );
242 for(int i=0;i<nr_test_pins;i++) {
243 if ( i == 4 || i == 8 ) Serial.print(" ");
244 Serial.print(test_out[i]);