arduino2/ads1115/Ads1115_UNO/Ads1115_UNO.ino
2020-11-06 13:17:55 +01:00

176 lines
4.2 KiB
C++

//#define DEBUG
/*
* <s> Buffer wird mit vier mal ADCread single gefüllt
* <vx> Gain wird mit x gesetzt
*
*/
#include <Wire.h>
#include <Adafruit_ADS1015.h>
// Descomentar el que interese
// ads.setGain(GAIN_TWOTHIRDS); +/- 6.144V 1 bit = 0.1875mV (default)
// ads.setGain(GAIN_ONE); +/- 4.096V 1 bit = 0.125mV
// ads.setGain(GAIN_TWO); +/- 2.048V 1 bit = 0.0625mV
// ads.setGain(GAIN_FOUR); +/- 1.024V 1 bit = 0.03125mV
// ads.setGain(GAIN_EIGHT); +/- 0.512V 1 bit = 0.015625mV
// ads.setGain(GAIN_SIXTEEN); +/- 0.256V 1 bit = 0.0078125mV
Adafruit_ADS1115 ads;
float multiplier = 0.1875F;
int aktgain = 0;
union dual{
char charBuff[14];
int intBuff[7];
};
dual myData;
byte RxCmd [4] = {0,0,0,0};
const int buttonPin = 2; // select the input pin for the potentiometer
int ValueA0 = 0; // variable to store the value coming from the sensor
int buttonState = 0;
int count = 0;
boolean now =false;
unsigned long times=0;
void setup(void)
{
pinMode(buttonPin, INPUT);
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
ads.begin();
}
void readCounter(){
if (buttonState == HIGH) {
if (now==false){
if (times ==0){
times = millis();
count += +1;
#ifdef DEBUG
Serial.println(count);
#endif
} else {
unsigned long delta;
delta = millis() -times;
if (delta >1000){
count += +1;
#ifdef DEBUG
Serial.println(count);
#endif
}
}
now=true;
}
//digitalWrite(ledPin, LOW);
} else {
// turn LED off:
now= false;
times = 0;
//digitalWrite(ledPin, HIGH);
}
}
void readADCinBuffer(){
myData.intBuff[0] = ads.readADC_SingleEnded(0);
myData.intBuff[1] = ads.readADC_SingleEnded(1);
myData.intBuff[2] = ads.readADC_SingleEnded(2);
myData.intBuff[3] = ads.readADC_SingleEnded(3);
myData.intBuff[4] = count;
myData.intBuff[5] = aktgain;
myData.intBuff[6] = ValueA0;
}
void setgain(char i){
switch (i){
case '1' : ads.setGain(GAIN_ONE);
multiplier = 0.125F;
aktgain = 1;
break;
case '2' : ads.setGain(GAIN_TWO);
multiplier = 0.0625F;
aktgain = 2;
break;
case '3' : ads.setGain(GAIN_FOUR);
multiplier = 0.03125F;
aktgain = 3;
break;
case '4' : ads.setGain(GAIN_EIGHT);
multiplier = 0.015625F;
aktgain = 4;
break;
case '5' : ads.setGain(GAIN_SIXTEEN);
multiplier = 0.0078125F;
aktgain = 5;
break;
default :
ads.setGain(GAIN_TWOTHIRDS);
multiplier = 0.1875F;
aktgain = 0;
}
#ifdef DEBUG
Serial.print("multiplier ");
Serial.println( multiplier);
#endif
}
#ifdef DEBUG
void readADC(){
int16_t adc0, adc1, adc2, adc3;
adc0 = ads.readADC_SingleEnded(0);
adc1 = ads.readADC_SingleEnded(1);
adc2 = ads.readADC_SingleEnded(2);
adc3 = ads.readADC_SingleEnded(3);
Serial.print("AIN0: "); Serial.println(adc0 * multiplier);
Serial.print("AIN1: "); Serial.println(adc1 * multiplier);
Serial.print("AIN2: "); Serial.println(adc2 * multiplier);
Serial.print("AIN3: "); Serial.println(adc3 * multiplier);
Serial.println(multiplier);
}
#endif
void loop(void)
{
#ifdef DEBUG
readADC();
#endif
for (int i = 0 ; i < 4 ; i++) {
RxCmd[i] = 0;
}
char inc;
readADCinBuffer();
buttonState = digitalRead(buttonPin);
ValueA0 = analogRead(A0);
readCounter();
if (Serial.available() > 0) {
delay(2);
RxCmd[0] = Serial.read();
if (RxCmd[0] == '<') {
int i =1;
while(Serial.available()) {
delay(1);
RxCmd[i] = Serial.read();
//if (RxCmd[i]>127 || i>7) break; //Communication error
if (RxCmd[i]== '>') {
break; //Read all data
}
i++;
}
}
}
if ( RxCmd[1] == 's' ){
Serial.write(myData.charBuff,14);
}
if (RxCmd[1] == 'v'){
setgain((int)RxCmd[2]);
//Serial.println( aktgain );
}
}