Pico-Arduino
SerialDAC.h
1 #pragma once
2 #include "Stream.h"
3 #include "stdint.h"
4 
13 class SerialDAC {
14  public:
16  SerialDAC(Stream &out, uint minSampleValue=0, uint maxSampleValue = 65535){
17  out_ptr = &out;
18  this->maxSampleValue = maxSampleValue;
19  this->minSampleValue = minSampleValue;
20  }
21 
23  uint baudRate(uint samplingRate) const {
24  // sample rate is samples per second - 1 sample has 16 bits
25  return samplingRate * 16;
26  }
27 
29  void write(uint16_t *inValues, int len) const {
30  convert(inValues,inValues,len);
31  out_ptr->write((const uint8_t *)inValues,len*sizeof(int16_t));
32  }
33 
35  void write(uint16_t value) const {
36  out_ptr->write(convertValue(value));
37  }
38 
39  protected:
40  Stream *out_ptr;
41  long maxSampleValue;
42  long minSampleValue;
43  const uint16_t values[17] = {
44  0b0000000000000000,
45  0b0000000000000001,
46  0b0000000000000011,
47  0b0000000000000111,
48  0b0000000000001111,
49  0b0000000000011111,
50  0b0000000000111111,
51  0b0000000001111111,
52  0b0000000011111111,
53  0b0000000111111111,
54  0b0000001111111111,
55  0b0000011111111111,
56  0b0000111111111111,
57  0b0001111111111111,
58  0b0011111111111111,
59  0b0111111111111111,
60  0b1111111111111111
61  };
62 
63  inline uint map(uint x, uint in_min, uint in_max, uint out_min, uint out_max) const {
64  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
65  }
66 
67  void convert(uint16_t *inValues, uint16_t *outValues, int len) const{
68  for (int j=0;j<len;j++){
69  outValues[j] = convertValue(inValues[j]);
70  }
71  }
72 
73  inline uint16_t convertValue(uint16_t value) const {
74  uint8_t idx = map(value, -maxSampleValue, maxSampleValue, 0, 16);
75  return values[idx];
76  }
77 
78 };
If your Microcontroller does not provide a dedicated analog output you can use the serial output inst...
Definition: SerialDAC.h:13
void write(uint16_t *inValues, int len) const
writes a buffer to the tx line
Definition: SerialDAC.h:29
void write(uint16_t value) const
writes a single value to the tx line
Definition: SerialDAC.h:35
SerialDAC(Stream &out, uint minSampleValue=0, uint maxSampleValue=65535)
Constructor.
Definition: SerialDAC.h:16
uint baudRate(uint samplingRate) const
convert the sample rate to the necessary baud rate (bit per second (bit/s)) - please set the baud rat...
Definition: SerialDAC.h:23
Definition: Stream.h:51