/*
Woki: https://wokwi.com/projects/405032414065256449
*/
//def.h
#include "SevSeg.h"
#include "myButton.h"
SevSeg sevseg; //Instantiate a seven segment controller object
//INPUT
MyButton button1(14); //Menu
MyButton button2(15); //Up
MyButton button3(16); //Down
byte SENS = A0;
typedef enum {
MPA,
BAR,
PSI
} MODE;
MODE mode = MPA;
int scale = 100; //0-100, 0-250, ...
uint16_t refreshTime = 1000;
/// def.h end ///
//fun.h
void button1Fun();
void button2Fun();
void button3Fun();
float readVolt();
void displayReading(float r);
void changeMode();
void changeScale();
// void setModeLed(MODE m);
// Button functions
void button1Fun() { //Menu
Serial.println("Pressed Menu");
}
void button1LongFun() { //Menu
Serial.println("Menu Long");
}
void button2Fun() { //Up
Serial.println("Pressed Up");
changeMode();
}
void button3Fun() { //Down
Serial.println("Pressed Down");
changeScale();
}
float readVolt() {
float sensorVoltage = analogRead(SENS) * (10.0 / 1023.0); //0-10V
Serial.println("A:" + String(analogRead(SENS)) + " V:" + String(sensorVoltage));
return sensorVoltage;
}
void displayReading(float r) {
switch (mode) {
case MPA:
//scale=100; 0-10v => 0-10
r = r * scale * 0.01;
Serial.println("MPA");
break;
case BAR:
//scale=100; 0-10v => 0-100
r = r * scale * 0.1;
Serial.println("BAR");
break;
case PSI:
//scale=100; 0-10v => 0-1450.38 i.e Mpa*145.0377
r = r * scale * 0.01 * 145.0377;
Serial.println("PSI");
break;
default:
r = 0.0;
break;
}
//formet to display
if (r > 0 && r < 999) {
// 101.1
sevseg.setNumberF(r, 1);
}
else if (r > 999) {
// 1011 no decimals
sevseg.setNumber(r);
} else {
// unknown
sevseg.setNumber(r);
}
Serial.println("R:" + String(r));
}
void changeMode() {
//cycle through modes
switch (mode) {
case MPA:
mode = BAR;
break;
case BAR:
mode = PSI;
break;
default:
mode = MPA;
break;
}
// setModeLed(mode);
Serial.print("Mode:");
Serial.println(mode);
}
void changeScale() {
if (scale == 100) {
scale = 250;
Serial.println("Scale:250");
}
else {
scale = 100;
Serial.println("Scale:100");
}
}
// void setModeLed(MODE m) {
// for (int i = 0; i < 4; i++) {
// sevseg.setExtSegmentsDigit(i, 0x00); //off
// }
// switch (m) {
// case MPA:
// sevseg.setExtSegmentsDigit(0, 0x02); //0b00000001 (seg2 0)
// break;
// case BAR:
// sevseg.setExtSegmentsDigit(1, 0x02); //0b00000010 (seg2 1)
// break;
// case PSI:
// sevseg.setExtSegmentsDigit(0, 0x01); //0b00000001 (seg2 0)
// break;
// default:
// for (int i = 0; i < 4; i++) {
// sevseg.setExtSegmentsDigit(i, 0x00); //off
// }
// break;
// }
// }
/// fun.h end ///
void setup() {
byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5}; //{c1,c2,c3,c4}
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13, 17, 18}; //{a,b,c,d,e,f,g,dp}
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(50);
Serial.begin(9600);
//INPUT
pinMode(SENS, INPUT);
button1.onPressed(button1Fun);
button2.onPressed(button2Fun);
button3.onPressed(button3Fun);
button1.onPressedFor(1000, button1LongFun);
// setModeLed(mode);
}
void loop() {
static unsigned long timer;
button1.update();
button2.update();
button3.update();
if (millis() - timer >= refreshTime) {
displayReading(readVolt());
timer = millis();
}
sevseg.refreshDisplay(); // Must run repeatedly
}
/// END ///