.
This commit is contained in:
131
Arduino-WDT/Arduino-WDT.ino
Normal file
131
Arduino-WDT/Arduino-WDT.ino
Normal file
@@ -0,0 +1,131 @@
|
||||
const int statePin = 3; // Connect LattePanda's S3 pin to Arduino's D3
|
||||
const int resetPin = 4; // Connect LattePanda's RST pin to Arduino's D4
|
||||
const int D10 = 10;
|
||||
const int D11 = 11;
|
||||
const int D12 = 12;
|
||||
|
||||
bool watchdogActive = false;
|
||||
unsigned long lastReceivedTime;
|
||||
unsigned long currentTime;
|
||||
|
||||
bool lastLEDState = LOW;
|
||||
unsigned long lastLEDTime;
|
||||
unsigned long currentLEDTime;
|
||||
|
||||
void setup()
|
||||
{
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
|
||||
digitalWrite (LED_BUILTIN, LOW);
|
||||
lastLEDTime = millis ();
|
||||
|
||||
pinMode(statePin, INPUT); // Set as input to read the state pin's level
|
||||
pinMode(resetPin, INPUT); // By default, the RST pin on LattePanda is 3.3V. Initialize Arduino pin as INPUT to match this level.
|
||||
|
||||
pinMode(D10, OUTPUT);
|
||||
pinMode(D11, OUTPUT);
|
||||
pinMode(D12, OUTPUT);
|
||||
|
||||
Serial.begin(9600);
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
//-- Check to see if it's time to change the LED state.
|
||||
currentLEDTime = millis ();
|
||||
if (currentLEDTime > lastLEDTime) //-- Check for millis overflow
|
||||
{
|
||||
if (currentLEDTime - lastLEDTime > 1000U)
|
||||
{
|
||||
if (lastLEDState == LOW)
|
||||
{
|
||||
digitalWrite (LED_BUILTIN, HIGH);
|
||||
lastLEDState = HIGH;
|
||||
}
|
||||
else
|
||||
{
|
||||
digitalWrite (LED_BUILTIN, LOW);
|
||||
lastLEDState = LOW;
|
||||
}
|
||||
|
||||
lastLEDTime = millis ();
|
||||
}
|
||||
}
|
||||
else
|
||||
lastLEDTime = currentLEDTime;
|
||||
|
||||
// Check if the watchdog should be activated
|
||||
if (digitalRead (statePin) == HIGH)
|
||||
{
|
||||
if (Serial.available () > 0)
|
||||
{
|
||||
char receivedChar = Serial.read ();
|
||||
if (receivedChar == 'A')
|
||||
{
|
||||
watchdogActive = true;
|
||||
lastReceivedTime = millis();
|
||||
}
|
||||
else if (receivedChar == 'Q')
|
||||
{
|
||||
watchdogActive = false;
|
||||
}
|
||||
else if (receivedChar == '0')
|
||||
{
|
||||
digitalWrite (D10, LOW);
|
||||
digitalWrite (D11, LOW);
|
||||
digitalWrite (D12, LOW);
|
||||
}
|
||||
else if (receivedChar == '1')
|
||||
{
|
||||
digitalWrite (D10, LOW);
|
||||
digitalWrite (D11, LOW);
|
||||
digitalWrite (D12, LOW);
|
||||
|
||||
digitalWrite (D10, HIGH);
|
||||
}
|
||||
else if (receivedChar == '2')
|
||||
{
|
||||
digitalWrite (D10, LOW);
|
||||
digitalWrite (D11, LOW);
|
||||
digitalWrite (D12, LOW);
|
||||
|
||||
digitalWrite (D11, HIGH);
|
||||
}
|
||||
else if (receivedChar == '3')
|
||||
{
|
||||
digitalWrite (D10, LOW);
|
||||
digitalWrite (D11, LOW);
|
||||
digitalWrite (D12, LOW);
|
||||
|
||||
digitalWrite (D10, HIGH);
|
||||
digitalWrite (D11, HIGH);
|
||||
}
|
||||
else if (receivedChar == '4')
|
||||
{
|
||||
digitalWrite (D10, LOW);
|
||||
digitalWrite (D11, LOW);
|
||||
digitalWrite (D12, LOW);
|
||||
|
||||
digitalWrite (D12, HIGH);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
watchdogActive = false;
|
||||
}
|
||||
|
||||
// If watchdog is active and 's' character isn't received within 1 minute, reboot LattePanda board
|
||||
currentTime = millis ();
|
||||
if (currentTime > lastReceivedTime) //-- Check for millis overflow and wait for the next cycle if it has
|
||||
{
|
||||
if (watchdogActive && (currentTime - lastReceivedTime > 60000U))
|
||||
{
|
||||
pinMode(resetPin,OUTPUT); // Set pin to OUTPUT mode
|
||||
digitalWrite(resetPin, LOW); // Pull down the RST pin to reboot the LattePanda board
|
||||
delay(50); // Maintain a LOW level for 50ms
|
||||
pinMode(resetPin, INPUT); // Set pin back to INPUT mode to match default 3.3V level of LattePanda's RST pin
|
||||
watchdogActive = false; // Stop the watchdog function after rebooting the LattePanda board
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user