// The file can be found completely as a common cathode using simulation
// The link is https://wokwi.com/projects/381842732654213121
uint8_t seven_seg_ports[] = {6, 7, 8, 9, 10, 11, 12, 13}; //global array for ports of the 7-segment display
uint8_t seven_seg_digits_port[] = {PA0, PA1, PA12, PA13};
void displayNumber(uint16_t value_to_display, uint8_t digits[]);
void displayDigit(int digit, int value);
int32_t ntp_temp();
int32_t preset();
int32_t previousset=27;
int16_t startviewtime = 25;
uint8_t seven_seg_advertisement[10] = //Bit pattern for 7 - segment display (7 segment coding of the decimal digits)
{
0b11111100, //0
0b01100000, //1
0b11011010, //2
0b11110010, //3
0b01100110, //4
0b10110110, //5
0b10111110, //6
0b11100000, //7
0b11111110, //8
0b11110110 //9
}; //End bit pattern - array
uint8_t seven_seg_digits_advertisement[4] =
{
0b1110,//DGT1
0b1101,//DGT2
0b1011,//DGT3
0b0111 //DGT4
};//Bit pattern for 4 - digit display (4 digit coding of the decimal digits
//End bit pattern - array
uint16_t digits_value = 0; //digits_valueing variable to digits_value the bit patterns
uint8_t digit_pos = 0;//digit_position variable to digit_pos the bit patterns
void setup()
{
//Initialization of ports D13-->DP, D12-->Segment g,... to D6-->Segment a
for (uint16_t i = 0; i <= 7; i++)
{
pinMode(seven_seg_ports[i], OUTPUT);
}
for (uint16_t i = 0; i <= 3; i++)
{
pinMode(seven_seg_digits_port[i], OUTPUT);
}
pinMode(A0, INPUT);
pinMode(A1, INPUT);
clear7_seg(3);
Serial.begin(115200);
Serial.println("Hello, 7 Segment Display");
}
void loop()
{
int32_t celsius = ntp_temp();
int32_t celsiusset = preset();
if ((celsiusset != previousset) && (startviewtime > 0))
{
//delay(startviewtime);
startviewtime--;
celsius = celsiusset;
if (startviewtime <= 0 )
{
previousset = celsiusset;
}
}
else
{
int32_t celsius = preset();
startviewtime = 25;
}
int32_t digits_value = celsius;//1235;//digits_valueing variable to digits_value the bit patterns
uint16_t pos = 3;
//Output of the digit on a 7 segment display
uint8_t digits[4] = {0, 0, 0, 0};
displayNumber(digits_value, digits);
int val=3;
while (val >= 0) //when the last digit reaches 0 start again
{
//Serial.print("current pos: ");
//Serial.println(pos, DEC);
write7_seg(seven_seg_advertisement[digits [val]], seven_seg_digits_advertisement[pos]);
val--;
delay(1);
if(pos > 0) //when the last digit reaches 0 start again
{
pos--;
}
else
{
pos=3;
}// End
}// End if
//delay(1); // this speeds up the simulation
//Serial.print("------- next digit --------\n");
}
void write7_seg(uint16_t advertisement_var, uint16_t digit_var) //Function for writing to 7Seg display
{
clear7_seg(advertisement_var);
for (int8_t i = 0; i >= 0;i++)
{
digitalWrite(seven_seg_digits_port[i], bitRead(digit_var, i));
}//End for
delay(1);
for (int16_t j = 7; j >= 0; j--)
{
delay(1);
//outputs the current port pin that is being written...and with what value
//Writes the value to the corresponding port pin for display on the 7 segment display
digitalWrite(seven_seg_ports[j], bitRead(advertisement_var, 7 - j));
}//End for
}//End wirte7_seg
void displayNumber(uint16_t value_to_display, uint8_t digits[])
{
digits [0] = value_to_display / 1000;
digits [1] = (value_to_display / 100) % 10;
digits [2] = (value_to_display / 10) % 10;
digits [3] = value_to_display % 10;
}
void clear7_seg(uint16_t advertisement_var) //Function for writing to 7Seg display
{
for (int16_t j = 7; j >= 0; j--)
{
//Initialization of ports PA for display digit ----> DIG1...DIG4
digitalWrite(seven_seg_digits_port[0], HIGH);
digitalWrite(seven_seg_digits_port[1], HIGH);
digitalWrite(seven_seg_digits_port[2], HIGH);
digitalWrite(seven_seg_digits_port[3], HIGH);
//Writes the value to the corresponding port pin for display on the 7 segment display
digitalWrite(seven_seg_ports[j], bitRead(advertisement_var, 7 - j));
delay(1);
}//End for
}//End clear7_seg
int32_t ntp_temp()
{
const int64_t BETA = 3950;
int32_t analogValue = analogRead(A0);
int32_t celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
//int32_t celsius = (analogValue * 10)/BETA;
Serial.print("Temperature: ");
Serial.print(celsius);
Serial.println(" ℃");
delay(1);
return (celsius);
}
int32_t preset()
{
const int32_t RES = 3.95;
int32_t analogValue = analogRead(A1);
int32_t celsius = 1 / (log(1 / (1023. / analogValue - 1)) / + 1.0 / 2.9815) - 2.7315;
//int32_t celsius = (analogValue * 10)/RES;
Serial.print("Preset: ");
Serial.print(celsius);
Serial.println(" ℃");
delay(1);
return (celsius);
}