Skip to content

Commit 3048b9a

Browse files
committed
Add boardID ADC
1 parent 8714efb commit 3048b9a

File tree

1 file changed

+78
-57
lines changed

1 file changed

+78
-57
lines changed

Firmware/LoRaSerial_Firmware/Begin.ino

Lines changed: 78 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,16 @@
11
//Based on hardware features, determine which hardware this is
22
void 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

144154
void 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+
163184
void 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

Comments
 (0)