Programmazione LED con Telecomando IR e problemi correnti

Buon giorno,
ho acquistato una scheda Arduino Mini Pro con ATMega328.
Ho iniziato a studiare un pò il linguaggio e per il mio primo progetto mi trovo un pò incasinato :confused: .
Allora vi spiego la situazione.

Sto lavorando su un modellino di un'automobile e voglio inserirvi al suo interno dei LED per le luci, e vorrei comandarli con un telecomando IR.
Sto studiando un pò di teoria e qualcosa sono riuscito già a fare ma avrei bisogno di 3 aiutini da parte vostra.

Ho acquistato tutto il necessario ( Controllore, Transistor, Batteria, LED, Resistenze,Cavi ecc..) e iniziato a scrivere il codice sul simulatore della Autodesk https://circuits.io/lab in modo da verificarne il funzionamento del codice che vi riporto sotto insieme al link del mio progetto arduino

Progetto Arduino : https://circuits.io/circuits/3242576-led-ir
Codice :

#include <IRremote.h>           
int RECV_PIN = 11;                
int ledINTERNI = 10;
int ledANABBANT = 9;
int ledFENDINEBBIA = 8;
int ledFRECCESX = 7;
int ledFRECCEDX = 6;
boolean ledState = LOW;   
IRrecv irrecv(RECV_PIN);      
decode_results results;        

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

}

void loop() {
if (irrecv.decode(&results)) {  
  Serial.println(results.value, HEX);
 
if(results.value == 0xFD00FF)
  {
           ledState = !ledState;            
           digitalWrite(ledINTERNI,ledState); 
       }
if(results.value == 0xFD08F7)
  {
           ledState = !ledState;            
           digitalWrite(ledANABBANT,ledState); 
       } 
if(results.value == 0xFD8877)
  {
           ledState = !ledState;            
           digitalWrite(ledFENDINEBBIA,ledState); 
       }
if(results.value == 0xFD48B7)
  {
           ledState = !ledState;            
           digitalWrite(ledFRECCESX,ledState);

  digitalWrite(ledFRECCESX,HIGH);
  delay(1000);
  digitalWrite(ledFRECCESX,LOW);
  delay(1000);
}
 if(results.value == 0xFD28D7)
  {
           ledState = !ledState;            
           digitalWrite(ledFRECCEDX,ledState);

  digitalWrite(ledFRECCEDX,HIGH);
  delay(1000);
  digitalWrite(ledFRECCEDX,LOW);
  delay(1000);
}

irrecv.resume();  
}
}

Ho posizionato tutti i componenti come li ho messi nel mio schema elettrico precedentemente preparato.
Ho cercato un pò su internet un codice di un progetto già avviato di un telecomando IR e, preso lo sketch, l'ho modificato adattandolo al mio caso e ho avviato il test. Per le luci fisse a parte quelle al PIN 10 non ho problemi, anche se non mi è molto chiaro il codice scelto per la compilazione del segnale IR.

Ho riscontrato però delle difficoltà per quanto riguarda le luci delle frecce (collegate al PIN 7) , dovendo queste funzionare ad intermittenza; ho provato ad inserire nel codice del comando inviato dal telecomando per le frecce a dirgli di farle accendere e spegnere ogni secondo, il problema è che lo fa una sola volta e poi una volta spente non si riaccendono (praticamente le frecce sebbene con funzione delay(1000) non vanno in loop (come invece fanno nella realtà in una macchina), ma dopo 1 secondo si spengono).
Per semplicità al momento ho creato solo le 2 luci freccia sinistra ( penso che per le dx il procedimento sia lo stesso e una volta creato basterà ricopiarlo per le frecce di DX)

Il tasto del telecomando per l'accensione delle frecce SX è il numero 3 nell'esempio.

  1. gentilmente qualcuno guardando il codice delle frecce SX mi può suggerire come modificare il codice affinchè una volta inviato il comando dal telecomando di accendersi queste continuino a lampeggiare con delay(1000) in continuazione fino a che non premo nuovamente il tasto 3?

  2. nel momento in cui premo il tasto 4 ( che invece è associtato al PIN 6 che alimenta il transistor per le frecce a DX ) vorrei avere 2 possibilità :

  • se sono accese solo le frecce di DX lampeggino come scritto sopra per le frecce di SX
  • mentre se insieme alle frecce di DX accendo anche le frecce di SX vorrei che entrambe si adattino ed inizino a lampeggiare sia quelle DX e sia quelle SX contemporaneamente (quindi come le 4 frecce in auto)
  1. sul PIN 10 ho collegato un transistor che alimenta 7 LED, sul mio foglio calcoli, dimensionalmente i valori delle resistenze che ho messo essere corretti per avere una corrente assorbita sugli stessi impostata a 10 mA (come potete vedere in questo estratto ); però avviando il simulatore (che però non mi fa scegliere la tensione dei LED) e premendo il tasto di accensione associato sul telecomando ( ossia il tasto ACCENSIONE del telecomando) il simulatore mi evidenzia che i LED si brucerebbero perchè passerebbe una corrente di 68.5 mA in ciascuno (ho alimentato il tutto nel simulatore con una power supply impostando la Tensione di 7.4 V che a batteria carica sarà anche di 8.4 V ma con il transistor non vi dovrebbe essere problema della tensione a monte perchè come riporto in questo estratto il transistor si preoccupa solo della parte a valle, giusto?

    )!!
    Ma come è possibile? Che ci sia qualcosa nel codice che gli faccia passare troppa corrente? Perchè ho notato che nel void setup () tra tutte le funzioni è stata inserita solo la pinMode(ledINTERNI,OUTPUT) che è appunto relativa ai LED che mi danno questo problema, mentre tutti gli altri LED, per esempio tipo quelli derivanti del PIN 9 ( sul tasto 1 del telecomando) se li avvio leggo sul power supply una corrente di 6.4 mA che non è possibile per 2 LED in parallelo, calcolati invece per funzionare ciascuno a 16 mA per un totale quindi di 32 mA!!!

Qualcuno mi riesce ad aiutare?

Ringrazio tutti in anticipo per l'aiuto che mi darete :slight_smile: :slight_smile:

Spero di essere stato chiaro il più possibile , anche se spiegarmi non era proprio semplicissimo.
Se vi servono altri chiarimenti chiedete pure xchè mi serve davvero il vostro aiuto :confused: :slight_smile:

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Prima di postare il codice ti consiglio anche di usare CTRL+T dentro all'IDE di Arduino che te lo sistema un pò.

Arduino usa delle MCU che non gesticono il multithread. Quando usi dei delay() blocchi la MCU
Quando vuoi accendere le frecce, devi solo attivare una variabile a 1 e poi fuori da queli if fare un controllo, se
la variabile è a 1 allora accendi e spegni il led ma.... non con dei delay, devi imparare ad usare millis.
Dovrai poi disattivare la variabile (la metti a 0) quando le frecce si devono spegnere. 2 frecce, 2 variabili "di stato" da mettere a 0 e 1 oppure una variabile 0=nulla 1=lampeggia dx 2=lampeggia sx 3=lampeggiano entrambe
Confronta l'esempio "Blink" con "Blink WithoutDelay" per la millis

Questa richiesta è veramente molto simile a questa

fabpolli:
Questa richiesta è veramente molto simile a questa

nid69ita:
2 frecce, 2 variabili "di stato" da mettere a 0 e 1

Ciao, non conosco il comando millis,ora vedo di capirci qualcosa e spero non sia troppo complesso :S
Non ho molto chiaro quando hai detto che se ho 2 frecce ho 2 variabili.. intendevi 2 gruppi di frecce? Ossia il gruppo frecce a DX e frecce a SX ?

nid69ita:
oppure una variabile 0=nulla 1=lampeggia dx 2=lampeggia sx 3=lampeggiano entrambe

Quindi in questo caso dovrei creare 4 variabili? Una per il nulla, una per il lampeggio a DX, una per lampeggio a SX e una per lampeggio di entrambe? ( ma in questo caso userei 4 tasti del telecomando??)
Fare tutto con solo 2 tasti del telecomando ossia dire "solo se entrambe le luci sono accese allineatevi in fase e accendetevi e spegnetevi tutte e 4 le luci (2 Dx e 2 SX) insieme"?

E per quanto riguarda il mio quesito 3? Ossia quella corrente che nel simulatore mi passa nei LED che invece ho dimensionato affinchè ne passino 10 mA e invece ne passano 68.5 mA?

E per quanto riguarda il mio quesito 3? Ossia quella corrente che nel simulatore mi passa nei LED che invece ho dimensionato affinchè ne passino 10 mA e invece ne passano 68.5 mA

Non so' come tu abbia calcolato quelle resistenze, ma il risultato non è corretto

R_led = V_batt - V_led / I_led
batteria 7.4V Vled = 3,2 Iled = 10ma
( 7.4 -3.2 ) / 0.010 = 420 Ohm

Gagge89:
Ciao, non conosco il comando millis,ora vedo di capirci qualcosa e spero non sia troppo complesso :S
Non ho molto chiaro quando hai detto che se ho 2 frecce ho 2 variabili.. intendevi 2 gruppi di frecce? Ossia il gruppo frecce a DX e frecce a SX ?

Non mi pare di aver detto quello. Dico 1 variabile che assume 4 valori, 0, 1 2 e 3.
"0=nulla 1=lampeggia dx 2=lampeggia sx 3=lampeggiano entrambe"
Quella variabile è quindi lo "stato" dei lampeggianti, lo stato cambia a seconda di cosa premi e a secondo dello stato devi usare millis e lampeggiare i led di conseguenza (o spegnerli in caso 0)

Brunello:
Non so' come tu abbia calcolato quelle resistenze, ma il risultato non è corretto

R_led = V_batt - V_led / I_led
batteria 7.4V Vled = 3,2 Iled = 10ma
( 7.4 -3.2 ) / 0.010 = 420 Ohm

Aspetta.. tra la batteria e i led io ho un transistor anche xchè senno il singolo pin di Arduino non ce la farebbe a dare in uscita correnti di 70-80 mA per LED in parallelo.. Quindi mettendo il transistor BC377 NPN, quando questo riceve una piccola tensione sulla base permette la conduzione (presa direttamente dalla batteria) ma per Kirkoff tensioni sono le seguenti : Vtra base ed emettitore è fissa a 0.6 V , la tensione del LED 3.2V e quindi
(5V - 0.6 - 3.2 ) / una corrente da me scelta di 10 mA = ottengo una R da 120 ohm.

Infatti su tutti gli altri LED il problema non si crea mentre sui primi 7 si... Non vorrei che fosse una coincidenza, ma è anche l'unico PIN che nel " void setup ()" viene riportato "pinMode(ledPin,OUTPUT)".. Ed essendo l'unico valore diverso dagli altri non vorrei che questo dia un passaggio maggiore di corrente.. Hai una spiegazione?

nid69ita:
Non mi pare di aver detto quello. Dico 1 variabile che assume 4 valori, 0, 1 2 e 3.
"0=nulla 1=lampeggia dx 2=lampeggia sx 3=lampeggiano entrambe"
Quella variabile è quindi lo "stato" dei lampeggianti, lo stato cambia a seconda di cosa premi e a secondo dello stato devi usare millis e lampeggiare i led di conseguenza (o spegnerli in caso 0)

Ah, quindi intendi che tutte le frecce le posso adattare su un solo tasto del telecomando ( quindi invece che 1 tasto per lato uno unico per tutte e 4) e a seconda che le premo 1 volta, 2 volte , 3 volte o 4 io avrei per esempio rispettivamente frecce alternate DX, frecce alternate SX, tutte e 4 le frecce e tutte spente?

Mica avevo guardato lo schema......
A parte che i Bjt funzionano in corrente e non in tensione, quindi "quando questo riceve una piccola tensione sulla base" non è corretto, ma ci siamo capiti lo stesso.
Tu vuoi che il Bjt funzioni da switch, mi spieghi perchè lo hai collegato in configurazione a Collettore comune ?
E' un NPN e se vuoi che funzioni da interruttore devi collegarlo come Emettitore Comune
In questo modo


L'ora è tarda e non ho proprio voglia di mettermi a spiegare perchè il modo con cui lo hai collegato non va bene , anche se i calcoli che hai fatto sono corretti per quel tipo di configurazione, ma non è adatta per il tipo di impiego. Non è che stai costruendo un amplificatore.
wikipedia.org/ Transistor_a_collettore_comune
wikipedia.org/ Transistor_a_emettitore_comune

Brunello:
Mica avevo guardato lo schema......
A parte che i Bjt funzionano in corrente e non in tensione, quindi "quando questo riceve una piccola tensione sulla base" non è corretto, ma ci siamo capiti lo stesso.
Tu vuoi che il Bjt funzioni da switch, mi spieghi perchè lo hai collegato in configurazione a Collettore comune ?
E' un NPN e se vuoi che funzioni da interruttore devi collegarlo come Emettitore Comune
In questo modo


L'ora è tarda e non ho proprio voglia di mettermi a spiegare perchè il modo con cui lo hai collegato non va bene , anche se i calcoli che hai fatto sono corretti per quel tipo di configurazione, ma non è adatta per il tipo di impiego. Non è che stai costruendo un amplificatore.
wikipedia.org/ Transistor_a_collettore_comune
wikipedia.org/ Transistor_a_emettitore_comune

Eh, ma così ci sarebbe un problema.. I LED con il tuo collegamento subirebbero la scarica della batteria quindi nn avrei mai un circuito a tensione fissa.. Xchè come li hai collegati tut avrei all'inizio una tensione di alimentazione a 8.4V e quindi dovrei dimensionare una R x i 8.4v ma dopo poco, quando la batteria inizia a scaricarsi, la tensione scenderebbe a 7.4, 6, 5 V e a quel punto non avrei più i valori di corrente voluti sui Led ma soprattutto non avrei più la tensione ke i led essendo diodi richiedono fissa (nel caso di quei 7 in questione essendo bianchi di 3.2v).
Mettendolo invece dopo emettitore avrei una maglia tra base,emettitore e led pilotata a 5v (uscenti dal pin di arduino ) e la corrente la prenderebbero direttamente dalla batteria senza sforzare il pin di arduino ke al passaggio di 80 mA salterebbe.

Avessi un'alimentazione fissa da casa ke mi desse sempre i 7.4v o una qualunque altra tensione la tua idea sarebbe corretta ma trattandosi di batteria avrei al passere del tempo una tensione di alimentazione variabile e sempre meno a partire dai 8.4 a carico a 5v (sotto i 5 arduino manco si avvierebbe sebbenenla batteria potrebbe scendere fino a 2.7 tensione in cui la batteria smetterebbe di funzionare x sempre)

Gagge89:
Ah, quindi intendi che tutte le frecce le posso adattare su un solo tasto del telecomando ( quindi invece che 1 tasto per lato uno unico per tutte e 4) e a seconda che le premo 1 volta, 2 volte , 3 volte o 4 io avrei per esempio rispettivamente frecce alternate DX, frecce alternate SX, tutte e 4 le frecce e tutte spente?

Neanche. quello ho scritto.
Ho scritto che tu puoi avere mi pare almeno 3 pulsanti, freccia sx, freccia dx, tutte e due e poi qualcosa che dice di spegnerle. Quelli sono i posti dove imposti la unica variabile a 1,2 o 3
Poi in un posto unico verifichi il valore della variabile e a seconda del numero 1,2,3 o 0 accendi/spegni i led di conseguenza.

Brunello:
Mica avevo guardato lo schema......
A parte che i Bjt funzionano in corrente e non in tensione, quindi "quando questo riceve una piccola tensione sulla base" non è corretto, ma ci siamo capiti lo stesso.
Tu vuoi che il Bjt funzioni da switch, mi spieghi perchè lo hai collegato in configurazione a Collettore comune ?
E' un NPN e se vuoi che funzioni da interruttore devi collegarlo come Emettitore Comune
In questo modo


L'ora è tarda e non ho proprio voglia di mettermi a spiegare perchè il modo con cui lo hai collegato non va bene , anche se i calcoli che hai fatto sono corretti per quel tipo di configurazione, ma non è adatta per il tipo di impiego. Non è che stai costruendo un amplificatore.
wikipedia.org/ Transistor_a_collettore_comune
wikipedia.org/ Transistor_a_emettitore_comune

Alla fine per verificare che il ragionamento fosse corretto ho provato con un simulatore di circuiti e ipotizzando chei 5V in base siano quelli dei PIN di Arduino ho collegato sul collettore la batteria una volta carica a 8.4V e una volta già un pò scarica a 7.4V ed infatti con il transistor non noto variazioni di corrente in quanto tutto il ramo dell'emettitore dipende solo tensione sulla base e le correnti mi tornano con quelle da me calcolate ( lì viene 13mA invece che 10mA xchè il programma vede la caduta base emettitore pari a 0.65V invece io avevo calcolato con i soliti 0.6V).
Il circuito quindi pensato è corretto, il problema quindi o sta programma di simulazione di arduino della Autodesk fallato oppure c'è un problema sul codice.
Vedi foto ( sotto negli allegati)

Dopo un pò di tentativi ho modificato il codice e mi sono accorto questo

  • se inserisco nel void setup () i vari pinMode , all'avvio della simulazione i LED mi si bruciano tutti quando premo sul telecomando x avviarli e su di loro passa una corrente NON UNIFORME ( su ogni LED passano valori di corrente scostanti 1 secondo prima passano 38 mA, un sec dopo sullo stesso LED passano 40mA ancora dopo magari 27mA in che con il transistor proprio NON HA SENSO! )
    Vedi foto ( sotto negli allegati)

  • se invece non inserisco i vari pinMode invece i led funzionano nel simulatore ma come si legge nel display del power supply la corrente totale da esso erogata è impossibile che sia 47 mA dato che solo per i 7 ledi in alto dovrebbe essere minimo 70 mA!
    Vedi foto ( sotto negli allegati)

E' possibile che Arduino spari al max la corrente sui suoi pin?
E' possibile che il simulatore sia fallato?
E' possibile che il transistor del simulatore sia fallato e non faccia il suo dovere?

Nel frattempo mi sto studiando la funzione millis()

Grazie in anticipo ragazzi

Perchè quoti tutto il testo di tutti? è uno spreco di spazio e inutile che rende il topic dispersivo, fai riferimento al nick è sufficiente

Allora ... ho un pò guardato la funzione Millis e sono riuscito a mettere giù questo seguendo l'esempio...
Solo che nell'esempio ( ho provato a farlo girare nel simulatore) il led lampeggia (vi posto il codice della prova con il solo LED isolato)

const int LED = 11;
int ledstate = LOW;

unsigned long previousMillis = 0;

const long interval = 500;
  
  void setup() {
  pinMode(LED,OUTPUT);
}
void loop(){
  unsigned long currentMillis = millis();
  
  if ( currentMillis - previousMillis >= interval)
  {
    previousMillis = currentMillis;
    
    if (ledstate == LOW){
      ledstate = HIGH;
    } else{
      ledstate = LOW;
    }
    digitalWrite(LED,ledstate);
  }
}

poi ho provato ad adattare il codice al mio caso e al momento in cui premo sul telecomando il tasto equivalente il led non blinka.... perchè??? :sob: :sob: HELP!
Codice :

#include <IRremote.h>
int RECV_PIN = 11;
int ledINTERNI = 10;
int ledANABBANT = 9;
int ledFENDINEBBIA = 8;
const int ledFRECCESX = 7;
int ledFRECCEDX = 6;
int ledState = LOW;   // stato base dei LED spento LOW ( = 0 V )
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long previousMillis = 0;
const long interval = 500;


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

void loop() {


  if (irrecv.decode(&results))
  {
    Serial.println(results.value, HEX);

    if (results.value == 0xFD00FF)
    {
      ledState = !ledState;    // inverti lo stato se acceso lo spegne, se è spento lo accende
      digitalWrite(ledINTERNI, ledState);
    }
    if (results.value == 0xFD08F7)
    {
      ledState = !ledState;      // inverti lo stato se acceso lo spegne, se è spento lo accende
      digitalWrite(ledANABBANT, ledState);
    }
    if (results.value == 0xFD8877)
    {
      ledState = !ledState;       // inverti lo stato se acceso lo spegne, se è spento lo accende
      digitalWrite(ledFENDINEBBIA, ledState);
    }
    if (results.value == 0xFD48B7)                     // far lampeggiare le FRECCE DI SINISTRA
    { unsigned long currentMillis = millis();
      if ( currentMillis - previousMillis >= interval)
      {
        previousMillis = currentMillis;

        if (ledState == LOW) {
          ledState = HIGH;
        } else {
          ledState = LOW;
        }
        digitalWrite(ledFRECCESX, ledState);
      }

    }
    irrecv.resume();
  }
}

Consiglio ... comunque lascia stare i simulatori, qualsiasi essi siano (il migliore, per Arduino, è quello della Vitronics) perché NON sono in grado di simulare veramente molte cose, tra cui, tutto ciò che è basato su millis() ...
... considera che il tempo di "simulazione" è anche migliaia di volte più lento del tempo che impiega Arduino il che fa saltare qualsiasi "reale" simulazione basata su millis().

Insomma, sono oggetti per imparare qualche cosa, ma le prove le DEVI necessariamente fare su un vero Arduino collegandoci l'hardware :wink:

Guglielmo

Hai qualche suggerimento sul codice comunque scritto da me? ti sembra completo abbastanza oppure presenta degli errori?

Gagge89:
poi ho provato ad adattare il codice al mio caso e al momento in cui premo sul telecomando il tasto equivalente il led non blinka.... perchè??? :sob: :sob: HELP!

Ma, io fare un pochettino in maniera diversa.
Come ti ho detto in precedenza, dentro la loop() scrivi due parti distinte, una prima che analizza il tasto e setta una o più variabili di stato ed eventualmente fa partire il contatore (memorizzi il millis a quel momento)
Poi con un secondo pezzo di programma analizzi la situazione delle variabili ed agisci.

void loop()
{ // analisi del tasto e accensione evento settando variabile di stato
  if (irrecv.decode(&results))
  { 
    Serial.println(results.value, HEX);
    switch(results.value)
    { case 0xFD00FF:  
        stato=1; // 1=inverti ledINTERNI
        break;
      case 0xFD08F7:
        stato=2:   //2=accendi ledFENDINEBBIA
        break;
      case 0xFD48B7: 
        stato=3;  //3=lampeggiante
        previousMillis = millis();
    } // fine switch
    irrecv.resume();
  } // fine if
  // analisi variabile di stato e azione
  if(stato==1)
  { digitalWrite(ledINTERNI, ! digitalRead(ledINTERNI));
  }
  if(stato==2)
  { digitalWrite(ledFENDINEBBIA, ! digitalRead(ledFENDINEBBIA));
  }
  if(stato==3)
  { unsigned long currentMillis = millis();
    if ( currentMillis - previousMillis >= interval)
    { previousMillis = currentMillis;
      if (ledState == LOW) 
      { ledState = HIGH;
      } 
      else 
      { ledState = LOW;
      }
      digitalWrite(ledFRECCESX, ledState);
    }
  } // fine if stato 3
}

Non l'ho provato.
Nel tuo codice ci sono un pò di problemi.

  1. principalmente devi capire che quando premi un tasto del telecomando arriva solo per un istante quel comando, quindi DEVI memorizzare la cosa. Nel ciclo millis ad esempio mentre lampeggia, non arriva più il tasto dal telecomando. Se lampeggia è perchè hai premuto il tasto sul telecomando, ma magari lo hai fatto 1 h prima e poi non hai più premuto null'altro. Nel tuo codice se poi dove gira la millis lo trasformi in ciclo while peggiori perchè diventa una specie di ciclo delay quasi bloccante.
  2. una variabile sola ledstato che usi un pò per tutto. cercare di usare poche variabili è buona cosa, ma devono essere in numero adeguato per gestire e memorizzare tutte le informazioni.

Ma, io fare un pochettino in maniera diversa.
Come ti ho detto in precedenza, dentro la loop() scrivi due parti distinte, una prima che analizza il tasto e setta una o più variabili di stato ed eventualmente fa partire il contatore (memorizzi il millis a quel momento)
Poi con un secondo pezzo di programma analizzi la situazione delle variabili ed agisci.

Uhm... però così ( se non erro) praticamente avrei una scelta, ossia o tengo acceso i LED INTERNI oppure i FENDINEBBIA oppure faccio lampeggiare i LEDFRECCE.
Invece il mio scopo è isolare ogni LED dagli altri in modo che se io voglio posso tenere acceso,

LED INTERNI (fissi non lampeggianti)
LED FENDINEBBIA (fissi non lampeggianti)
LED ANABBAGLIANTI ANTERIORI (fissi non lampeggianti)
LED POSIZIONI (fissi non lampeggianti)
e solo i LED FRECCE (e solo questi ultimi che lampeggino)

ma tutti alimentati contemporaneamente (come una vera macchina (che può avere le luci dentro accese, gli abbaglianti gli anabbaglianti, i fendinebbia e mettere le frecce, tutti fissi contemporaneamente tranne le frecce che lampeggino ( lampeggino in un modo preciso
con un tasto lampeggino le frecce a sinistra
con un altro quelle a destra
e con un terzo tasto tutti e 4 le frecce)

Inoltre ho provato ad usare il codice ma mi da il seguente errore sugli stato=1 , stato=2 e stato=3

"error: 'stato' was not declared in this scope "

Ho scritto "non l'ho provato" e aggiungo, ti ho solo scritto la loop. Dai suggerimenti precedenti mi pareva chiaro tu dovessi creare e dichiarare una variabile stato di tipo numerica (int).
Le variabili di stato possono essere più di una, ognuna che controlla più cose. Vuoi fare tutto il programma in un colpo solo ? Forse è meglio se impari un pezzetto alla volta. Se non hai esperienza di programmazione con questo tipo di logica, è difficile mettere tutto insieme al primo colpo. :wink:

nid69ita:
Ho scritto "non l'ho provato" e aggiungo, ti ho solo scritto la loop. Dai suggerimenti precedenti mi pareva chiaro tu dovessi creare e dichiarare una variabile stato di tipo numerica (int).
Le variabili di stato possono essere più di una, ognuna che controlla più cose. Vuoi fare tutto il programma in un colpo solo ? Forse è meglio se impari un pezzetto alla volta. Se non hai esperienza di programmazione con questo tipo di logica, è difficile mettere tutto insieme al primo colpo. :wink:

Ma non capisco... cioè al posto di "stato" dovrei metterci "LED FENDINEBBIA", "LED INTERNI" ,ecc??
Non capisco la cosa della creazioni di variabili.
Praticamente hai inserito le variabili all'interno dell' if , ma non ho capito perchè non le hai inserite come solito fare prima del void setup ()

Magari andiamo per gradi ok? Così passo passo vediamo cosa dobbiamo buttare giù.
Stasera partiamo con la presentazione delle variabili di partenza ok? (ragioniamo come se ci fosse 1 solo led per pin , perchè poi tanto a pilotarli ci metterei dei transistor e quindi ragioniamo come se ci fossero LED singoli che così sarebbe più semplice e sbrigativo scrivere e parlarci) (ho spostato anche i PIN rispetto ai casi precedenti quindi praticamente ripartiamo come da zero però inizio ad avere un pò di confunsione :slight_smile: )

#include <IRremote.h>                 // carico la libreria per gli infrarossi
int RECV_PIN = 12;                       // assegno al PIN 12 un LED infrarosso
int ledINTERNI = 11;                     // al 11 i LED INTERNI 
int ledANABBANT = 10;                 // al 10 LED ANABBAGLIANTI ANTERIORI
int ledFENDINEBBIA = 9;               // al 9 LED FENDINEBBIA
int ledFRECCESX = 8;                   // al 8 LED FRECCE DI SINISTRA
int ledFRECCEDX = 7;                   // al 7 LED FRECCE DI DESTRA
int ledPOSIZIONITARGA = 6;         // al 6 ho LED POSIZIONI ANTERIORI, POSTERIORI E LUCI TARGA
int ledTACOAUTORADIO = 5;         // al 5 ho LED TACHIMETRO e AUTORADIO
int ledSTRISCEBLU = 4;               // al 4 ho LED STRISCE BLU LUMINOSE
int SUONOMOTORE = 3;               // al 3 collego un piccolo modulo MP3 che all'avviamento delle luci riproduca un solo suono caricato nella microSD che sarebbe il rumore del motore
int BLUETOOTH = 2;                   // al 2 do solo il consenso di alimentare un modulo Bluetooth che parlerà con il cellulare per l'invio di canzoni (da riprodurre sull'altoparlante che posizionerò nel bagagliaio il cui circuito elettrico ho già preparato)
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long previousMillis = 0;
const long interval = 500;

Come variabili vanno bene?