Two Serial Devices Simultaneously (Arduino MEGA)

Hello all,

I am embarking on a rather ambitious project with Arduino. I am new to Arduino but I have decent experience with C++ in programming classes I took in school.

Basically what I am trying to do is use both the TSOP1838 IR Infrared Receiver and the One Wire Digital Temperature (DS18B20) at the same time to make a DIY digital thermostat (Arduino will turn a relay on/off for a fan to regulate temperature) and IR to receive remote control for lights in the room from an Apple remote. I borrowed heavily from other demos available online. Both work great separately, but when combined, wonky things happen.

I believe that this is due to both codes I am using making the IR receiver and digital temperature as serial devices on 3600?

Here are my two codes:

IR Code:

#include <IRremote.h>

int RECV_PIN = 22;

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 <- took this out, values were initially passed in HEX
    
        if(results.value==2011242612)
        {
        Serial.println("Center Button");
        }
        if(results.value==4294967295)
        {
          Serial.println("Down Button");
        }
    
    irrecv.resume(); // Receive the next value
  }
  
  
  
}

Temperature code:

#include <OneWire.h> 

int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2

//Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 2

void setup() 
{
 Serial.begin(9600);
}

void loop() 
{
 float temperature = getTemp();
 /*
 Serial.print(temperature);
 Serial.print(" C");
 Serial.println(" ");
 */
 float temperatureF=0;
 temperatureF=(temperature*(9/5)+32);
 Serial.println(" ");
 Serial.print(temperatureF);
 Serial.print(" F");
 Serial.println(" ");
 
 delay(5000); //just here to slow down the output so it is easier to read
 
}


float getTemp(){
 //returns the temperature from one DS18S20 in DEG Celsius

 byte data[12];
 byte addr[8];

 if ( !ds.search(addr)) {
   //no more sensors on chain, reset search
   ds.reset_search();
   return -1000;
 }

 if ( OneWire::crc8( addr, 7) != addr[7]) {
   Serial.println("CRC is not valid!");
   return -1000;
 }

 if ( addr[0] != 0x10 && addr[0] != 0x28) {
   Serial.print("Device is not recognized");
   return -1000;
 }

 ds.reset();
 ds.select(addr);
 ds.write(0x44,1); // start conversion, with parasite power on at the end

 byte present = ds.reset();
 ds.select(addr);  
 ds.write(0xBE); // Read Scratchpad

 
 for (int i = 0; i < 9; i++) { // we need 9 bytes
  data[i] = ds.read();
 }
 
 ds.reset_search();
 
 byte MSB = data[1];
 byte LSB = data[0];

 float tempRead = ((MSB << 8) | LSB); //using two's compliment
 float TemperatureSum = tempRead / 16;
 
 return TemperatureSum;
 
}

I really appreciate all of your help. I intend to make my project available online with as much documentation as I could give, so I promise I will give back!

Paul

I believe that this is due to both codes I am using making the IR receiver and digital temperature as serial devices on 3600?

Neither the IR receiver or the DS18B20 are serial devices, so that is not the problem.

Neither of the codes that you posted are causing you issues. The code you didn't post is. So, post that, and describe what "wonky" means.

Certainly if you keep the delay(5000) your IR receiver won't be very responsive.

There is supposed to be a 750 millisecond delay between requesting a temperature conversion and reading the results from the scratchpad.