Buenas, quisiera saber como crear otro temporizador para mi proyecto. Se trata de un medidor de rayos UV utilizando NodeMCU Wifi. Lo que quiero hacer es que el primer temporizador se ejecute después de un minuto de encender el proyecto, después otro que cada 20 min compruebe el índice UV. El tercero no es de importancia, es para que se restablezcan los valores del temporizador.
#include <ESP8266WiFi.h>
#define PubNub_BASE_CLIENT WiFiClient
#include <PubNub.h>
const static char ssid[] = "SSID";
const static char pass[] = "xxxxxxx";
int sendTimer; // Temporizador utilizado para controlar la frecuencia con la que se publican los mensajes. Envía un nuevo mensaje una vez cada 10 minutos.
int sensorTimer; // Temporizador utilizado para controlar la frecuencia con la que se comprueba el sensor. Comprobado cada 60 segundos.
float sensorValue; // Valor del sensor.
int lastuvindex; //Bucle indice UV
int uvindex; // Valor del sensor convertido a índice UV
void setup() {
Serial.begin(9600);
WiFi.begin(ssid, pass);
if(WiFi.waitForConnectResult() == WL_CONNECTED){
Serial.println("WiFi connected.");
PubNub.begin("pub-xxxxxxxxxxxxx", "sub-c-xxxxxxxxxx");
} else {
Serial.println("Couldn't get a wifi connection.");
while(1) delay(100);
}
}
void loop() {
sensorTimer = (sensorTimer + 1);
if (sensorTimer == 60) { //Comprobar el sensor cada 60 segundos
sensorTimer = 0;
sendTimer = (sendTimer + 1);
if (sendTimer == 10) { //Restablecer el sensor cada 10 min
sendTimer = 0;
}
sensorValue = analogRead(A0);
if ((sensorValue >= 0) && (sensorValue < 10)) {
uvindex = 0;
}
else if ((sensorValue >= 10) && (sensorValue < 65)) {
uvindex = 1;
}
else if ((sensorValue >= 65) && (sensorValue < 83)) {
uvindex = 2;
}
else if ((sensorValue >= 83) && (sensorValue < 103)) {
uvindex = 3;
}
else if ((sensorValue >= 103) && (sensorValue < 124)) {
uvindex = 4;
}
else if ((sensorValue >= 124) && (sensorValue < 142)) {
uvindex = 5;
}
else if ((sensorValue >= 142) && (sensorValue < 162)) {
uvindex = 6;
}
else if ((sensorValue >= 162) && (sensorValue < 180)) {
uvindex = 7;
}
else if ((sensorValue >= 180) && (sensorValue < 200)) {
uvindex = 8;
}
else if ((sensorValue >= 200) && (sensorValue < 221)) {
uvindex = 9;
}
else if ((sensorValue >= 221) && (sensorValue < 240)) {
uvindex = 10;
}
else if (sensorValue >= 240) {
uvindex = 11;
}
if ((lastuvindex != uvindex) || (sendTimer == 0)) {
lastuvindex = uvindex;
sendTimer = 0;
PubNub_BASE_CLIENT *client;
Serial.println("publishing a message");
char msg[64] = "{\"eon\":{\"uvindex\":";
sprintf(msg + strlen(msg), "%d", uvindex);
strcat(msg, "}}");
client = PubNub.publish("uvindex", msg);
if (!client) {
Serial.println("publishing error");
delay(1000);
return;
}
while (client->connected()) {
while (client->connected() && !client->available());
char c = client->read();
Serial.print(c);
}
client->stop();
Serial.println();
}
}
delay(1000);
}