Serial Wombat Arduino Library
SerialWombatAnalogInput.h
Go to the documentation of this file.
1 #pragma once
2 /*
3 Copyright 2020-2023 Broadwell Consulting Inc.
4 
5 "Serial Wombat" is a registered trademark of Broadwell Consulting Inc. in
6 the United States. See SerialWombat.com for usage guidance.
7 
8 Permission is hereby granted, free of charge, to any person obtaining a
9  * copy of this software and associated documentation files (the "Software"),
10  * to deal in the Software without restriction, including without limitation
11  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12  * and/or sell copies of the Software, and to permit persons to whom the
13  * Software is furnished to do so, subject to the following conditions:
14 
15 The above copyright notice and this permission notice shall be included in
16  * all copies or substantial portions of the Software.
17 
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
22  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
23  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24  * OTHER DEALINGS IN THE SOFTWARE.
25 */
26 
27 
28 #include <stdint.h>
29 #include "SerialWombat.h"
30 
41 };
42 
81 {
82 public:
89 
90 
91 
92 
93 
105  int16_t begin(uint8_t pin, uint16_t averageSamples = 64, uint16_t filterConstant = 0xFF80, AnalogInputPublicDataOutput output = AnalogInputPublicDataOutput::AnalogInputPublicDataOutput_Raw)
106  {
107  _pin = pin;
109  uint8_t tx[] = { 200,_pin,PIN_MODE_ANALOGINPUT,0,0,0,0,0 };
110  int16_t result = _sw.sendPacket(tx);
111  if (result < 0) { return result; }
112  uint8_t tx1[] = { 201,_pin,PIN_MODE_ANALOGINPUT,SW_LE16(averageSamples) ,SW_LE16(filterConstant),(uint8_t)output };
113  return _sw.sendPacket(tx1);
114  }
115 
116 
125  uint16_t readVoltage_mV()
126  {
127  uint16_t reading = _sw.readPublicData(_pin);
128  uint32_t x = ((uint32_t) reading ) * _sw._supplyVoltagemV;
129  uint16_t returnval = x >> 16;
130  return (returnval);
131  }
132 
148  uint16_t readCounts()
149  {
150  return (_sw.readPublicData(_pin));
151  }
152 
161  uint16_t readFiltered_mV()
162  {
163  uint32_t x = readFilteredCounts(); // Counts ranging from 0 to 65535
164  x *= _sw._supplyVoltagemV;
165  return ((uint16_t)(x >> 16));
166  }
167 
178  {
179  uint8_t tx[] = { 204,_pin,PIN_MODE_ANALOGINPUT,0x55,0x55,0x55,0x55,0x55 };
180  uint8_t rx[8];
181 
182  _sw.sendPacket(tx, rx, true, 3,1);
183 
184  return(rx[5] + rx[6] * 256);
185  }
186 
195  uint16_t readAveraged_mV()
196  {
197  uint32_t x = readAveragedCounts(); // Counts ranging from 0 to 65535
198  x *= _sw._supplyVoltagemV;
199  return ((uint16_t)(x >> 16));
200  }
201 
216  {
217  uint8_t tx[] = { 204,_pin,PIN_MODE_ANALOGINPUT,0x55,0x55,0x55,0x55,0x55 };
218  uint8_t rx[8];
219  _sw.sendPacket(tx, rx,true,3,1);
220  return(rx[3] + rx[4] * 256);
221  }
222 
225  {
226  return _sw.readSupplyVoltage_mV();
227  }
228 
229 
239  uint16_t readMaximum_mV(bool resetAfterRead = false)
240  {
241  uint8_t tx[] = { 203,_pin,PIN_MODE_ANALOGINPUT,0,0x55,0x55,0x55,0x55 };
242  uint8_t rx[8];
243  if (resetAfterRead)
244  {
245  tx[3] = 1;
246  }
247  _sw.sendPacket(tx, rx);
248  return(rx[5] + rx[6] * 256);
249  }
250 
251 
257 
261  uint16_t readMaximumCounts(bool resetAfterRead = false)
262  {
263  uint8_t tx[] = { 203,_pin,PIN_MODE_ANALOGINPUT,0,0x55,0x55,0x55,0x55 };
264  uint8_t rx[8];
265  if (resetAfterRead)
266  {
267  tx[3] = 1;
268  }
269  _sw.sendPacket(tx, rx);
270  return(rx[5] + rx[6] * 256);
271  }
272 
278 
282  uint16_t readMinimum_mV(bool resetAfterRead = false)
283  {
284  uint32_t x = readMaximumCounts(resetAfterRead); // Counts ranging from 0 to 65535
285  x *= _sw._supplyVoltagemV;
286  return ((uint16_t)(x >> 16));
287  }
288 
289 
299  uint16_t readMinimumCounts(bool resetAfterRead = false)
300  {
301  uint8_t tx[] = { 203,_pin,PIN_MODE_ANALOGINPUT,0,0x55,0x55,0x55,0x55 };
302  uint8_t rx[8];
303  if (resetAfterRead)
304  {
305  tx[3] = 1;
306  }
307  _sw.sendPacket(tx, rx);
308  return(rx[3] + rx[4] * 256);
309  }
310 
311 
312 private:
313 
314 };
315 
318 {
319 public:
320 
322 
323  uint8_t pin() { return _pin; }
324  uint8_t swPinModeNumber() { return _pinMode; }
325 };
326 
SerialWombatAnalogInput::readVoltage_mV
uint16_t readVoltage_mV()
Retreive a raw A/D measurement and convert it to mV.
Definition: SerialWombatAnalogInput.h:125
SerialWombatAnalogInput_18AB::SerialWombatAnalogInput_18AB
SerialWombatAnalogInput_18AB(SerialWombatChip &serialWombat)
Definition: SerialWombatAnalogInput.h:321
SerialWombatChip
Class for a Serial Wombat chip. Each Serial Wombat chip on a project should have its own instance.
Definition: SerialWombat.h:283
SerialWombatAnalogInput_18AB::swPinModeNumber
uint8_t swPinModeNumber()
Used for ineheritance.
Definition: SerialWombatAnalogInput.h:324
SerialWombatAnalogInput::readFilteredCounts
uint16_t readFilteredCounts()
Retreive a filtered A/D measurement.
Definition: SerialWombatAnalogInput.h:177
PIN_MODE_ANALOGINPUT
@ PIN_MODE_ANALOGINPUT
(2)
Definition: SerialWombat.h:244
AnalogInputPublicDataOutput::AnalogInputPublicDataOutput_Filtered
@ AnalogInputPublicDataOutput_Filtered
The Filtered A/D reading is displayed as public data (default)
AnalogInputPublicDataOutput
AnalogInputPublicDataOutput
Definition: SerialWombatAnalogInput.h:35
AnalogInputPublicDataOutput::AnalogInputPublicDataOutput_Maximum
@ AnalogInputPublicDataOutput_Maximum
The Maximum A/D reading is displayed as public data (default)
SerialWombatAnalogInput::begin
int16_t begin(uint8_t pin, uint16_t averageSamples=64, uint16_t filterConstant=0xFF80, AnalogInputPublicDataOutput output=AnalogInputPublicDataOutput::AnalogInputPublicDataOutput_Raw)
Initialize an analog input on a given pin.
Definition: SerialWombatAnalogInput.h:105
SerialWombatAnalogInput_18AB
This class extends SerialWombatAnalogInput with SW18AB specific capabilities.
Definition: SerialWombatAnalogInput.h:317
SerialWombatAnalogInput::updateSupplyVoltage_mV
uint16_t updateSupplyVoltage_mV()
Provides a wrapper around the readSupplyVoltage_mV() method for the SerialWombat chip hosting this pi...
Definition: SerialWombatAnalogInput.h:224
SerialWombatPin::_sw
SerialWombatChip & _sw
Definition: SerialWombatPin.h:134
SerialWombatAnalogInput
A class to make analog measurements with the Serial Wombat.
Definition: SerialWombatAnalogInput.h:80
AnalogInputPublicDataOutput::AnalogInputPublicDataOutput_Averaged
@ AnalogInputPublicDataOutput_Averaged
The Averaged A/D reading is displayed as public data (default)
SerialWombatChip::readSupplyVoltage_mV
uint16_t readSupplyVoltage_mV(void)
Measure the Serial Wombat chip's Supply voltage.
Definition: SerialWombat.h:703
SerialWombatChip::_supplyVoltagemV
uint16_t _supplyVoltagemV
Definition: SerialWombat.h:304
SerialWombatAnalogInput::readAveraged_mV
uint16_t readAveraged_mV()
Retreive an averaged A/D measurement and convert it to mV.
Definition: SerialWombatAnalogInput.h:195
SerialWombatAnalogInput_18AB::pin
uint8_t pin()
Used for inheritance.
Definition: SerialWombatAnalogInput.h:323
SerialWombatAnalogInput::readAveragedCounts
uint16_t readAveragedCounts()
Retreive an averaged A/D measurement.
Definition: SerialWombatAnalogInput.h:215
SerialWombat.h
SerialWombatAnalogInput::SerialWombatAnalogInput
SerialWombatAnalogInput(SerialWombatChip &SerialWombatChip)
Constructor for the SerialWombatAnalogInput class.
Definition: SerialWombatAnalogInput.h:88
SerialWombatAnalogInput::readMinimum_mV
uint16_t readMinimum_mV(bool resetAfterRead=false)
Definition: SerialWombatAnalogInput.h:282
SerialWombatChip::readPublicData
uint16_t readPublicData(uint8_t pin)
Read the 16 Bit public data associated with a Serial Wombat Pin Mode.
Definition: SerialWombat.h:658
SerialWombatPin
Describes a Serial Wombat Pin. Is base class for other pin modes.
Definition: SerialWombatPin.h:38
SerialWombatPin::_pinMode
uint8_t _pinMode
Definition: SerialWombatPin.h:135
SerialWombatChip::sendPacket
int sendPacket(uint8_t tx[], uint8_t rx[])
Send an 8 byte packet to the Serial Wombat chip and wait for 8 bytes back.
Definition: SerialWombat.cpp:114
SerialWombatAnalogInput::readMinimumCounts
uint16_t readMinimumCounts(bool resetAfterRead=false)
Retreive the maximum single sample A/D value in counts.
Definition: SerialWombatAnalogInput.h:299
AnalogInputPublicDataOutput::AnalogInputPublicDataOutput_Raw
@ AnalogInputPublicDataOutput_Raw
The raw A/D reading is displayed as public data (default)
SerialWombatPin::pin
uint8_t pin()
Returns the current SW pin number. Used primarily for virtual calls by derived classes.
Definition: SerialWombatPin.h:121
SerialWombatAnalogInput::readMaximumCounts
uint16_t readMaximumCounts(bool resetAfterRead=false)
Definition: SerialWombatAnalogInput.h:261
SerialWombatAbstractProcessedInput
SerialWombatAnalogInput, SerialWombatPulseTimer, SerialWombatResistanceInput and others inherit from ...
Definition: SerialWombatAbstractProcessedInput.h:79
SerialWombatPin::_pin
uint8_t _pin
Definition: SerialWombatPin.h:133
AnalogInputPublicDataOutput::AnalogInputPublicDataOutput_Minimum
@ AnalogInputPublicDataOutput_Minimum
The Minimum A/D reading is displayed as public data (default)
SW_LE16
#define SW_LE16(_a)
Convert a uint16_t to two bytes in little endian format for array initialization.
Definition: SerialWombat.h:41
SerialWombatAnalogInput::readFiltered_mV
uint16_t readFiltered_mV()
Retreive a filtered A/D measurement and convert it to mV.
Definition: SerialWombatAnalogInput.h:161
SerialWombatAnalogInput::readMaximum_mV
uint16_t readMaximum_mV(bool resetAfterRead=false)
Retreive the maximum single sample A/D value in mV.
Definition: SerialWombatAnalogInput.h:239
SerialWombatAnalogInput::readCounts
uint16_t readCounts()
Retreive a raw A/D measurement.
Definition: SerialWombatAnalogInput.h:148