Go Down

Topic: Problème de variable étrange (Read 536 times) previous topic - next topic

Kouaaks

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 :
Code: [Select]
#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

infobarquee

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

Kouaaks

#2
Feb 02, 2013, 12:53 pm Last Edit: Feb 02, 2013, 12:59 pm by Kouaaks Reason: 1
Ah d'accord je vois, je pensais que ça marchait; merci!

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

infobarquee

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


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

void setup()
{
long temps = 0;
}

Jean-François

Un petit problème lors de l'édition de mon message depuis mon téléphone  :smiley-mr-green:

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);
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

fdufnews

#5
Feb 02, 2013, 03:19 pm Last Edit: Feb 02, 2013, 03:22 pm by fdufnews Reason: 1
Code: [Select]
long total_execution_LED = (micros() - temps) / 1000000;
les constantes en long doivent être déclarées comme telle
Code: [Select]
long total_execution_LED = (micros() - temps) / 1000000L;

Code: [Select]
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.
Code: [Select]
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);
    }

Go Up