Program Listing for File ArduinoDAQ.cpp¶
↰ Return to documentation for file (AD7766_Arduino/ArduinoDAQ.cpp)
#include "ArduinoDAQ.h"
#include "Arduino.h"
#include <Vrekrer_scpi_parser.h>
int ArduinoDAQ::adcPin;
uint8_t ArduinoDAQ::adcData[MAX_NUMBER_MEASUREMENTS];
uint8_t ArduinoDAQ::operationRegister;
uint8_t ArduinoDAQ::questionableStatusRegister;
uint8_t ArduinoDAQ::errorEventQueue;
int ArduinoDAQ::numberADCMeasurements;
ArduinoDAQ::ArduinoDAQ(const int adcPin) {
pinMode(ArduinoDAQ::adcPin, INPUT);
ArduinoDAQ::numberADCMeasurements = 1;
ArduinoDAQ::operationRegister = 0;
ArduinoDAQ::questionableStatusRegister = 0;
ArduinoDAQ::errorEventQueue = 0;
this->myInstrument = SCPI_Parser();
this->myInstrument.RegisterCommand(F("*IDN?"), &ArduinoDAQ::Identify);
this->myInstrument.RegisterCommand(F("*RST"), &Reset);
this->myInstrument.RegisterCommand(F("*CLS"), &Clear);
this->myInstrument.SetCommandTreeBase("");
this->myInstrument.RegisterCommand("MEASure?", &measureADCData);
this->myInstrument.RegisterCommand("CONFigure", &configureADC);
this->myInstrument.RegisterCommand("FETCh?", &fetchADCData);
}
void ArduinoDAQ::ProcessInput(Stream &interface, char* terminationCharacters) {
this->myInstrument.ProcessInput(interface, terminationCharacters);
}
void ArduinoDAQ::Identify(SCPI_Commands commands, SCPI_Parameters parameters, Stream& interface) {
interface.println(F("Vrekrer,Arduino SCPI Dimmer,#00,v0.4"));
}
void ArduinoDAQ::Reset(SCPI_Commands commands, SCPI_Parameters parameters, Stream& interface) {
for(int i = 0; i < MAX_NUMBER_MEASUREMENTS; i++) {
ArduinoDAQ::adcData[i] = 0;
}
ArduinoDAQ::numberADCMeasurements = 1;
ArduinoDAQ::operationRegister = 0;
ArduinoDAQ::questionableStatusRegister = 0;
ArduinoDAQ::errorEventQueue = 0;
}
void ArduinoDAQ::Clear(SCPI_Commands commands, SCPI_Parameters parameters, Stream& interface) {
operationRegister = 0;
questionableStatusRegister = 0;
errorEventQueue = 0;
}
/* Configures the number of ADC measurements we want to take */
void ArduinoDAQ::configureADC(SCPI_Commands commands, SCPI_Parameters parameters, Stream& interface) {
ArduinoDAQ::numberADCMeasurements = constrain(String(parameters[0]).toInt(), 1, MAX_NUMBER_MEASUREMENTS);
}
/* Iniates ADC measurements and returns the data over the specified interface */
void ArduinoDAQ::measureADCData(SCPI_Commands commands, SCPI_Parameters parameters, Stream& interface) {
interface.write('#');
for(int i=0; i < numberADCMeasurements; i++) {
adcData[i] = analogRead(adcPin);
interface.write(adcData[i]);
}
}
/* Fetches previously-measured ADC data stored in the internal buffer */
void ArduinoDAQ::fetchADCData(SCPI_Commands commands, SCPI_Parameters parameters, Stream& interface) {
interface.write('#');
for(int i=0; i < numberADCMeasurements; i++) {
interface.write(adcData[i]);
}
}