#include "SevSeg.h"
SevSeg sevseg; //Instantiate a seven segment controller object
int inPin1 = 0; // Analog input pin for first input signal
int inPin2 = 1; // Analog input pin for second input signal
int outPin = 3;
const int overridePin = A5;
int overrideState = 0;
//int val2 = A2;
//const float AREF = 5.0; // Reference voltage of the board
int AREF = 5;
void setup() {
// Set up analog input pins
pinMode(inPin1, INPUT);
pinMode(inPin2, INPUT);
pinMode(A3, OUTPUT);
pinMode(overridePin, INPUT);
pinMode(3,OUTPUT);
pinMode(outPin, OUTPUT); // Set up digital output pin for 0-5V DC output
analogReference(EXTERNAL);
byte numDigits = 4;
byte digitPins[] = {A3, 11, 12, 13};
byte segmentPins[] = {6, 5, 10, 2, 4, 7, 8, 9};
bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
byte hardwareConfig = COMMON_CATHODE; // See README.md for options
bool updateWithDelays = false; // Default 'false' is Recommended
bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
bool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't connected
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90);
}
void loop() {
// Read analog input values for both input signals
//int val1 = analogRead(inPin1);
//int val2 = analogRead(inPin2);
// Convert the analog readings to voltage
//float voltage1 = val1 * (AREF / 1023);
//float voltage2 = val2 * (AREF / 1023);
// Calculate the difference between the two input signals
//float diff;
// Check if manual override switch is on
overrideState = digitalRead(overridePin);
if (overrideState == HIGH) {
// Read the voltage from A2 and output it directly
int overrideVal = analogRead(inPin2);
float inPin2 = (overrideVal * AREF) / 1023.0;
analogWrite(outPin, (inPin2 / AREF) * 255);
// Set display to show override voltage
int overrideDisplayValue = int(abs(inPin2) * 1000);
sevseg.setNumber(overrideDisplayValue, 3);
} else {
// Output the difference as a voltage on the digital output pin using PWM
int overrideVal = analogRead(inPin1);
float inPin1 = (overrideVal * AREF) / 1023.0;
analogWrite(outPin, (inPin1 / AREF) * 255);
// Display the difference on the 4-digit 7-segment display
int displayValue = int(abs(inPin1) * 1000); // Convert the difference to an integer for display
sevseg.setNumber(displayValue, 3); // Set the number to display with 2 decimal places
}
sevseg.refreshDisplay(); // Refresh the display
}