Inserir dados apenas uma vez, como??

Olaa pessoa, estou com um projecto em Arduino que basicamente é uma Alarmistica com o Arduino Ethernet ou Wifi, ontem tem 3 sensores, DHT11 para Temperatura, Sensor AC e Sensor DC ambos para detectar falhar de energia no AC e Carga Baterias no DC, eu criei um codigo com um if, onde por exemplo se a Temperatura exceder os 23 graus ele faz um registo na Base de Dados Alarmes com a hora e data o ID do equipamento e a mensagem Temperatura Excessiva, isso depois é mostrado numa pagina onde se pode ver todos os alarmes dos varios arduinos, a minha questão é, como isto é um Loop ele está sempre a cada 50 segundos que é o Delay postar o alarme na BD, e o que eu quero é que depois de postar o alarme uma vez, enquanto a condição for a mesma, não voltar a postar, já tentei por Flag, e por Break mas não funcionou, não sei se por utilzar de forma errada, deixo o codigo abaixo caso possam ajudar.

Obrigado desde já companheiros.

void loop()
{

  unsigned char flag = 0;

 int umidade_medida = dht.getHumidity();
  // char umid[] = %umidade_medida ;
   int temperatura_medida = dht.getTemperature();
  // char temp[] = %temperatura_medida ;

  sprintf(query, INSERT_SQL,"49VLN01/URMS01", temperatura_medida, umidade_medida);
    // Initiate the query class instance
  MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
  // Execute the query
  cur_mem->execute(query);
  // Note: since there are no results, we do not need to read any data
  // Deleting the cursor also frees up memory used
  delete cur_mem;


//Regista Alarme com Temperatura acima de 23

  if (temperatura_medida > 23) {
  sprintf(query2, INSERT_SQL2,"49VLN01", "Temperatura Excessiva!!");
    // Initiate the query class instance
  MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
  // Execute the query
  cur_mem->execute(query2);
  // Note: since there are no results, we do not need to read any data
  // Deleting the cursor also frees up memory used
  delete cur_mem;
  
  
}

//Apaga registo de alarme se temperatura baixa dos 23
if (temperatura_medida < 23 ){
    
  sprintf(query3, DELETE_SQL,"49VLN01", "Temperatura Excessiva!!");
    // Initiate the query class instance
  MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
  // Execute the query
  cur_mem->execute(query3);
  // Note: since there are no results, we do not need to read any data
  // Deleting the cursor also frees up memory used
  delete cur_mem;
 
  
}


 

  
  

  delay(50000);
}

Desculpa perguntar, mas porque é que tu queres apagar o registo da base de dados que um alarme ocorreu??
O teu código tem uma parte em que está sempre a enviar dados sem condição alguma…

void loop()
{

  unsigned char flag = 0;

 int umidade_medida = dht.getHumidity();
  // char umid[] = %umidade_medida ;
   int temperatura_medida = dht.getTemperature();
  // char temp[] = %temperatura_medida ;

  sprintf(query, INSERT_SQL,"49VLN01/URMS01", temperatura_medida, umidade_medida);
    // Initiate the query class instance
  MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
  // Execute the query
  cur_mem->execute(query);
  // Note: since there are no results, we do not need to read any data
  // Deleting the cursor also frees up memory used
  delete cur_mem;


//Regista Alarme com Temperatura acima de 23
unsigned char acima = 0; 
unsigned char abaixo = 0; 
  if (temperatura_medida > 23 && acima == 0) {
  acima = 1; 
  abaixo = 0; 
  sprintf(query2, INSERT_SQL2,"49VLN01", "Temperatura Excessiva!!");
    // Initiate the query class instance
  MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
  // Execute the query
  cur_mem->execute(query2);
  // Note: since there are no results, we do not need to read any data
  // Deleting the cursor also frees up memory used
  delete cur_mem;
};

//Apaga registo de alarme se temperatura baixa dos 23
if (temperatura_medida < 23 && abaixo == 0){
  acima = 0; 
  abaixo = 1; 
  sprintf(query3, DELETE_SQL,"49VLN01", "Temperatura Excessiva!!");
    // Initiate the query class instance
  MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
  // Execute the query
  cur_mem->execute(query3);
  // Note: since there are no results, we do not need to read any data
  // Deleting the cursor also frees up memory used
  delete cur_mem;
  }
delay(50000);
}

Obrigado Bubulindo, esta feito. ja tinha tentado a Flag mas tinha aplicado mas no loop. muito obrigado

Só vi agora a tua pergunta acima do código, ele tem duas funções, alarmes e DataLogger por isso ele envia periodicamente os dados para outra BD a cada 10 segundos, e isso agora está me a causar outro problema, porque ao fim de 4/5 horas deixa de fazer o registo penso que fica bloqueado e isto é suposto trabalhar 24/7.

Quanto ao apagar já mudei isso, basicamente não sabia fazer de outra maneira

O que é que fica bloqueado? A base de dados?
O que podes fazer é iniciar um reset do arduino para limpar a memória.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.