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 char restore[10] = "";
54 int receiver_selection( int nr ) {
60 if ( nr == 0 ) len = 0;
65 for(int i=0; i<4; i++) {
66 int a = analogRead( receiver[nr][i] );
67 int on_off = a > 512 ? 1 : 0;
71 restore[len++] = char('1' + (nr * 4) + i);
82 Serial.print(" selected:");
83 Serial.print(selected);
85 if ( active == 0 ) { // no inputs active
89 if ( active != 1 ) { // only one active at a time
96 #define LED_NO_ACTIVE_INPUTS 2000
97 #define LED_MULTIPLE_INPUTS 125
98 #define LED_SERIAL 200 // < 250
102 int blink_interval = LED_NO_ACTIVE_INPUTS; // 2 sec on/off no receivers turned on
103 int last_changed_nr = -1;
104 int last_receiver_selection[2] = { -1, -1 };
110 while(nr && nr <= 2) {
115 int sat = receiver_selection(i);
116 int last_sat = last_receiver_selection[i];
117 last_receiver_selection[i] = sat;
120 Serial.print(" nr:");
124 Serial.print(" last:");
125 Serial.print(last_sat);
129 int prefer_master = 0;
130 if ( digitalRead(REC_MASTER) == HIGH ) {
133 if ( last_sat != sat ) {
135 last_changed_nr = current_nr;
143 if ( last_changed_nr != current_nr ) {
144 sat = current_sat; // ignore, last not changed
151 if ( sat == 0 ) { // slow blink
152 blink_interval = LED_NO_ACTIVE_INPUTS;
154 } else if ( sat < 0 ) { // error
155 blink_interval = LED_MULTIPLE_INPUTS;
158 blink_interval = LED_OFF;
160 if ( prefer_master ) {
164 if ( nr == 1 ) { // need to check 2nd recorder error
165 int error = receiver_selection(i + 1);
167 if ( error == -1 ) blink_interval = LED_MULTIPLE_INPUTS;
171 if ( last_sat != sat ) {
173 last_changed_nr = current_nr;
180 if ( last_changed_nr != current_nr ) {
181 sat = current_sat; // ignore, last not changed
187 if ( current_sat != sat ) {
189 last_changed_nr = current_nr;
193 for(int repeat=0; repeat<2; repeat++) {
196 Serial.println( char('A' + sat - 1) );
198 for(int i=0; i<sat; i++) {
199 digitalWrite(LED, HIGH);
201 digitalWrite(LED, LOW);
204 delay( ( 5 - sat ) * LED_SERIAL * 2 ); // sleep up to 2s
205 //assert(4 * LED_SERIAL < 2000);
216 Serial.print(" sat=");
217 Serial.print(current_sat);
218 Serial.print(" from:");
219 Serial.print(last_changed_nr);
220 Serial.print(" restore>");
221 Serial.print(restore);
222 Serial.print(" blink=");
223 Serial.println(blink_interval);
226 // handle next led blink event in time
227 int m = millis() % ( blink_interval * 2 );
228 if ( blink_interval != 0 ) {
229 if ( m > blink_interval ) {
230 digitalWrite(LED, HIGH);
232 digitalWrite(LED, LOW);
235 digitalWrite(LED, LOW);
239 while ( Serial.available() ) {
240 int serial = Serial.read();
241 Serial.print(serial, HEX);
242 if ( serial >= '1' && serial <= ( '1' + nr_test_pins ) ) {
243 int nr = serial - '1';
244 Serial.print(" toggle pin ");
245 test_out[nr] = ! test_out[nr];
246 int pin = test_pins[nr];
249 int out = test_out[nr];
251 digitalWrite( pin, out );
255 for(int i=0;i<nr_test_pins;i++) {
256 if ( i == 4 || i == 8 ) Serial.print(" ");
257 Serial.print(test_out[i]);