7 // serial commands for loop-back test
10 // pins, 2 recorders 4 inputs each
11 int receiver[2][4] = {
21 int test_pins[] = { 2,3,4,5, 6,7,8,9, 1};
22 int test_out[] = { 1,0,0,0, 0,1,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 pinMode(receiver[0][0], INPUT);
31 pinMode(receiver[0][1], INPUT);
32 pinMode(receiver[0][2], INPUT);
33 pinMode(receiver[0][3], INPUT);
35 pinMode(receiver[1][0], INPUT);
36 pinMode(receiver[1][1], INPUT);
37 pinMode(receiver[1][2], INPUT);
38 pinMode(receiver[1][3], INPUT);
43 Serial.print("boot master=");
44 Serial.println(digitalRead(REC_MASTER) == HIGH );
48 for(int i=0;i<nr_test_pins;i++) {
49 pinMode(test_pins[i], OUTPUT);
50 digitalWrite(test_pins[i], test_out[i]);
55 int receiver_selection( int nr ) {
56 int StateA = digitalRead( receiver[nr][0] ) == HIGH;
57 int StateB = digitalRead( receiver[nr][1] ) == HIGH;
58 int StateC = digitalRead( receiver[nr][2] ) == HIGH;
59 int StateD = digitalRead( receiver[nr][3] ) == HIGH;
70 if ( StateA + StateB + StateC + StateD == 0 ) { // no inputs active
74 if ( StateA + StateB + StateC + StateD != 1 ) { // only one active at a time
80 } else if ( StateB ) {
82 } else if ( StateC ) {
84 } else if ( StateD ) {
88 return 0; // receiver off
91 #define LED_NO_ACTIVE_INPUTS 2000
92 #define LED_MULTIPLE_INPUTS 125
93 #define LED_SERIAL 250
97 int blink_interval = LED_NO_ACTIVE_INPUTS; // 2 sec on/off no receivers turned on
104 int sat = receiver_selection(nr-1);
117 if ( sat == 0 ) { // slow blink
118 blink_interval = LED_NO_ACTIVE_INPUTS;
119 } else if ( sat < 0 ) { // error
120 blink_interval = LED_MULTIPLE_INPUTS;
122 blink_interval = LED_OFF;
124 if ( digitalRead(REC_MASTER) == HIGH ) {
131 if ( current_sat != sat ) {
135 for(int repeat=0; repeat<2; repeat++) {
138 Serial.println( char('A' - 1 + sat) );
140 for(int i=0; i<sat; i++) {
141 digitalWrite(LED, HIGH);
143 digitalWrite(LED, LOW);
146 delay( 2000 - sat * LED_SERIAL ); // sleep up to 2s
147 //assert(4 * LED_SERIAL < 2000);
155 Serial.print(" sat=");
156 Serial.print(current_sat);
157 Serial.print(" blink=");
158 Serial.println(blink_interval);
161 // handle next led blink event in time
162 int m = millis() % ( blink_interval * 2 );
163 if ( blink_interval != 0 ) {
164 if ( m > blink_interval ) {
165 digitalWrite(LED, HIGH);
167 digitalWrite(LED, LOW);
170 digitalWrite(LED, LOW);
174 while ( Serial.available() ) {
175 int serial = Serial.read();
176 Serial.print(serial, HEX);
177 if ( serial >= '1' && serial <= ( '1' + nr_test_pins ) ) {
178 int nr = serial - '1';
179 Serial.print(" toggle pin ");
180 test_out[nr] = ! test_out[nr];
181 int pin = test_pins[nr];
184 int out = test_out[nr];
186 digitalWrite( pin, out );
190 for(int i=0;i<nr_test_pins;i++) {
191 if ( i == 4 || i == 8 ) Serial.print(" ");
192 Serial.print(test_out[i]);