Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 102 additions & 42 deletions src/OPCN3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,48 @@
#include <Arduino.h>
#include <SPI.h>

// class for logging to serial at different levels
class Logger
{
private:
// log level
String logLevel = "info";
public:
// set log level
void setLogLevel(String level) {
if (level == "info" || level == "debug" || level == "error" || level == "quiet") {
logLevel = level;
} else {
Serial.println("Invalid log level, defaulting to info");
}
}

// write to serial at the info, debug, and error levels
void info(String message) {
if (logLevel == "info" || logLevel == "debug" || logLevel == "error") {
Serial.println(message);
}
}

void debug(String message) {
if (logLevel == "debug" || logLevel == "error") {
Serial.println(message);
}
}

void error(String message) {
if (logLevel == "error") {
Serial.println(message);
}
}
};

// create a logger
Logger logger;

// char buffer for printing to serial
char serialBuffer[256];

OPCN3::OPCN3(uint8_t pinSelect, uint32_t speedSelect)
{
_ssPin = pinSelect;
Expand All @@ -12,7 +54,7 @@ OPCN3::OPCN3(uint8_t pinSelect, uint32_t speedSelect)
// Alpha Sensor Functions
void OPCN3::begin()
{
Serial.println("Initiating SPI ");
logger.info("Initializing SPI ");
// set ss pin to output
pinMode(_ssPin, OUTPUT);
SPI.begin();
Expand All @@ -21,35 +63,35 @@ void OPCN3::begin()
delay(1000);
}

void OPCN3::initialize()
void OPCN3::initialize(String logLevel)
{
// set the log level
logger.setLogLevel(logLevel);
// Initialize the OPC-N3
delay(1000);
Serial.println("Initilize");
logger.info("Initialize");
delay(1000);
begin();
delay(1000);
logger.info("Serial Number:");
readSerialNumber();
Serial.println("Serial Number:");
Serial.println(getSerialNumber());
delay(1000);
Serial.println("DACandPowerStatus");
logger.info("DACandPowerStatus");
readDACandPowerStatus();
delay(1000);
Serial.println("ConfigurationVariables");
logger.debug("ConfigurationVariables");
readConfigurationVariables();
delay(4000);
Serial.println("");
delay(10000);
Serial.println("Turn Fan on");
logger.info("Turn Fan on");
struct FanDigitalPotShutdownState fanState = setFanDigitalPotShutdownState(true);
delay(1000);
Serial.println("Turn Laser on");
logger.info("Turn Laser on");
struct LaserDigitalPotShutdownState laserState = setLaserDigitalPotShutdownState(true);
delay(1000);
Serial.println("Turn Laser Switch on");
logger.info("Turn Laser Switch on");
struct LaserPowerSwitchState laserPowerState = setLaserPowerSwitchState(true);
delay(1000);
Serial.println("High Gain");
logger.info("High Gain");
struct HighLowGainState gainState = setHighLowGainState(true);
delay(2000);
bool reset = resetHistogram();
Expand All @@ -59,7 +101,7 @@ void OPCN3::initialize()
struct DACandPowerStatus OPCN3::readDACandPowerStatus()
{
DACandPowerStatus dACandPowerStatus = sendCommand<DACandPowerStatus>(0X13, 0X13, 6);
Serial.println(dACandPowerStatus.toString());
logger.info(dACandPowerStatus.toString());
return dACandPowerStatus;
}

Expand All @@ -68,10 +110,16 @@ struct FanDigitalPotShutdownState OPCN3::setFanDigitalPotShutdownState(bool stat
byte commandByte = status ? 0X03 : 0X02;
FanDigitalPotShutdownState fanDigitalPotShutdownState = sendCommand<FanDigitalPotShutdownState>(0X03, commandByte, 1);
fanDigitalPotShutdownState.fanOn = status;
Serial.print("Validity: ");
Serial.println(fanDigitalPotShutdownState.valid);
Serial.print(fanDigitalPotShutdownState.fanOn);
Serial.print(" ");
// write the status of the fan to the fanState variable as an On/Off string
char fanState[3];
if (fanDigitalPotShutdownState.fanOn) {
sprintf(fanState, "On ");
} else {
sprintf(fanState, "Off");
}
// print the validity and the status of the fan
sprintf(serialBuffer, "Validity: %d, Status: %s", fanDigitalPotShutdownState.valid, fanState);
logger.info(serialBuffer);
return fanDigitalPotShutdownState;
}

Expand All @@ -80,10 +128,16 @@ struct LaserDigitalPotShutdownState OPCN3::setLaserDigitalPotShutdownState(bool
byte commandByte = status ? 0X05 : 0X04;
LaserDigitalPotShutdownState laserDigitalPotShutdownState = sendCommand<LaserDigitalPotShutdownState>(0X03, commandByte, 1);
laserDigitalPotShutdownState.laserOn = status;
Serial.print("Validity: ");
Serial.println(laserDigitalPotShutdownState.valid);
Serial.print(laserDigitalPotShutdownState.laserOn);
Serial.print(" ");
// write the status of the laser to the laserState variable as an On/Off string
char laserState[3];
if (laserDigitalPotShutdownState.laserOn) {
sprintf(laserState, "On ");
} else {
sprintf(laserState, "Off");
}
// print the validity and the status of the laser
sprintf(serialBuffer, "Validity: %d, Status: %s", laserDigitalPotShutdownState.valid, laserState);
logger.info(serialBuffer);
return laserDigitalPotShutdownState;
}

Expand All @@ -92,10 +146,16 @@ struct LaserPowerSwitchState OPCN3::setLaserPowerSwitchState(bool status)
byte commandByte = status ? 0X07 : 0X06;
LaserPowerSwitchState laserPowerSwitchState = sendCommand<LaserPowerSwitchState>(0X03, commandByte, 1);
laserPowerSwitchState.laserOn = status;
Serial.print("Validity: ");
Serial.println(laserPowerSwitchState.valid);
Serial.print(laserPowerSwitchState.laserOn);
Serial.print(" ");
// write the status of the laser swtich to the laserState variable as an On/Off string
char laserState[3];
if (laserPowerSwitchState.laserOn) {
sprintf(laserState, "On ");
} else {
sprintf(laserState, "Off");
}
// print the validity and the status of the laser switch
sprintf(serialBuffer, "Validity: %d, Status: %s", laserPowerSwitchState.valid, laserState);
logger.info(serialBuffer);
return laserPowerSwitchState;
}

Expand All @@ -104,17 +164,23 @@ struct HighLowGainState OPCN3::setHighLowGainState(bool status)
byte commandByte = status ? 0X10 : 0X11;
HighLowGainState highLowGainState = sendCommand<HighLowGainState>(0X03, commandByte, 1);
highLowGainState.highLow = status;
Serial.print("Validity: ");
Serial.println(highLowGainState.valid);
Serial.print(highLowGainState.highLow);
Serial.print(" ");
// write the status of the Gain to the laserState variable as an High/Low string
char gainState[4];
if (highLowGainState.highLow) {
sprintf(gainState, "High");
} else {
sprintf(gainState, "Low ");
}
// print the validity and the status of the gain
sprintf(serialBuffer, "Validity: %d, Status: %s", highLowGainState.valid, gainState);
logger.info(serialBuffer);
return highLowGainState;
}

struct HistogramData OPCN3::readHistogramData()
{
HistogramData histogramData = sendCommand<HistogramData>(0X30, 0X30, 86);
Serial.println(histogramData.toString());
logger.debug(histogramData.toString());
return histogramData;
}

Expand All @@ -127,26 +193,20 @@ bool OPCN3::resetHistogram()
struct SerialNumber OPCN3::readSerialNumber()
{
SerialNumber serialNumber = sendCommand<SerialNumber>(0X10, 0X10, 60);
Serial.print("Validity: ");
Serial.println(serialNumber.valid);
String info = "";
String serialString = "";
for (int i = 0; i < 60; i++)
{
info += String(serialNumber.serial[i]);
serialString += String(serialNumber.serial[i]);
}
serial = info;
sprintf(serialBuffer, "Validity: %d Serial Number: %s", serialNumber.valid, serialString.c_str());
logger.info(serialBuffer);
return serialNumber;
}

String OPCN3::getSerialNumber()
{
return serial;
}

struct ConfigurationVariables OPCN3::readConfigurationVariables()
{
ConfigurationVariables configurationVariables = sendCommand<ConfigurationVariables>(0X3C, 0X3C, 163);
Serial.println(configurationVariables.toString());
logger.debug(configurationVariables.toString());
return configurationVariables;
}

Expand Down
7 changes: 3 additions & 4 deletions src/OPCN3.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,15 @@ class OPCN3
endTransfer();

ResponseType response;
memcpy(&response, &dataIn, sizeof(response));
memcpy(&response, &dataIn, outputSize);
response.valid = validate(initial, validator, 2);
return response;
};

public:
OPCN3(uint8_t pinSelect, uint32_t speedSelect = 500000);
void begin();
void initialize();
void initialize(String logLevel = "info");
struct DACandPowerStatus readDACandPowerStatus();
struct FanDigitalPotShutdownState setFanDigitalPotShutdownState(bool status);
struct LaserDigitalPotShutdownState setLaserDigitalPotShutdownState(bool status);
Expand All @@ -56,7 +56,6 @@ class OPCN3
struct SerialNumber readSerialNumber();
struct ConfigurationVariables readConfigurationVariables();
bool resetHistogram();
String getSerialNumber();
};


Expand All @@ -79,4 +78,4 @@ struct SerialNumber
};


#endif
#endif
40 changes: 25 additions & 15 deletions src/models/ConfigurationVariables.cpp
Original file line number Diff line number Diff line change
@@ -1,48 +1,58 @@
#include "ConfigurationVariables.h"

String ConfigurationVariables::toString() {
String info = "-----Configuration Variables-----\n";
info += "Validity: ";
String info = "Validity: ";
info += valid;
info += "\n";
info += "Bin Boundries ADC";
info += "-------------------------------------------------";
info += "\n";
info += "Bin Boundaries ADC";
info += "\n";
for (int i = 0; i < 25; i++) {
info += binBoundriesADC[i];
info += binBoundariesADC[i];
info += " ";
if (i + 1 % 10 == 0) {
info += "\n";
}
}
info += "\n";
info += "-------------------------------------------------";
info += "\n";
info += "Bin Boundries Diametors";
info += "Bin Boundary Diameters um x 100";
info += "\n";
for (int i = 0; i < 25; i++) {
info += binBoundriesDiametor[i];
info += binBoundaryDiameters[i];
info += " ";
if (i + 1 % 10 == 0) {
info += "\n";
}
}
info += "\n";
info += "-------------------------------------------------";
info += "\n";
info += "Bin Weights";
info += "Bin Weights %";
info += "\n";
for (int i = 0; i < 24; i++) {
info += binWeightings[i];
info += binWeights[i];
info += " ";
}
if (i + 1 % 10 == 0) {
info += "\n";
}
}
info += "\n";
info += "-------------------------------------------------";
info += "\n";
info += "PM Diametors";
info += "PM Diameters um x 100";
info += "\n";
info += pmDiametorA;
info += pmDiameterA;
info += " ";
info += pmDiametorB;
info += pmDiameterB;
info += " ";
info += pmDiametorC;
info += pmDiameterC;
info += "\n";
info += "-------------------------------------------------";
info += "\n";
info += "PM MSLNS";
info += "MaxTOF SmpInt IdleInt MaxData SavePM FanOnIdle";
info += "\n";
info += maximumTimeOfFlight;
info += " ";
Expand All @@ -58,4 +68,4 @@ String ConfigurationVariables::toString() {
info += " ";

return info;
}
}
14 changes: 7 additions & 7 deletions src/models/ConfigurationVariables.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
struct ConfigurationVariables
{

uint16_t binBoundriesADC[25];
uint16_t binBoundariesADC[25];

uint16_t binBoundriesDiametor[25];
uint16_t binBoundaryDiameters[25];

uint16_t binWeightings[24];
uint16_t binWeights[24];

uint16_t pmDiametorA;
uint16_t pmDiametorB;
uint16_t pmDiametorC;
uint16_t pmDiameterA;
uint16_t pmDiameterB;
uint16_t pmDiameterC;

uint16_t maximumTimeOfFlight;
uint16_t AMSamplingIntervalCount;
Expand All @@ -24,4 +24,4 @@ struct ConfigurationVariables
bool valid;

String toString();
};
};
Loading