/** * SPDX-FileCopyrightText: 2026 Maximiliano Ramirez <maximiliano.ramirezbravo@gmail.com> * * SPDX-License-Identifier: MIT *//** * ReactiveESP32 Example Overview: * - This example demonstrates the basic usage of untracked nodes. * - Two Signal<uint8_t> named 'number1' and 'number2' are defined. * - A Computed<uint16_t> named 'sum' is created that computes the sum of 'number1' and 'number2', * but only updates when 'number1' changes, using peek() to read 'number2' without tracking * dependency. * * - The Serial interface is used to interact with the program: * - '1': Set 'number1' to a new value (triggers 'sum' update). * - '2': Set 'number2' to a new value (does NOT trigger 'sum' update). * - 'g': Get the current values of 'number1', 'number2', and 'sum'. * * - Pressing '0' restarts the ESP32. */#include<ReactiveESP32.h>usingnamespaceRxESP32;/* ---------------------------------------------------------------------------------------------- */// Define two signalsSignal<uint8_t>number1(0);Signal<uint8_t>number2(0);// Define a computed value that sums both signals, but only updates when number1 changes// Using peek() to read number2 without tracking dependencyComputed<uint16_t>sum([](){uint8_tnum1=number1.get();uint8_tnum2=number2.peek();uint16_tsum=num1+num2;Serial.printf("\tSum updated: %u + %u = %u\n",num1,num2,sum);returnsum;});// Read Serial input and process commandsvoidserialRead();/* ---------------------------------------------------------------------------------------------- */voidsetup(){Serial.begin(115200);delay(1000);Serial.println("=======================================");Serial.println("ReactiveESP32 - Basic Untracked Example");Serial.println("=======================================");// Start the ReactiveESP32 dispatcherif(!Dispatcher::start()){Serial.println("Failed to start ReactiveESP32 Dispatcher!");while(true){delay(1000);}}}voidloop(){serialRead();}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'1':{// Set the signal 1 to a new value (triggers sum update)staticuint8_tnew_value=1;if(!number1.set(new_value)){Serial.printf("Number 1 unchanged: %u\n",new_value);break;}Serial.printf("Number 1 set to: %u\n",new_value);new_value++;}break;case'2':{// Set the signal 2 to a new value (does NOT trigger sum update)staticuint8_tnew_value=1;if(!number2.set(new_value)){Serial.printf("Number 2 unchanged: %u\n",new_value);break;}Serial.printf("Number 2 set to: %u\n",new_value);new_value++;}break;case'g':{// Get the current value of all nodesuint8_tnum1=number1.get();uint8_tnum2=number2.get();uint16_tsum_value=sum.get();Serial.printf("Number 1: %u, Number 2: %u, Sum: %u\n",num1,num2,sum_value);}break;}}