11// Based on hardware features, determine which hardware this is
22void beginBoard ()
33{
4- // Use ADC to check resistor divider
5- #if defined(ARDUINO_AVR_UNO)
6- pin_cs = 7 ;
7- pin_dio0 = 3 ;
8- pin_dio1 = 2 ;
9- pin_txen = 5 ;
10- pin_rxen = 8 ;
11- pin_rst = A2;
12- pin_cts = 9 ;
13- pin_rts = 10 ;
14- pin_activityLED = 6 ;
15- pin_linkLED = 4 ;
16-
17- // Flow control
18- pinMode (pin_rts, OUTPUT);
19- digitalWrite (pin_rts, HIGH);
20-
21- pinMode (pin_cts, INPUT_PULLUP);
22-
23- pinMode (pin_activityLED, OUTPUT);
24- digitalWrite (pin_activityLED, LOW);
25-
26- pinMode (pin_linkLED, OUTPUT);
27- digitalWrite (pin_linkLED, LOW);
28-
29- strcpy (platformPrefix, " ATMEGA328 1W" );
30-
31- #elif defined(ARDUINO_ARCH_ESP32)
4+ #if defined(ARDUINO_ARCH_ESP32)
325 // Lower power boards
336 pin_cs = 15 ;
347 pin_dio0 = 26 ; // aka A0
358 pin_dio1 = 25 ; // aka A1
36- pin_txen = 255 ; // Not used
37- pin_rxen = 255 ;
389 pin_rst = 32 ;
39- pin_cts = 255 ;
40- pin_rts = 255 ;
4110
4211 pin_trigger = 13 ;
4312
44- pin_setupButton = 0 ;
13+ pin_trainButton = 0 ;
4514
4615 // Debug
4716 pinMode (pin_trigger, OUTPUT);
@@ -50,20 +19,28 @@ void beginBoard()
5019 strcpy (platformPrefix, " ESP32 100mW" );
5120
5221#elif defined(ARDUINO_ARCH_SAMD)
22+
23+ // Use ADC to check resistor divider
24+ pin_boardID = A2;
25+
5326 pin_cs = 5 ;
5427 pin_dio0 = 7 ; // aka A0
5528 pin_dio1 = 10 ; // aka A1
5629 pin_txen = 2 ;
5730 pin_rxen = 3 ;
5831 pin_rst = 6 ;
59- pin_cts = 255 ; // TODO
60- pin_rts = 255 ;
61- pin_activityLED = 9 ;
62- pin_linkLED = 8 ;
63- pin_txLED = 255 ; // TODO
64- pin_rxLED = 255 ;
32+ pin_cts = 30 ;
33+ pin_rts = 38 ;
34+ pin_txLED = 31 ;
35+ pin_rxLED = A5;
36+ pin_rssi1LED = A3;
37+ pin_rssi2LED = A4;
38+ pin_rssi3LED = 8 ;
39+ pin_rssi4LED = 9 ;
6540
66- pin_trigger = A2;
41+ pin_trainButton = 4 ;
42+
43+ pin_trigger = A0;
6744
6845 // Flow control
6946 pinMode (pin_rts, OUTPUT);
@@ -72,33 +49,66 @@ void beginBoard()
7249 pinMode (pin_cts, INPUT_PULLUP);
7350
7451 // LEDs
75- pinMode (pin_activityLED, OUTPUT);
76- digitalWrite (pin_activityLED, LOW);
77-
78- pinMode (pin_linkLED, OUTPUT);
79- digitalWrite (pin_linkLED, LOW);
52+ pinMode (pin_rssi1LED, OUTPUT);
53+ digitalWrite (pin_rssi1LED, LOW);
54+ pinMode (pin_rssi2LED, OUTPUT);
55+ digitalWrite (pin_rssi2LED, LOW);
56+ pinMode (pin_rssi3LED, OUTPUT);
57+ digitalWrite (pin_rssi3LED, LOW);
58+ pinMode (pin_rssi4LED, OUTPUT);
59+ digitalWrite (pin_rssi4LED, LOW);
60+
61+ pinMode (pin_txLED, OUTPUT);
62+ digitalWrite (pin_txLED, LOW);
63+ pinMode (pin_rxLED, OUTPUT);
64+ digitalWrite (pin_rxLED, LOW);
65+
66+ // Train button input
67+ pinMode (pin_trainButton, INPUT_PULLUP);
8068
8169 // Debug
8270 pinMode (pin_trigger, OUTPUT);
8371 digitalWrite (pin_trigger, HIGH);
8472
85- strcpy (platformPrefix, " SAMD21 1W" );
73+ // Get average of board ID voltage divider
74+ int val = 0 ;
75+ for (int x = 0 ; x < 8 ; x++)
76+ val += analogRead (pin_boardID);
77+ val /= 8 ;
78+
79+ // Convert ADC to volts
80+ float boardID = 3.3 * val / 1024 ;
81+
82+ // Use ADC to check board ID resistor divider
83+ if (boardID > 1.64 * 0.9 && boardID < 1.64 * 1.1 )
84+ {
85+ strcpy (platformPrefix, " SAMD21 1W 915MHz" );
86+ }
87+ else
88+ {
89+ strcpy (platformPrefix, " SAMD21 1W" );
90+ }
91+
8692#endif
8793
8894 // Dashbord Blink LEDs
89- for (int x = 0 ; x < 2 ; x++)
95+ for (int x = 0 ; x < 3 ; x++)
9096 {
91- digitalWrite (pin_activityLED, HIGH);
92- digitalWrite (pin_linkLED, HIGH);
97+ digitalWrite (pin_rssi1LED, HIGH);
98+ digitalWrite (pin_rssi2LED, HIGH);
99+ digitalWrite (pin_rssi3LED, HIGH);
100+ digitalWrite (pin_rssi4LED, HIGH);
93101 digitalWrite (pin_txLED, HIGH);
94102 digitalWrite (pin_rxLED, HIGH);
95- delay (100 );
103+ delay (50 );
96104
97- digitalWrite (pin_activityLED, LOW);
98- digitalWrite (pin_linkLED, LOW);
105+ digitalWrite (pin_rssi1LED, LOW);
106+ digitalWrite (pin_rssi2LED, LOW);
107+ digitalWrite (pin_rssi3LED, LOW);
108+ digitalWrite (pin_rssi4LED, LOW);
99109 digitalWrite (pin_txLED, LOW);
100110 digitalWrite (pin_rxLED, LOW);
101- delay (100 );
111+ delay (50 );
102112 }
103113}
104114
@@ -143,9 +153,9 @@ void beginLoRa()
143153
144154void beginButton ()
145155{
146- if (pin_setupButton != 255 )
156+ if (pin_trainButton != 255 )
147157 {
148- trainBtn = new Button (pin_setupButton ); // Create the button
158+ trainBtn = new Button (pin_trainButton ); // Create the button
149159 trainBtn->begin ();
150160 }
151161}
@@ -160,11 +170,22 @@ void beginWDT()
160170#endif
161171}
162172
173+ // Delay with pets of WDT when needed
174+ void delayWDT (uint16_t delayAmount)
175+ {
176+ unsigned long startTime = millis ();
177+ while (millis () - startTime < delayAmount)
178+ {
179+ delay (1 );
180+ petWDT ();
181+ }
182+ }
183+
163184void beginSerial (uint16_t serialSpeed)
164185{
165- Serial.begin (settings. serialSpeed );
186+ Serial.begin (serialSpeed);
166187#if defined(ARDUINO_ARCH_SAMD)
167- Serial1.begin (settings. serialSpeed );
188+ Serial1.begin (serialSpeed);
168189#endif
169190
170191#if defined(ENABLE_DEVELOPER)
0 commit comments