4
4
*/
5
5
6
6
7
- // Include Arduino FreeRTOS library
8
- #include < Arduino_FreeRTOS .h>
7
+ # include < Arduino.h >
8
+ #include < Adafruit_TinyUSB .h> // for Serial
9
9
10
10
// Include semaphore supoport
11
11
#include < semphr.h>
@@ -18,8 +18,17 @@ SemaphoreHandle_t interruptSemaphore;
18
18
19
19
void setup () {
20
20
21
- // Configure pin 2 as an input and enable the internal pull-up resistor
22
- pinMode (2 , INPUT_PULLUP);
21
+ Serial.begin (115200 );
22
+
23
+ // Wait for a serial port connection to be established before continuing.
24
+ // Don't want to miss any debug messages.
25
+ while ( !Serial ) delay (10 ); // for nrf52840 with native usb
26
+
27
+ Serial.println (" STARTING THE APPLICATION." );
28
+
29
+
30
+ // Configure pin 4 as an input and enable the internal pull-up resistor
31
+ pinMode (4 , INPUT_PULLUP);
23
32
24
33
// Create task for Arduino led
25
34
xTaskCreate (TaskLed, // Task function
@@ -36,13 +45,39 @@ void setup() {
36
45
interruptSemaphore = xSemaphoreCreateBinary ();
37
46
if (interruptSemaphore != NULL ) {
38
47
// Attach interrupt for Arduino digital pin
39
- attachInterrupt (digitalPinToInterrupt (2 ), interruptHandler, LOW );
48
+ attachInterrupt (digitalPinToInterrupt (4 ), interruptHandler, CHANGE );
40
49
}
41
50
42
51
43
52
}
44
53
45
- void loop () {}
54
+ void loop () {
55
+
56
+ static bool firstTime = true ;
57
+ static int previousDigitalReadValue = -1 ;
58
+
59
+ if ( firstTime ) {
60
+ Serial.println (" Starting loop...." );
61
+ delay (1000 );
62
+
63
+ firstTime = false ;
64
+ }
65
+
66
+ int digitalReadValue = digitalRead (4 );
67
+
68
+ if (digitalReadValue != previousDigitalReadValue) {
69
+ if (digitalReadValue == HIGH) {
70
+ Serial.println (" HIGH" );
71
+ }
72
+ else {
73
+ Serial.println (" LOW" );
74
+ }
75
+
76
+ previousDigitalReadValue = digitalReadValue;
77
+ }
78
+
79
+ delay (1000 );
80
+ }
46
81
47
82
48
83
void interruptHandler () {
@@ -64,13 +99,18 @@ void TaskLed(void *pvParameters)
64
99
65
100
pinMode (LED_BUILTIN, OUTPUT);
66
101
102
+ Serial.print (" Starting task " );
103
+ Serial.println (pcTaskGetName (NULL )); // Get task name
104
+ delay (1000 );
105
+
67
106
for (;;) {
68
107
69
108
/* *
70
109
* Take the semaphore.
71
110
* https://www.freertos.org/a00122.html
72
111
*/
73
112
if (xSemaphoreTake (interruptSemaphore, portMAX_DELAY) == pdPASS) {
113
+ Serial.println (" Semaphore interrupt occurred." );
74
114
digitalWrite (LED_BUILTIN, !digitalRead (LED_BUILTIN));
75
115
}
76
116
vTaskDelay (10 );
0 commit comments