I have made a lot of progress and almost everything works fine ... except I initially used strings in switch case for setting up the voltage reference and conversion modes ... it did not like it at all. I instead aimed to use enums for the same purpose but I'm getting this error now:
Arduino: 1.8.8 (Windows 10), Board: "Arduino Nano, ATmega328P (Old Bootloader)"
In file included from sketch\LibraryExample1.ino.cpp:1:0:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:81:18: error: expected identifier before numeric constant
#define INTERNAL 3
^
C:\Users\OM222O\Documents\Arduino\libraries\ADS1219/ADS1219.h:49:3: note: in expansion of macro 'INTERNAL'
INTERNAL = VREF_INTERNAL,
^
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:81:18: error: expected '}' before numeric constant
#define INTERNAL 3
^
C:\Users\OM222O\Documents\Arduino\libraries\ADS1219/ADS1219.h:49:3: note: in expansion of macro 'INTERNAL'
INTERNAL = VREF_INTERNAL,
^
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:81:18: error: expected unqualified-id before numeric constant
#define INTERNAL 3
^
C:\Users\OM222O\Documents\Arduino\libraries\ADS1219/ADS1219.h:49:3: note: in expansion of macro 'INTERNAL'
INTERNAL = VREF_INTERNAL,
^
In file included from C:\Users\OM222O\Desktop\LibraryExample1\LibraryExample1.ino:2:0:
C:\Users\OM222O\Documents\Arduino\libraries\ADS1219/ADS1219.h:51:1: error: expected declaration before '}' token
}adsRef_t;
^
exit status 1
Error compiling for board Arduino Nano.
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
my ADS1219.h file is:
#ifndef ADS1219_H
#define ADS1219_H
#if (ARDUINO >=100)
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include <Wire.h>
#define CONFIG_REGISTER_ADDRESS 0x20
#define STATUS_REGISTER_ADDRESS 0x24
#define MUX_MASK 0x1F
#define MUX_DIFF_0_1 0x00
#define MUX_DIFF_2_3 0x20
#define MUX_DIFF_1_2 0x40
#define MUX_SINGLE_0 0x60
#define MUX_SINGLE_1 0x80
#define MUX_SINGLE_2 0xA0
#define MUX_SINGLE_3 0xC0
#define MUX_SHORTED 0xE0
#define GAIN_MASK 0xEF
#define GAIN_ONE 0x00
#define GAIN_FOUR 0x10
#define DATA_RATE_MASK 0xF3
#define DATA_RATE_20 0x00
#define DATA_RATE_90 0x04
#define DATA_RATE_330 0x08
#define DATA_RATE_1000 0x0c
#define MODE_MASK 0xFD
#define MODE_SINGLE_SHOT 0x00
#define MODE_CONTINUOUS 0x02
#define VREF_MASK 0xFE
#define VREF_INTERNAL 0x00
#define VREF_EXTERNAL 0x01
typedef enum{
ONE = GAIN_ONE,
FOUR = GAIN_FOUR
}adsGain_t;
typedef enum{
INTERNAL = VREF_INTERNAL,
EXTERNAL = VREF_EXTERNAL
}adsRef_t;
typedef enum{
SINGLE_SHOT = MODE_SINGLE_SHOT,
CONTINUOUS = MODE_CONTINUOUS
}adsMode_t;
class ADS1219 {
protected:
uint8_t address;
public:
// Constructor
ADS1219(int drdy, uint8_t addr = 0x40);
// Methods
void begin();
void resetConfig();
long readSingleEnded(int channel);
long readDifferential_0_1();
long readDifferential_2_3();
long readDifferential_1_2();
long readShorted();
void setGain(adsGain_t gain);
void setDataRate(int rate);
void setConversionMode(adsMode_t mode);
void setVoltageReference(adsRef_t vref);
private:
void writeRegister(uint8_t data);
uint8_t readRegister(uint8_t reg);
long readConversionResult();
uint8_t config;
int data_ready;
};
#endif
and my cpp file is:
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include <Wire.h>
#include "ADS1219.h"
static uint8_t i2cRead(void) {
#if ARDUINO >= 100
return Wire.read();
#else
return Wire.receive();
#endif
}
static void i2cWrite(uint8_t x) {
#if ARDUINO >= 100
Wire.write(x);
#else
Wire.send(x);
#endif
}
ADS1219::ADS1219(int drdy, uint8_t addr) {
data_ready = drdy;
address = addr;
config = 0x00;
}
void ADS1219::begin() {
Wire.begin();
}
uint8_t ADS1219::readRegister(uint8_t reg){
Wire.beginTransmission(address);
i2cWrite(reg);
Wire.endTransmission();
Wire.requestFrom((uint8_t)address,(uint8_t)1);
return i2cRead();
}
void ADS1219::writeRegister(uint8_t data){
Wire.beginTransmission(address);
i2cWrite(CONFIG_REGISTER_ADDRESS);
i2cWrite(data);
Wire.endTransmission();
}
long ADS1219::readConversionResult(){
Wire.beginTransmission(address);
i2cWrite(0x10);
Wire.endTransmission();
Wire.requestFrom((uint8_t)address,(uint8_t)3);
byte dataMSB = i2cRead();
byte data = i2cRead();
byte dataLSB = i2cRead();
long data32 = dataMSB;
data32 <<= 8;
data32 |= data;
data32 <<= 8;
data32 |= dataLSB;
return (data32 << 8) >> 8;
}
void ADS1219::resetConfig(){
writeRegister(0x00);
}
long ADS1219::readSingleEnded(int channel){
if (channel > 3) return 0;
config &= MUX_MASK;
switch (channel){
case (0):
config |= MUX_SINGLE_0;
break;
case (1):
config |= MUX_SINGLE_1;
break;
case (2):
config |= MUX_SINGLE_2;
break;
case (3):
config |= MUX_SINGLE_3;
break;
default:
break;
}
writeRegister(config);
while(digitalRead(data_ready)==1);
return readConversionResult();
}
long ADS1219::readDifferential_0_1(){
config &= MUX_MASK;
config |= MUX_DIFF_0_1;
writeRegister(config);
while(digitalRead(data_ready)==1);
return readConversionResult();
}
long ADS1219::readDifferential_2_3(){
config &= MUX_MASK;
config |= MUX_DIFF_2_3;
writeRegister(config);
while(digitalRead(data_ready)==1);
return readConversionResult();
}
long ADS1219::readDifferential_1_2(){
config &= MUX_MASK;
config |= MUX_DIFF_1_2;
writeRegister(config);
while(digitalRead(data_ready)==1);
return readConversionResult();
}
long ADS1219::readShorted(){
config &= MUX_MASK;
config |= MUX_SHORTED;
writeRegister(config);
while(digitalRead(data_ready)==1);
return readConversionResult();
}
void ADS1219::setGain(adsGain_t gain){
config &= GAIN_MASK;
config |= gain;
writeRegister(config);
}
void ADS1219::setDataRate(int rate){
config &= DATA_RATE_MASK;
switch (rate){
case (20):
config |= DATA_RATE_20;
break;
case (90):
config |= DATA_RATE_90;
break;
case (330):
config |= DATA_RATE_330;
break;
case (1000):
config |= DATA_RATE_1000;
break;
default:
break;
}
writeRegister(config);
}
void ADS1219::setConversionMode(adsMode_t mode){
config &= MODE_MASK;
config |= mode;
writeRegister(config);
}
void ADS1219::setVoltageReference(adsRef_t vref){
config &= VREF_MASK;
config |= vref;
writeRegister(config);
}
it seems to be passing Gain (or maybe hasn't compiled that yet) but failing on the reference selection ... I don't know what I should change in order to fix the issue.
Edit: I'm really hoping it's not another naming convention thing ... if it is, I'm sorry but C++ seems to waaaaayyyy too picky about names in general
#include
without specifying which file to include? In the sketch aads ADS1219;
is enough. Github is full of arduino libraries, you can find many examples there, for example: github.com/Locoduino/SlowMotionServo/tree/master/src and github.com/winlinvip/SimpleDHT (just two random chosen libraries, there must be hundreds of them).