Trasmettitore e ricevitore IR

Salve a tutti!

All'università sto facendo un progetto che implica l'utilizzo di Arduino e sono alle prime armi :sob:
Avrei bisogno di sapere se è possibile mettere un trasmettitore e un ricevitore IR sulla stessa scheda Arduino (sto usando Arduino Uno), in quanto ho bisogno di elaborare i dati ricevuti che quelli trasmessi nello stesso momento.
Il professore ci ha detto che è possibile e ci ha detto semplicemente di accodare il codice del ricevitore a quello del trasmettitore nel loop, solo che non funziona. Sul monitor seriale, mi appare solo il trasmettitore.
Se dovessi invece separare i codici mettendoli su sketch diversi mi funzionano, quindi non saprei proprio.
Ho provato pure con altro codice ancora, che vi riporto qui in basso. Spero mi possiate essere d'aiuto! Grazie mille in anticipo :slight_smile:

#include <IRremote.h>

// INFRAROSSI
int RECV_PIN = 11;
IRsend irsend;
IRrecv irrecv(RECV_PIN);
decode_results res;

// HARDWARE
int buttonPin = 5;
int ledPin = 9;
int buttonPin2 = 6;
int ledPin2 = 10;

void setup()
{
 pinMode(buttonPin,INPUT_PULLUP);
 pinMode(ledPin,OUTPUT);
 pinMode(buttonPin2,INPUT_PULLUP);
 pinMode(ledPin2,OUTPUT);
 Serial.begin(9600);
 Serial.println("Enabling IRin");
 irrecv.enableIRIn(); // Start the receiver
 Serial.println("Enabled IRin");
 int buttonState = digitalRead(buttonPin);
 Serial.println(buttonState);
 int buttonState2 = digitalRead(buttonPin2);
 Serial.println(buttonState2);
}

void translateIR()
{
  int sensorValue = 0;
  int sensorValue2 = 0;
  sensorValue = digitalRead(ledPin);
  sensorValue2 = digitalRead(ledPin2);
  Serial.println(sensorValue);
  Serial.println(sensorValue2);
  
  switch(res.value)
  {
  case 0xFF30CF:
    if (sensorValue == 0)
    {    
      Serial.println("Received FF30CF"); 
      digitalWrite(ledPin, HIGH); 
      break;
    }
    if (res.value == 1)
    {
      Serial.println("Received 0"); 
      digitalWrite(ledPin, LOW); 
      break;
    }
        
    case 0xFF18E7:
    if (sensorValue2 == 0)
    {    
      Serial.println("Received FF30CF"); 
      digitalWrite(ledPin2, HIGH); 
      break;
    }
    if (sensorValue2 == 1)
    {
      Serial.println("Received 0"); 
      digitalWrite(ledPin2, LOW); 
      break;
    }
  }
}

void loop()
{
  digitalWrite(ledPin,LOW);
  digitalWrite(ledPin2,LOW);
  Serial.println("button2");
  Serial.println(digitalRead(buttonPin2));
  Serial.println("button1");
  Serial.println(digitalRead(buttonPin));

  // INIZIO TRASMISSIONE
  if(digitalRead(buttonPin2) == LOW)
  {
    digitalWrite(ledPin2, HIGH);
    irsend.sendNEC(0xFF18E7, 32);
    Serial.println("inviato FF18E7");
    delay(1000); 
  }
  
  else if (digitalRead(buttonPin) == LOW)
  {
    digitalWrite(ledPin, HIGH);
    irsend.sendNEC(0xFF30CF, 32);
    Serial.println("inviato FF30CF");
    delay(1000);
  }
    
  else
  {
    digitalWrite(ledPin, LOW);
    digitalWrite(ledPin2, LOW);
    irsend.sendNEC(0x0,32);
    Serial.println("inviato 0");
    delay(1000);
  }
  
  // FINE TRASMISSIONE

  if (irrecv.decode(&res))
  {
    translateIR();
    Serial.println(res.value,HEX);
    irrecv.resume();
    delay(1000);
  }
}

Ti appare solo i trasmettitore, perchè il ricevitore non riceve niente: con i segnali IR tu trasmetti una serie di bit in un lasso di tempo, che dura pochi millisecondi, con lo sketch che hai fatto , quando il ricevitore inizia a ricevere il trasmettitore ha già finito di trasmettere, questo perchè hai messo il codice del trasmettitore prima di quello del ricevitore e l'hai separato con un delay di 1 secondo.
Devi fare al contrario: metti prima il codice del ricevitore, poi quello del trasmettitore e non mettere nessun delay tra l'uno e l'altro, se vuoi leggere bene i valori mettilo o all'inizio o alla fine.

Grazie mille!! Provo subito!!
Ma il codice in caso è corretto?

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