Pages: [1]   Go Down
Author Topic: Soft SHT21 Libraries on Arduino Mega  (Read 1632 times)
0 Members and 1 Guest are viewing this topic.
London, UK
Offline Offline
Full Member
***
Karma: 4
Posts: 190
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi
I am using the following libraries and I am trying to get them working on an arduino mega
I am unsure how the pins would be mapped.

https://github.com/mrjonny2/PortsSHT21
The code worked on anything with an ATMega328
the code to use the library is;

Quote
#include <Wire.h>
#include <Ports.h>
#include <PortsSHT21.h>
#include <SHT2x.h>

//Define soft i2c channels for 3 sensors
  SHT21 hsensor2 (2); // pins A1 and D5 - Sensor 2
  SHT21 hsensor3 (3); // pins A2 and D6 - Sensor 3
  SHT21 hsensor4 (4); // pins A3 and D7 - Sensor 4

//define variables for temp data
  float h, t;
 

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

void loop()
{
   // Get data from first sensor hard I2C channel
    float hum1 = (SHT2x.GetHumidity());
    float temp1 = (SHT2x.GetTemperature());
    Serial.println("temp1");
    Serial.println(temp1);
 
  // Get data from second sensor soft I2C
  hsensor2.measure(SHT21::HUMI);
  hsensor2.measure(SHT21::TEMP);
  hsensor2.calculate(h, t);
    float hum2 = (h);
    float temp2 = (t);
    Serial.println("temp2");
    Serial.println(temp2);     
 
   // Get data from third sensor soft I2C
  hsensor3.measure(SHT21::HUMI);
  hsensor3.measure(SHT21::TEMP);
  hsensor3.calculate(h, t);
    float hum3 = (h);
    float temp3 = (t);
    Serial.println("temp3");
    Serial.println(temp3);     
     
     // Get data from fourth sensor soft I2C 
  hsensor4.measure(SHT21::HUMI);
  hsensor4.measure(SHT21::TEMP);
  hsensor4.calculate(h, t); 
    float hum4 = (h);
    float temp4 = (t);
    Serial.println("temp4");
    Serial.println(temp4);
    Serial.println("");
    Serial.println("");
    delay(500);
}
 
Logged

London, UK
Offline Offline
Full Member
***
Karma: 4
Posts: 190
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I have tried checking with an oscilloscope on the analogue pins when the sensor is plugged in and I don't seem to get anything as I normally would.

The hardware i2c channel works just fine on the mega, its the soft ones I am trying to use that don't seem to work
Logged

London, UK
Offline Offline
Full Member
***
Karma: 4
Posts: 190
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I found it!
I had one of those Eureka moment thingys!  smiley-mr-green

in the Ports.h file
change
Code:
    uint8_t portNum;

    inline uint8_t digiPin() const
        { return portNum ? portNum + 3 : 18; }
    inline uint8_t digiPin2() const
        { return portNum ? portNum + 13 : 19; }
    inline uint8_t anaPin() const
        { return portNum - 1; }

to

Code:
    uint8_t portNum;

    inline uint8_t digiPin() const
        { return portNum ? portNum + 3 : 18; }
    inline uint8_t digiPin2() const
        { return portNum ? portNum + 53 : 19; }
    inline uint8_t anaPin() const
        { return portNum + 53; }
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi, do you remember what exactly you changed with changing 13 in 53? I would like to operate two SHT21 on Mega2560 but on completely different ports (which are not used for shields). How should we be able to determine any other ports then A0, D5…?

Thank you very much   smiley-mr-green
Logged

London, UK
Offline Offline
Full Member
***
Karma: 4
Posts: 190
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The change to 53 was to change how the port numbers are calculated based on the offsets. 
Have a look at the lines

Code:
uint8_t portNum;

    inline uint8_t digiPin() const
        { return portNum ? portNum + 3 : 18; }
    inline uint8_t digiPin2() const
        { return portNum ? portNum + 53 : 19; }
    inline uint8_t anaPin() const
        { return portNum + 53; }

portNum is the value that you pass into the function so you can change the maths above to change your offsets
Logged

Pages: [1]   Go Up
Jump to: