Go Down

Topic: Does i2cmaster work in Arduino Due? (Read 613 times) previous topic - next topic

Red_Rohan

I've been trying to make my IR thermometer work on my Arduino Due but it uses i2cmaster instead of the recommended(from what i heard) Wire library. Problem is there's no available sample code for this product that uses the Wire library instead and when i compile my code i get this error.


Quote
In file included from IR_Thermo.ino:1:0:
C:\Users\TOSHIBA\Desktop\arduino-1.6.5-r5-windows\arduino-1.6.5-r5\libraries\I2Cmaster/i2cmaster.h:88:20: fatal error: avr/io.h: No such file or directory
 #include <avr/io.h>
                    ^
compilation terminated.
Error compiling.
I've tried putting i2cmaster.h in the same folder and using

#include "i2cmaster.h"

which then shortens the error to:

Quote
In file included from IR_Thermo.ino:1:0:
i2cmaster.h:88:20: fatal error: avr/io.h: No such file or directory
 #include <avr/io.h>
                    ^
compilation terminated.
Error compiling.
which i still have no idea how to fix. Please help i'm new to this.


for reference this is the code i'm trying to make work

Code: [Select]

#include <i2cmaster.h>

void setup(){
  Serial.begin(9600);
  Serial.println("Setup...");
  
  i2c_init(); //Initialise the i2c bus
  PORTC = (1 << PORTC4) | (1 << PORTC5);//enable pullups
}

void loop(){
    int dev = 0x5A<<1;
    int data_low = 0;
    int data_high = 0;
    int pec = 0;
    
    i2c_start_wait(dev+I2C_WRITE);
    i2c_write(0x07);
    
    // read
    i2c_rep_start(dev+I2C_READ);
    data_low = i2c_readAck(); //Read 1 byte and then send ack
    data_high = i2c_readAck(); //Read 1 byte and then send ack
    pec = i2c_readNak();
    i2c_stop();
    
    //This converts high and low bytes together and processes temperature, MSB is a error bit and is ignored for temps
    double tempFactor = 0.02; // 0.02 degrees per LSB (measurement resolution of the MLX90614)
    double tempData = 0x0000; // zero out the data
    int frac; // data past the decimal point
    
    // This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte.
    tempData = (double)(((data_high & 0x007F) << 8) + data_low);
    tempData = (tempData * tempFactor)-0.01;
    
    float celcius = tempData - 273.15;
    float fahrenheit = (celcius*1.8) + 32;

    Serial.print("Celcius: ");
    Serial.println(celcius);

    Serial.print("Fahrenheit: ");
    Serial.println(fahrenheit);

    delay(1000); // wait a second before printing again
}

Go Up