diff --git a/libraries/Ticker/examples/Arguments/Arguments.ino b/libraries/Ticker/examples/Arguments/Arguments.ino index cde8acbfa094ea3ae99110023ace20df900ef58a..7f5bc5cde21c0044876c15e26c6e9acba298f971 100644 --- a/libraries/Ticker/examples/Arguments/Arguments.ino +++ b/libraries/Ticker/examples/Arguments/Arguments.ino @@ -1,25 +1,49 @@ +/* + * This example demonstrates used of Ticker with arguments. + * You can call the same callback function with different argument on different times. + * Based on the argument the callback can perform different tasks. + */ + #include #include -// attach a LED to GPIO 21 -#define LED_PIN 21 +// Arguments for the function must remain valid (not run out of scope) otherwise the function would read garbage data. +int LED_PIN_1 = 4; +#ifdef LED_BUILTIN + int LED_PIN_2 = LED_BUILTIN; +#else + int LED_PIN_2 = 8; +#endif Ticker tickerSetHigh; Ticker tickerSetLow; -void setPin(int state) { - digitalWrite(LED_PIN, state); +// Argument to callback must always be passed a reference +void swapState(int *pin) { + static int led_1_state = 1; + static int led_2_state = 1; + if(*pin == LED_PIN_1){ + Serial.printf("[%lu ms] set pin %d to state: %d\n", millis(), *pin, led_1_state); + digitalWrite(*pin, led_1_state); + led_1_state = led_1_state ? 0 : 1; // reverse for next pass + }else if(*pin == LED_PIN_2){ + Serial.printf("[%lu ms] set pin %d to state: %d\n", millis(), *pin, led_2_state); + digitalWrite(*pin, led_2_state); + led_2_state = led_2_state ? 0 : 1; // reverse for next pass + } } void setup() { - pinMode(LED_PIN, OUTPUT); - digitalWrite(1, LOW); + Serial.begin(115200); + pinMode(LED_PIN_1, OUTPUT); + pinMode(LED_PIN_2, OUTPUT); + //digitalWrite(1, LOW); - // every 25 ms, call setPin(0) - tickerSetLow.attach_ms(25, setPin, 0); + // Blink LED every 500 ms on LED_PIN_1 + tickerSetLow.attach_ms(500, swapState, &LED_PIN_1); - // every 26 ms, call setPin(1) - tickerSetHigh.attach_ms(26, setPin, 1); + // Blink LED every 1000 ms on LED_PIN_2 + tickerSetHigh.attach_ms(1000, swapState, &LED_PIN_2); } void loop() {