/** * SPDX-FileCopyrightText: 2026 Maximiliano Ramirez <maximiliano.ramirezbravo@gmail.com> * * SPDX-License-Identifier: MIT *//** * ReactiveESP32 Example Overview: * - This example demonstrates the basic usage of Signal and ReadonlySignal. * - A Signal<uint8_t> named 'number' is defined and updated every second. * - A ReadonlySignal<uint8_t> named 'readonly_number' is created as a readonly view of 'number'. * * - The Serial interface is used to interact with the program: * - 'g': Get the current value of the signal via the ReadonlySignal. * - 's': Set the signal to a new value. * - 'm': Mutate the signal value by adding 5. * * - Pressing '0' restarts the ESP32. */#include<ReactiveESP32.h>usingnamespaceRxESP32;/* ---------------------------------------------------------------------------------------------- */// Define a simple signalSignal<uint8_t>number(0);// Create a readonly view of the signalReadonlySignal<uint8_t>readonly_number(number);// Read Serial input and process commandsvoidserialRead();/* ---------------------------------------------------------------------------------------------- */voidsetup(){Serial.begin(115200);delay(1000);Serial.println("============================================");Serial.println("ReactiveESP32 - Basic ReadonlySignal Example");Serial.println("============================================");// Start the ReactiveESP32 dispatcherif(!Dispatcher::start()){Serial.println("Failed to start ReactiveESP32 Dispatcher!");while(true){delay(1000);}}}voidloop(){serialRead();// Update the signal every secondstaticuint32_tstart=0;if(millis()-start>=1000){start=millis();// Update the signal using update()number.update([](constuint8_t&value){uint8_tnew_value=value+1;Serial.printf("Number updated: %u\n",new_value);returnnew_value;});}}voidserialRead(){if(!Serial.available())return;charc=Serial.read();if(c=='\r')return;if(c=='\n')c=' ';Serial.printf("> %c\n",c);switch(c){case'0':{// Restart the ESP32ESP.restart();}break;case'g':{// Get the current value of the readonly signaluint8_tvalue=readonly_number.get();Serial.printf("Current number value (via readonly_number): %u\n",value);}break;case's':{// Set the signal to a new value using set()staticuint8_tnew_value=0;if(!number.set(new_value)){Serial.printf("Number unchanged: %u\n",new_value);break;}Serial.printf("Number set to: %u\n",new_value);new_value++;}break;case'm':{// Mutate the signal value using mutate()number.mutate([](uint8_t&value){value+=5;Serial.printf("Number mutated to: %u\n",value);});}break;}}