unsigned long ctimeS;
unsigned long ptimeS = 0;
int timeS = 5;
String serial;
#include <string.h>
//leds 7 segment display
#define A 7
#define B 6
#define C 4
#define D 3
#define E 2
#define F 8
#define G 9
#define Dp 5
//7 segment displays
#define display1 10
#define display2 11
#define display3 13
int h;
//buttons
#define change A5
bool Change = false;
int counterCF = 0;
#define plus A3
bool Plus = false;
#define min A2
bool Min = false;
#define buzzer A1
bool Buzzer = false;
float buzzT = 10.0;
//temps
float temp, Temp, NUM, x, BuzzT;
//time
unsigned long ctime, ptime = 0, ctimeC, ptimeC = 0, ctimeF, ptimeF = 0;
//sensor
#define LMT86 A0
float sensorValue;
float voltageC, voltageF;
//serial
int ScounterCF = 0; //counter for switch from celsius to fahreneheit and opposite
//debouncing
unsigned long const debounceDuration = 500; //interval
void setup() {
// put your setup code here, to run once:
//Leds segment display
Serial.begin(9600);
Serial.setTimeout(10); //this will stop everything in serial to give you, and check, the infromation
Serial.print("start");
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(Dp, OUTPUT);
//Buttons
pinMode(change, INPUT);
pinMode(plus, INPUT);
pinMode(min, INPUT);
pinMode(buzzer, INPUT);
//displays
pinMode(display1, OUTPUT);
pinMode(display2, OUTPUT);
pinMode(display3, OUTPUT);
celsius();
}
void loop() {
// put your main code here, to run repeatedly:
Temp = temp;
BuzzT = buzzT;
buttons();
which();
tone();
if (Serial.available() > 0) { //if number of bytes is greater than 0 read the string
serial = Serial.readStringUntil("\n");
serial.trim();
Serial.println(serial);
//serial.toLowerCase();
if (serial == "cel") {
//Celsius
celsius();
}
else if (serial == "fahr") {
//Fahrenheit
fahrenheit();
}
else if (serial == "threshold") {
//Switch to threshold changer
buzzing();
}
else if (serial == "plus") {
//temp +0.5
buzzing();
}
else if (serial == "minus") {
//temp -0.5
buzzing();
}
else {
Serial.println("Not a correct string. Choose from cel, fahr, threshold, plus and minus!");
}
}
}
void buttons() {
ctime = millis();
if (ctime - ptime >= debounceDuration) {
if (digitalRead(change) == true) {
//change from c to f or f to c
if (ScounterCF % 2 == 0) {
celsius();
ScounterCF++;
ptime = ctime;
}
else if (ScounterCF % 2 == 1) {
fahrenheit();
ScounterCF++;
ptime = ctime;
}
Change = true;
Buzzer = false;
Plus = false;
Min = false;
}
else if (digitalRead(plus) == true) {
//increase limit +0,5
Change = false;
Plus = true;
Buzzer = true;
number(buzzT);
buzzing();
ptime = ctime;
}
else if (digitalRead(min) == true) {
//decrease limit -0,5
Change = false;
Buzzer = true;
Min = true;
number(BuzzT);
buzzing();
ptime = ctime;
}
else if (digitalRead(buzzer) == true) {
//do something with the buzzer
Change = false;
Buzzer = true;
number(BuzzT);
buzzing();
ptime = ctime;
}
}
}
void which() {
if (((Change == true) && (Buzzer == false)) || serial == "cel" || serial == "fahr") {
number(Temp);
}
else if (((Buzzer == true) && (Change == false)) || serial == "plus" || serial == "minus" || serial == "threshold") {
number(BuzzT);
buzzing();
}
}
void tone() {
if (buzzT > temp) {
tone(buzzer, 1000);
}
else {
noTone(buzzer);
}
}
void buzzing() {
number(BuzzT);
if (Plus == true || serial == "plus") {
buzzT += 0.5;
number(buzzT);
Plus = false;
serial = "threshold";
}
else if (Min == true || serial == "minus") {
buzzT -= 0.5;
number(buzzT);
Min = false;
serial = "threshold";
}
else if (Buzzer == true || serial == "threshold") {
number(buzzT);
}
}
void celsius() {
ctimeC = millis();
if (ctimeC - ptimeC >= debounceDuration) {
sensorValue = analogRead(LMT86); //read value of analogpin
voltageC = (sensorValue * 5 / 1024.0) * 1000;
temp = sqrt(pow(-10.888, 2) + 4 * 0.00347 * (1777.3 - voltageC));
temp = (10.888 - temp) / (2 * -0.00347);
temp = temp + 30;
temp = round(temp * 10);
temp = temp / 10;
ptimeC = ctimeC;
number(temp);
Serial.print("Temperature in Celsius: ");
Serial.print(temp);
Serial.println(" °C");
}
}
void fahrenheit() {
ctimeF = millis();
if (ctimeF - ptimeF >= debounceDuration) {
sensorValue = analogRead(LMT86); //read value of analogpin
voltageF = (sensorValue * 5 / 1024.0) * 1000;
temp = sqrt(pow(-10.888, 2) + 4 * 0.00347 * (1777.3 - voltageF));
temp = (10.888 - temp) / (2 * -0.00347);
temp = temp + 30;
temp = (temp * 9 / 5) + 32;
temp = round(temp * 10);
temp = temp / 10;
ptimeF = ctimeF;
number(temp);
Serial.print("Temperature in Fahrenheit: ");
Serial.print(temp);
Serial.println(" °F");
}
}
void number(float x) {
x = x * 10;
int NUM = int(x);
//hecto
h = NUM / 100;
digitalWrite(display3, HIGH);
digitalWrite(Dp, LOW);
delay(5);
segments(h);
digitalWrite(display3, LOW);
//deca
h = (NUM % 100) / 10;
digitalWrite(display1, HIGH);
digitalWrite(Dp, LOW);
delay(5);
segments(h);
digitalWrite(display1, LOW);
//integer
h = NUM % 10;
digitalWrite(display2, HIGH);
digitalWrite(Dp, HIGH);
delay(5);
segments(h);
digitalWrite(display2, LOW);
}
void ghost() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
void segments(int num) {
ctimeS = millis();
if (ctimeS - ptimeS >= timeS) {
ghost();
switch (num) {
case 0:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
break;
case 1:
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
case 2:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
break;
case 3:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
break;
case 4:
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 5:
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 6:
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 7:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
case 8:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 9:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
}
ptimeS = ctimeS;
}
}