Ajout d'une deuxième version de l'ads1115 basée sur une bibliothèque ayant une meilleur granularitée pour le paramétrage (et parceque j'ai coder ...)
This commit is contained in:
		
							parent
							
								
									688b912539
								
							
						
					
					
						commit
						2d17efd1dc
					
				
							
								
								
									
										134
									
								
								lib/MeasureUnit/Ads1115V2.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								lib/MeasureUnit/Ads1115V2.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,134 @@
 | 
				
			|||||||
 | 
					#include "Ads1115V2.h"
 | 
				
			||||||
 | 
					#define ADSV2_DEBUG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Ads1115V2::Ads1115V2() : ads1(ADS1115_ADDRESS_ADDR_GND), ads2(ADS1115_ADDRESS_ADDR_VDD)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  #ifdef ADSV2_DEBUG
 | 
				
			||||||
 | 
					  Serial.println("Ads1115 constructor called");
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Ads1115V2::~Ads1115V2()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Ads1115V2::begin()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  #ifdef ADSV2_DEBUG
 | 
				
			||||||
 | 
					  Serial.println("Ads1115V2 : begin");
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					  Wire.begin();
 | 
				
			||||||
 | 
					  //We set the adcs up:
 | 
				
			||||||
 | 
					  ads1.initialize();
 | 
				
			||||||
 | 
					  ads2.initialize();
 | 
				
			||||||
 | 
					  ads1.setMode(ADS1115_MODE_SINGLESHOT);
 | 
				
			||||||
 | 
					  ads2.setMode(ADS1115_MODE_SINGLESHOT);
 | 
				
			||||||
 | 
					  ads1.setRate(ADS1115_RATE_250);
 | 
				
			||||||
 | 
					  ads2.setRate(ADS1115_RATE_250);
 | 
				
			||||||
 | 
					  ads1.setGain(ADS1115_PGA_4P096);
 | 
				
			||||||
 | 
					  ads2.setGain(ADS1115_PGA_4P096);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					double Ads1115V2::getQuantum()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return 0.125;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					double Ads1115V2::sampleValue(int16_t channel, boolean sgl)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  double total(0);
 | 
				
			||||||
 | 
					  for(int i(0); i < getAdcSetting().getMeasureIteration(); i++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    delay(getAdcSetting().getDelayBetweenIteration());
 | 
				
			||||||
 | 
					    total += getReading(channel, sgl);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //We divide
 | 
				
			||||||
 | 
					  total /= (double)getAdcSetting().getMeasureIteration();
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  //We return
 | 
				
			||||||
 | 
					  return total;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					double Ads1115V2::sampleValue()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return sampleValue(-1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					double Ads1115V2::sampleVoltage(int16_t channel, boolean sgl)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return sampleValue(channel, sgl)*0.125;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					double Ads1115V2::sampleVoltage()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return sampleValue()*0.125;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint16_t Ads1115V2::getReading(int16_t channel, boolean sgl)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int16_t chan(channel == -1 ? _lastChannel : channel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  _lastChannel = chan > 8 ? 0 : chan;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if(chan < 4)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    ads1.setMultiplexer(chan+4);
 | 
				
			||||||
 | 
					    return ads1.getConversion(true);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else if(chan < 8)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    ads2.setMultiplexer(chan);
 | 
				
			||||||
 | 
					    return ads2.getConversion(true);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Async part
 | 
				
			||||||
 | 
					void Ads1115V2::startSample(int16_t channel, boolean sgl)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  switch(_state)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    case IDLING:
 | 
				
			||||||
 | 
					      _state = SAMPLING;
 | 
				
			||||||
 | 
					      _elapsedTime = millis();
 | 
				
			||||||
 | 
					      _sampledValue = 0.0;
 | 
				
			||||||
 | 
					      _numOfSamples = 0;
 | 
				
			||||||
 | 
					      //We set the last channel attribute
 | 
				
			||||||
 | 
					      if(channel != -1)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        _lastChannel = channel > 8 ? _lastChannel : channel;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					    case SAMPLING:
 | 
				
			||||||
 | 
					      //If enough time elapsed, we can sample a value again
 | 
				
			||||||
 | 
					      if(millis() - _elapsedTime > getAdcSetting().getDelayBetweenIteration())
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        _sampledValue += getReading(channel, sgl);
 | 
				
			||||||
 | 
					        _elapsedTime = millis();
 | 
				
			||||||
 | 
					        _numOfSamples ++;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      //All samples are done:
 | 
				
			||||||
 | 
					      if(_numOfSamples == getAdcSetting().getMeasureIteration())
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        _sampledValue /= (double)_numOfSamples;
 | 
				
			||||||
 | 
					        _sampledValue += channel > 3 ? 82.0 : 0.0;
 | 
				
			||||||
 | 
					        _state = RESULT_READY;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Ads1115V2::startSample()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  startSample(-1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					double Ads1115V2::getSampleVoltage()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return getSampleValue() * 0.125;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										31
									
								
								lib/MeasureUnit/Ads1115V2.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								lib/MeasureUnit/Ads1115V2.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					#ifndef ADS1115V2_H
 | 
				
			||||||
 | 
					#define ADS1115V2_H
 | 
				
			||||||
 | 
					#include "Adc.h"
 | 
				
			||||||
 | 
					#include <Wire.h>
 | 
				
			||||||
 | 
					#include <ADS1115x.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Ads1115V2 : public Adc
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  public:
 | 
				
			||||||
 | 
					    Ads1115V2();
 | 
				
			||||||
 | 
					    ~Ads1115V2();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void begin();
 | 
				
			||||||
 | 
					    virtual double getQuantum();
 | 
				
			||||||
 | 
					    virtual double sampleValue(int16_t channel, boolean sgl = true);
 | 
				
			||||||
 | 
					    virtual double sampleValue();
 | 
				
			||||||
 | 
					    virtual double sampleVoltage(int16_t channel, boolean sgl = true);
 | 
				
			||||||
 | 
					    virtual double sampleVoltage();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Async methods
 | 
				
			||||||
 | 
					    virtual void startSample(int16_t channel, boolean sgl = true);
 | 
				
			||||||
 | 
					    virtual void startSample();
 | 
				
			||||||
 | 
					    virtual double getSampleVoltage();
 | 
				
			||||||
 | 
					    //End of async methods
 | 
				
			||||||
 | 
					  protected:
 | 
				
			||||||
 | 
					  private:
 | 
				
			||||||
 | 
					    uint16_t getReading(int16_t channel = -1, boolean sgl = true);
 | 
				
			||||||
 | 
					    ADS1115 ads1, ads2;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif //ADS1115V2_H
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user