Go Down

Topic: En modo sleep se pierde la información de algunas variables? (Read 455 times) previous topic - next topic

jdelrio810

Al colocar arduino en modo  sleep como hago para que una variable que esta contando un proceso determinado  no pierda la información al momento de despertar..

Gracias..

surbyte

Vamos a suponer que tu contador estaba en 1000 antes de entrar en SLEEP, al momento de despertar seguirá en SLEEP y no esperes que cuenta algo estando en SLEEP.
Luego no hay razón para PERDER información, el valor presente enlas variables no se debería alterar a no ser que tu programa lo haga. Ejemplo si defines la variable contador dentro del loop por ejemplo.

Poco puedo decirte sin ver el código y que expliques de que variable hablas.

jdelrio810

Muchas gracias por tu respuesta, lo que pasa es que estoy contando cuantas veces el arduino lee el parametro de un sensor de temperatura, y al momento de despertar la variable que lleva el registro queda en cero mi pregunta es si al momento en que el arduino esta en modo sleep se borran los datos que he guardado en determinada variable gracias.

jdelrio810

Otra pregunta es si puedo llevar el registro en una determinada variable de cuantas veces el arduino queda en modo sleep..

surbyte

Coloca el código, ya te lo indiqué antes. Sin ver mas poco podemos decirte.

Quote
puedo llevar el registro en una determinada variable de cuantas veces el arduino queda en modo sleep..
Si que puedes.

Lucario448

mi pregunta es si al momento en que el arduino esta en modo sleep se borran los datos que he guardado en determinada variable
Luego no hay razón para PERDER información, el valor presente enlas variables no se debería alterar a no ser que tu programa lo haga. Ejemplo si defines la variable contador dentro del loop por ejemplo.

jdelrio810

#include "ThingSpeak.h"
#include <ESP8266WiFi.h>
#include <SPI.h>
#include <EEPROM.h>

    char ssid[] = "Perla";    //  your network SSID (name)
    char pass[] = "38122618";   // your network password
    int status = WL_IDLE_STATUS;
    WiFiClient  client;
   
unsigned long myChannelNumber =341358;
const char * myWriteAPIKey = "K6XNVDEUE4N6ZUI4";
int sensor = 0;


int n = 4.0;


void setup() { 
WiFi.begin(ssid, pass);
ThingSpeak.begin(client);

}
void loop() {

int sensor = analogRead(A0);
float voltaje = ((sensor * 3.3) / 966.0 )*2;

int conta=conta;
conta++;
if (voltaje < n ){
  carga();
 }
ThingSpeak.writeField(myChannelNumber, 1, conta, myWriteAPIKey);
ESP.deepSleep(15*1000000,WAKE_RF_DEFAULT);
}
void carga(){
pinMode(14, OUTPUT);
digitalWrite(14, HIGH);
delay(60000);
return ;
}

surbyte

Edita según normas. Usa etiqueta </>

Qué es esto?

Code: [Select]
int conta=conta;
conta++;


Porque no defines a conta como global antes del setup asi

Code: [Select]
int conta = 0;

y luego incrementas según corresponda en el loop.

Code: [Select]
conta++;

jdelrio810

Ese es el exactamente el problema con la variable conta, Si ya lo hice lo coloque antes de setup como tu me indicas int conta =0;  y cuando el NodeMcu que esta programado con el ide de arduino se levanta depues de estar 15 segundos dormido pierde la informacion de conta y se vuelve 0.

jdelrio810

Ya descubri que en modo deep sleep el programa se reinicia entonces por eso toma los valores de inicio cuando cont era igual a cero..

No hay nada que hacer trate de programarlo para guarda los datos en la EEPROM pero no me funciona.

surbyte

Yo simplemente no logro que reinicie. Cuando lo hace todo lo que obtengo es basura.

NOTA: algun problema para editar los post anteriores?

Estoy probando esto.. sin resultados

Code: [Select]
void setup() {
  Serial.begin(115200);
  //Serial.setTimeout(2000);

  // Wait for serial to initialize.
  while(!Serial) { }
 
  Serial.println("inicializando.");

}

void loop() {

  Serial.println("Despierto x 10 seg.");
  delay(10000);
  Serial.println("Voy a deep sleep por 10 seg");
  ESP.deepSleep(10e6); // 10e6 es en microsegundos
}




jdelrio810

Depronto es porque tienes que configurar los baudios 115200, yo estoy utilizando nodeMcu lolin y me funciona correctamente

jdelrio810

Ya lo resolvi con la memoria EEPROM cuando están utilizando un nodeMcu en modo deepsleep y quieren llevar un contador al momento de despertar la unica forma de almacenar el dato en una variable es con el comando EEPROM.write(address,valor);.

Muchas gracias por las respuestas y los comentarios..

surbyte

No estoy de acuerdo con tu solución pero si para ti esta bien nada puedo decir.


Quote
Depronto es porque tienes que configurar los baudios 115200
Si ves la imagen del Terminate, leerás 115200 bps 8N1.
también active el modo debug y pude ver el comportamiento, como intenta reconectarse a WIFI, luego logré desactivar WIFI pero aún asi no restaura en mi caso.


Go Up