Problème de variable étrange

Salut tous le monde,

alors voilà, l’IDE de arduino m’indique une erreur quand je compile, il dit que ma variable n’est pas déclarée alors que si.

Voici le code :

#include <IRremote.h>

int RECV_PIN = 2;
int LED = 8;

int signal_recu=0;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  pinMode(LED,OUTPUT);
  Serial.begin(9600);
  irrecv.enableIRIn();
}

void loop()
{
  if (irrecv.decode(&results))
  {
    signal_recu = results.value;
    Serial.println(signal_recu);
    
    if (signal_recu == -23971)
    {
      long temps = micros();
      
      digitalWrite(LED,HIGH);
    }
    else if (signal_recu == -7651)
    {
      long total_execution_LED = (micros() - temps) / 1000000;
      
      digitalWrite(LED,LOW);
      
      Serial.println(total_execution_LED,DEC);
    }
    
    
    irrecv.resume();
  }
}

Le compilateur bug ici : long total_execution_LED = (micros() - temps) / 1000000;
il dit que la variable temps n’est pas déclaré, alors que si.

Qu’est ce qui se passe ? Ai-je fait quelque chose de travers ? Merci

bonjour,
normal
déclare ta variable au début :wink:
et dans ton loop, vire "long" temps

Ah d'accord je vois, je pensais que ça marchait; merci!

EDIT: infobarquee -> Oui je viens juste de m'en apercevoir, merci :wink:

réfléchis 2secondes :wink:
tu remets à zero ta variable dans la loop à chaque fois.

PS : bug du forum on dirait, jean francois avait répondu

void setup()
{
long temps = 0;
}

Un petit problème lors de l'édition de mon message depuis mon téléphone :grin:

Je disais que lors de la déclaration, ça ne marchais pas de faire un calcul pour déclarer une variable.

Il faut déclarer une valeur fixe, puis ensuite changer la valeur de la variable dans la boucle en faisant val=(le calcul);

long total_execution_LED = (micros() - temps) / 1000000;

les constantes en long doivent être déclarées comme telle

long total_execution_LED = (micros() - temps) / 1000000L;
if (signal_recu == -23971)
    {
      long temps = micros();
      
      digitalWrite(LED,HIGH);
    }
    else if (signal_recu == -7651)
    {
      long total_execution_LED = (micros() - temps) / 1000000;
      
      digitalWrite(LED,LOW);
      
      Serial.println(total_execution_LED,DEC);
    }

Une variable n'est vue que dans le bloc où elle est déclarée. Si tu veux l'utiliser dans les 2 branches du if il faut la déclarer avant le if.

 long temps
if (signal_recu == -23971)
    {
      temps = micros();
      
      digitalWrite(LED,HIGH);
    }
    else if (signal_recu == -7651)
    {
      long total_execution_LED = (micros() - temps) / 1000000;
      
      digitalWrite(LED,LOW);
      
      Serial.println(total_execution_LED,DEC);
    }