This repository has been archived by the owner on Feb 4, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathminimal.ino
114 lines (90 loc) · 4.76 KB
/
minimal.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/****************************************************************************************************************************
minimal.ino
Arduino AVR, Teensy, SAM-DUE, SAMD21/SAMD51, STM32F/L/H/G/WB/MP1, nRF52, RASPBERRY_PI_PICO, etc. boards
MultiResetDetector_Generic is a library for the Arduino AVR, Teensy, SAM-DUE, SAMD, STM32, nRF52, RASPBERRY_PI_PICO, etc. boards
to enable trigger configure mode by resetting the boards twice within configurable timeout seconds.
1) DataCute https://github.com/datacute/DoubleResetDetector
2) Khoi Hoang https://github.com/khoih-prog/ESP_DoubleResetDetector
3) Khoi Hoang https://github.com/khoih-prog/ESP_MultiResetDetector
4) Khoi Hoang https://github.com/khoih-prog/DoubleResetDetector_Generic
Built by Khoi Hoang https://github.com/khoih-prog/MultiResetDetector_Generic
Licensed under MIT license
*****************************************************************************************************************************/
/****************************************************************************************************************************
This example will open a configuration portal when the reset button is pressed twice.
This method works well on Wemos boards which have a single reset button on board. It avoids using a pin for launching the configuration portal.
How It Works
1) AVR Mega, Teensy
Save data in EPPROM from address 1020, size 1024 bytes (both configurable)
Note: Teensy 4.0 has only 1080 bytes of EEPROM-simulated Flash
2) SAMD
Save data in EEPROM-simulated FlashStorage from address 0 (configurable to avoid conflict)
3) SAM DUE
Save data in DueFlashStorage from address 1020 (configurable to avoid conflict)
4) Adafruit nRF52-based boards
Save data in InternalFS, fle "/drd.dat" location 0
5) RTL8720
Save data in FlashStorage from address 0 (configurable to avoid conflict)
6) STM32
Save data in EEPROM-simulated FlashStorage from address 0 (configurable to avoid conflict)
So when the device starts up it checks the InternalFS file "/mrd.dat", EEPROM or (Due)FlashStorage for a flag to see if it has been
recently reset within the configurable timeout seconds
It'll then set a flag, and display a message to signal if the DR is detected
Settings
There are values to be set in the sketch.
MRD_TIMES - Number of subsequent resets during MRD_TIMEOUT to activate
MRD_TIMEOUT - Number of seconds to wait for the second reset. Set to 10 in the example.
MRD_ADDRESS - The address in ESP8266 RTC RAM/EEPROM address to store the flag. Must not be used in the same sketch
This example, originally relied on the Double Reset Detector library from https://github.com/datacute/DoubleResetDetector
To support ESP32, use ESP_DoubleResetDetector library from https://github.com/khoih-prog/ESP_DoubleResetDetector
To support AVR, Teensy, SAM DUE, SAMD and STM32, etc., use this MultiResetDetector_Generic from //https://github.com/khoih-prog/MultiResetDetector_Generic
*****************************************************************************************************************************/
#define MRD_GENERIC_DEBUG true //false
// These definitions must be placed before #include <MultiResetDetector_Generic.h> to be used
// Otherwise, default values (MRD_TIMES = 3, MRD_TIMEOUT = 10 seconds and MRD_ADDRESS = 0) will be used
// Number of subsequent resets during MRD_TIMEOUT to activate
#define MRD_TIMES 5
// Number of seconds after reset during which a
// subsequent reset will be considered a multi reset.
#define MRD_TIMEOUT 10
// RTC/EEPROM Memory Address for the MultiResetDetector to use
#define MRD_ADDRESS 0
#include <MultiResetDetector_Generic.h>
MultiResetDetector_Generic* mrd;
#ifndef LED_BUILTIN
#define LED_BUILTIN 13
#endif
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
while (!Serial);
Serial.println();
#if defined(BOARD_NAME)
Serial.print(F("MultiResetDetector minimal Example Program on "));
Serial.println(BOARD_NAME);
#else
Serial.println(F("MultiResetDetector minimal Example Program"));
#endif
Serial.println(MULTIRESETDETECTOR_GENERIC_VERSION);
Serial.println(F("-----------------------------------"));
mrd = new MultiResetDetector_Generic(MRD_TIMEOUT, MRD_ADDRESS);
if (mrd->detectMultiReset())
{
Serial.println(F("Multi Reset Detected"));
digitalWrite(LED_BUILTIN, LOW);
}
else
{
Serial.println(F("No Multi Reset Detected"));
digitalWrite(LED_BUILTIN, HIGH);
}
}
void loop()
{
// Call the multi reset detector loop method every so often,
// so that it can recognise when the timeout expires.
// You can also call mrd.stop() when you wish to no longer
// consider the next reset as a multi reset.
mrd->loop();
}