errore di compilazione

Ho acquistato da poco Arduino e sto cerco di esercitarmi con la programmazione( premetto che ho poca conoscenza del linguaggio c++)e conoscere Arduino e tutto quello che si può fare.
Volevo utilizzare un telecomando per comandare l’accensione di alcuni led, ho ottenuto i codici e ho stilato il seguente sketch , quando faccio la verifica ottengo errore nella compilazione. C’è qualcuno che può aiutare a capire dove sbaglio. Grazie Giuseppe.

#include<IRremote.h>
#include<IRremoteInt.h>

int RECV_PIN=11;    // pin 11 riceve i dati output
int statoLed=0;           // variabile di stato del led
IRrecv irrecv(RECV_PIN);
void setup()
{
 pinMode (2,OUTPUT);
 pinMode (3,OUTPUT);
 pinMode (4,OUTPUT);
 Serial.begin (9600);                                                    // settiamo il serial monitor
irrecv.enableIRIn();                                           //  avviamo il ricevitore
}
void cambiaStato (int ledPin)
{
 statoLed=digitalRead (ledPin);               // legge lo stato del led se acceso o spento,quindi..
 if (statoLed==HIGH)                                  // se il led è acceso
     digitalWrite(ledPin,Low);                     //  allora lo spengo
 else                                                             // altrimenti
     digitalWrite (ledPin,HIGH);                 // lo accendo
}
void loop()
{
if (ricevitoreIR.decode(&segnaleRicevuto))           // ricevuto un segnale
{
 ricevitoreIR.resume();                                              // ricevitore pronto per ricevere un nuovo segnale
 switch (segnalericevuto.value)
{
  case0x603;                                     // sono i valori associati nel mio caso al tasto 1 del tele..
                                                                                    preceduti sempre da 0x
 Serial.println ("hai premuto il tasto 1");    // il led associato al tasto 1 si accende o spegne
 }
 case0x627;
  Serial.println ("hai premuto il tasto 2"); 
 }
  case0x629;
    Serial.println ("hai premuto il tasto 3");
}
 digitalWrite(ledPin,Low);                     //  allora lo spengo

Low should be LOW

if (ricevitoreIR.decode(&segnaleRicevuto))           // ricevuto un segnale

The IR receiver is named irrecv not ricevitoreIR
segnaleRicevuto is not declared in the program. Before setup() you need

decode_results segnaleRicevuto;
ricevitoreIR.resume();

As above, wrong name
It should be

irrecv.resume();
 switch (segnalericevuto.value)

As above, wrong name
It should be

 switch (segnaleRicevuto.value)
 case0x603;                                     // sono i valori associati nel mio caso al tasto 1 del tele..

Needs a space and a colon

 case 0x603:                                     // sono i valori associati nel mio caso al tasto 1 del tele..
                                                                                    preceduti sempre da 0x

Should be a comment

                                                                                    //preceduti sempre da 0x

The switch/case section is in a mess because it has no break; commands in it and braces in the wrong places. Here is a version of the program with the errors above corrected

#include<IRremote.h>
#include<IRremoteInt.h>

int RECV_PIN = 11;  // pin 11 riceve i dati output
int statoLed = 0;         // variabile di stato del led
IRrecv irrecv(RECV_PIN);

decode_results segnaleRicevuto;


void setup()
{
  pinMode (2, OUTPUT);
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
  Serial.begin (9600);                                                    // settiamo il serial monitor
  irrecv.enableIRIn();                                           //  avviamo il ricevitore
}
void cambiaStato (int ledPin)
{
  statoLed = digitalRead (ledPin);             // legge lo stato del led se acceso o spento,quindi..
  if (statoLed == HIGH)                                // se il led è acceso
    digitalWrite(ledPin, LOW);                    //  allora lo spengo
  else                                                             // altrimenti
    digitalWrite (ledPin, HIGH);                // lo accendo
}
void loop()
{
  if (irrecv.decode(&segnaleRicevuto))           // ricevuto un segnale
  {
    irrecv.resume();                                              // ricevitore pronto per ricevere un nuovo segnale
    switch (segnaleRicevuto.value)
    {
      case 0x603:                                     // sono i valori associati nel mio caso al tasto 1 del tele..
        //preceduti sempre da 0x
        Serial.println ("hai premuto il tasto 1");    // il led associato al tasto 1 si accende o spegne
        break;
      case 0x627:
        Serial.println ("hai premuto il tasto 2");
        break;

      case 0x629:
        Serial.println ("hai premuto il tasto 3");
        break;
    }
  }
}

It will still not compile using IDE version 1.5.6 because of a problem with the IRremote library. See https://github.com/shirriff/Arduino-IRremote/issues/98

This thread would be better placed in the Italian section of the forum.

ho installato il software 1.6 forse è quello il problema con IRremote.h? Grazie

giuseppe47: ho installato il software 1.6 forse è quello il problema con IRremote.h? Grazie

Prima di tutto, si. L'IDE ha nelle librerie base la cartella Robot_IrRemote. Per me, eliminala. Secondo, se il compilatore ti da degli errori, è MOOOLTO utile che tu li posti, altrimenti come facciamo a sapere dove ti da errore ? Terzo, @UKHeli ti ha segnalato una marea di tuoi errori di battituta. Il C è sensibile alle maiuscole/minuscole, esempio devi scrivere LOW e non Low

Grazie infinite per le correzione,sono gli errori dei principianti, ora cercherò di elimimare IRremote dalla libreria con la speranza di riuscire. Ancora Grazie grazie grazie.

giuseppe47: Grazie infinite per le correzione,sono gli errori dei principianti, ora cercherò di elimimare IRremote dalla libreria con la speranza di riuscire. Ancora Grazie grazie grazie.

Prego, prego, prego :D

carissimi UKHeli e nidi69 ho fatto tutte le correzioni ed ho eliminato Robot Irremote ma continuo ad avere errore . Allora ho rimosso il software 1.6 ed ho installato 1.0.6 . Ma il problema sussiste.Questa è la compilazione corretta (spero).Ditemi che altra cavolata ho fatto? Grazie

#include<IRremote.h>
#include<IRremoteInt.h>

int RECV_PIN = 11;    // pin 11 riceve i dati output
int statoLed = 0;           // variabile di stato del led
IRrecv irrecv(RECV_PIN);

decode_results segnaleRicevuto;


void setup()
{
 pinMode (2, OUTPUT);
 pinMode (3, OUTPUT);
 pinMode (4, OUTPUT);
 Serial.begin (9600);    // settiamo il serial monitor
                        //  avviamo il ricevitore
}
void cambiaStato (int ledPin)
{
 statoLed = digitalRead (ledPin);         // legge lo stato del led se acceso o spento,quindi..
 if ( statoLed == HIGH )         // se il led è acceso
     digitalWrite(ledPin, LOW);                     //  allora lo spengo
 else                                                             // altrimenti
     digitalWrite (ledPin, HIGH);      // lo accendo
     
}
void loop()
{
if (irrecv.decode(&segnaleRicevuto))           // ricevuto un segnale
{
 irrecv.resume();                         // ricevitore pronto per ricevere un nuovo segnale
 switch (segnaleRicevuto.value)
{
  case 0x603:                            // sono i valori associati nel mio caso al tasto 1 del tele
                                                                                    
 Serial.println ("hai premuto il tasto 1");    // il led associato al tasto 1 si accende o spegne
 
 break;
 }
 case 0x627:
  Serial.println ("hai premuto il tasto 2"); 
 
 break;
 }
  case 0x629:
    Serial.println ("hai premuto il tasto 3");
    break;
  }
 }
}

Usa ctrl+t nell’IDE, così viene indentato in automatico.
E così scoprirai che hai messo le graffe male.

Il codice ricorda di metterlo sempre nei tag code (sezione 7 del regolamento)

#include <IRremote.h>

const int RECV_PIN = 11;    // pin 11 riceve i dati output
int statoLed = 0;           // variabile di stato del led
IRrecv irrecv(RECV_PIN);

decode_results segnaleRicevuto;

void setup()
{ pinMode (2, OUTPUT);
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
  Serial.begin (9600);    // settiamo il serial monitor
}

void cambiaStato (int ledPin)
{ statoLed = digitalRead (ledPin);         // legge lo stato del led se acceso o spento,quindi..
  if ( statoLed == HIGH )         // se il led è acceso
    digitalWrite(ledPin, LOW);                     //  allora lo spengo
  else                                                             // altrimenti
    digitalWrite (ledPin, HIGH);      // lo accendo
}

void loop()
{ if (irrecv.decode(&segnaleRicevuto))           // ricevuto un segnale
  { irrecv.resume();                         // ricevitore pronto per ricevere un nuovo segnale
    switch (segnaleRicevuto.value)
    { case 0x603:                            // sono i valori associati nel mio caso al tasto 1 del tele
        Serial.println ("hai premuto il tasto 1");    // il led associato al tasto 1 si accende o spegne
        break;
      case 0x627:
        Serial.println ("hai premuto il tasto 2");
        break;
      case 0x629:
        Serial.println ("hai premuto il tasto 3");
        break;
    }
  }
}

Igor hai tanta pazienza per aiutarmi , grazie , per ultima volta ho corretto tutte le parentesi ho ricontrollato con ctrl-t risulta formattazione giusta. ma quando cerco di fare verifica mi da errore :

IR recv:IRrecv(int) IR recv:decode(decode_resuts) IR recv :resume()

Questa è l'ultima volta che chiedo aiuto , dopo di che lascio perdere il telecomando.

Posta gli errori esatti, quel che dice il compilatore ci aiuta a capire che vuole ;D

Io non ho capito... comungue Per una mia verifica ho caricato IRrecvDemo e IRrecvDump li ho lasciati cosi come sono ed entrambi ottengo errore.C'è qualcosa che non va nel mio software o sono io che non ho capito una mazza? Grazie

giuseppe47: Io non ho capito... comungue Per una mia verifica ho caricato IRrecvDemo e IRrecvDump li ho lasciati cosi come sono ed entrambi ottengo errore.C'è qualcosa che non va nel mio software o sono io che non ho capito una mazza? Grazie

Se il compilatore ti da degli errori, li copi e incolli nel tuo post, così li vediamo. Hai eliminato la cartella Robot_IrRemote ?

si l’ho rimosso , ora allego file

IRrecvDump_infr.ino (1.27 KB)

si l'ho rimosso , ora allego file

Ok si il file c'è, ciò che è fondamentale manca, cioè gli errori visualizzati in basso nell'IDE.

Senza messaggi di errore siamo tutti all'oscuro, tranne i veggenti.

Ciao.

spero che ora si vedono gli errori

IRrecvDemo.ino (560 Bytes)

giuseppe47 c'è profonda incomprensione in questa corrispondenza, per tutti noi gli errori del compilatore sono qualcosa di simile a:

main.c: In function 'main':
main.c:180:5: error: expected ';' before 'return'
main.c:181:1: warning: control reaches end of non-void function [-Wreturn-type]
make: Leaving directory `/home/maurilio/Sviluppo/ccodetest/acmotortriac'
make: *** [main.o] Error 1

Questo è un errore reale, provocato di proposito rimuovendo il ; a fine riga. Ora se il tuo IDE emette un errore simile, copialo con CTRL+C (o come sei abituato) e incollalo nel tuo post (non allegare file).

Ciao.

Mauro non so cosa sia successo comunque i due esempi di IRrecvDemo e IRrecvDump quando lo compilo ottengo errore cosi :
(CODE TAGS PLEASE!)

/*
 * IRremote: IRrecvDump - dump details of IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 * JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post)
 * LG added by Darryl Smith (based on the JVC protocol)
 */

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
// void * to work around compiler issue
//void dump(void *v) {
//  decode_results *results = (decode_results *)v
void dump(decode_results *results) {
  int count = results->rawlen;
  if (results->decode_type == UNKNOWN) {
    Serial.print("Unknown encoding: ");
  } 
  else if (results->decode_type == NEC) {
    Serial.print("Decoded NEC: ");
  } 
  else if (results->decode_type == SONY) {
    Serial.print("Decoded SONY: ");
  } 
  else if (results->decode_type == RC5) {
    Serial.print("Decoded RC5: ");
  } 
  else if (results->decode_type == RC6) {
    Serial.print("Decoded RC6: ");
  }
  else if (results->decode_type == PANASONIC) {	
    Serial.print("Decoded PANASONIC - Address: ");
    Serial.print(results->panasonicAddress,HEX);
    Serial.print(" Value: ");
  }
  else if (results->decode_type == LG) {
     Serial.print("Decoded LG: ");
  }
  else if (results->decode_type == JVC) {
     Serial.print("Decoded JVC: ");
  }
  Serial.print(results->value, HEX);
  Serial.print(" (");
  Serial.print(results->bits, DEC);
  Serial.println(" bits)");
  Serial.print("Raw (");
  Serial.print(count, DEC);
  Serial.print("): ");

  for (int i = 0; i < count; i++) {
    if ((i % 2) == 1) {
      Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
    } 
    else {
      Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
    }
    Serial.print(" ");
  }
  Serial.println("");
}


void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    dump(&results);
    irrecv.resume(); // Receive the next value
  }
}
  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
IRrecvDump.cpp.o: In function `__static_initialization_and_destruction_0':

C:\Program Files\Arduino/IRrecvDump.ino:15: undefined reference to `IRrecv::IRrecv(int)'

IRrecvDump.cpp.o: In function `loop':

C:\Program Files\Arduino/IRrecvDump.ino:80: undefined reference to `IRrecv::decode(decode_results*)'

C:\Program Files\Arduino/IRrecvDump.ino:83: undefined reference to `IRrecv::resume()'

IRrecvDump.cpp.o: In function `setup':

C:\Program Files\Arduino/IRrecvDump.ino:22: undefined reference to `IRrecv::enableIRIn()'



/*
 * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}
  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
IRrecvDemo.cpp.o: In function `__static_initialization_and_destruction_0':

C:\Program Files\Arduino/IRrecvDemo.ino:13: undefined reference to `IRrecv::IRrecv(int)'

IRrecvDemo.cpp.o: In function `loop':

C:\Program Files\Arduino/IRrecvDemo.ino:24: undefined reference to `IRrecv::decode(decode_results*)'

C:\Program Files\Arduino/IRrecvDemo.ino:26: undefined reference to `IRrecv::resume()'

IRrecvDemo.cpp.o: In function `setup':

C:\Program Files\Arduino/IRrecvDemo.ino:20: undefined reference to `IRrecv::enableIRIn()'

Spero che mi illumini con il tuo sapere e lo stesso succede con questo schizzo :

  #include <IRremote.h>
  #include <IRremoteInt.h>


  int RECV_PIN = 11;    // pin 11 riceve i dati output
  int statoLed = 0;           // variabile di stato del led
  IRrecv irrecv(RECV_PIN);

  decode_results segnaleRicevuto;


 void setup()

{  
   pinMode (2, OUTPUT);
   pinMode (3, OUTPUT);
   pinMode (4, OUTPUT);
    Serial.begin (9600);    // settiamo il serial monitor
  //  avviamo il ricevitore
}
 void cambiaStato (int ledPin)

{ 
   statoLed = digitalRead (ledPin);         // legge lo stato del led se acceso o spento,quindi..
   if ( statoLed == HIGH )         // se il led è acceso
    digitalWrite(ledPin, LOW);                     //  allora lo spengo
    else                                                             // altrimenti
    digitalWrite (ledPin, HIGH);      // lo accendo

}
  void loop()

{ 
    if (irrecv.decode(&segnaleRicevuto))           // ricevuto un segnale

  {  
    irrecv.resume();                         // ricevitore pronto per ricevere un nuovo segnale
    switch (segnaleRicevuto.value)

    { 
    case 0x603:                            // sono i valori associati nel mio caso al tasto 1 del tele

      Serial.println ("hai premuto il tasto 1");    // il led associato al tasto 1 si accende o spegne

      break;

    case 0x627:
      Serial.println ("hai premuto il tasto 2"); 

      break;

    case 0x629:
      Serial.println ("hai premuto il tasto 3");
      break;
    }
  }
}

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
sketch_feb08acomandoled.cpp.o: In function `__static_initialization_and_destruction_0':

C:\Program Files\Arduino/sketch_feb08acomandoled.ino:7: undefined reference to `IRrecv::IRrecv(int)'

sketch_feb08acomandoled.cpp.o: In function `loop':

C:\Program Files\Arduino/sketch_feb08acomandoled.ino:34: undefined reference to `IRrecv::decode(decode_results*)'

C:\Program Files\Arduino/sketch_feb08acomandoled.ino:37: undefined reference to `IRrecv::resume()'

Spero di non essere scocciante ma mi devi perdonare sono alle prime armi Grazie infinite
Giuseppe

Da dove hai scaricato la libreria ? Io da qui, https://github.com/shirriff/Arduino-IRremote e non avevo LG tra i vari telecomandi.

Allora, ora ho scaricato l'ultima versione della libreria al link di cui sopra. Mi pare usi anche tu quella. Probabilmente NON hai aggiunto la libreria nella maniera corretta. 1.Devi scaricare dal link il file zip (pulsante download zip a destra) 2.Poi dallo zip estrai tutto mantenendo la struttura delle cartelle/sottocartelle. 3.La cartella si chiama Arduino-IRremote-master, non va bene, devi rinominarla in IRremote. 4.questa cartella la devi mettere dove hai i tuoi progetti/sketch ma nella sottocartella LIBRARIES. ad esempio io li ho in: G:\Arduino_projects\LIBRARIES\IRremote

Esiste una cartella delle librerie che vengono fornite con l'IDE. Nel mio PC: G:\Arduino\arduino-1.0\libraries E' possibile che tra le varie librerie qui dentro ci sia la cartella RobotIRremote, se c'e' la puoi eliminare.

Grazie infinite finalmente ho risolto , mi consolo che questo problema lo hanno avuto molti altri. :grinning: :grinning: :grinning: