//Задание 1: Без использования библиотек вывести на 4х разрядный 7-сегментный дисплей
// счетчик. Если в COM порт послать число, то счетчик должен начать отсчет от
// этого числа, и до 0.
int A = 4;
int B = 8;
int C = 9;
int D = 10;
int E = 11;
int F = 12;
int G = 7;
int counter = 100;
int my_counter = 0;
unsigned long previousMillis;
const unsigned long interval = 1000UL;
void setup() {
Serial.begin(115200);
Serial.println("Введите число: ");
//while(!Serial.available()){}
//delay(5000);
// String teststr = Serial.readString(); //read until timeout
// teststr.trim();
// my_counter = teststr.toInt();
//my_counter = Serial.parseInt();
//Serial.println(my_counter);
// // Initialize the pins of the 4 digits for the multiplexed signals.
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
}
void switch_segment(int Digit)
{
switch(Digit)
{
case 0:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
break;
case 1:
digitalWrite(B, LOW);
digitalWrite(C, LOW);
break;
case 2:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(G, LOW);
break;
case 3:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(G, LOW);
break;
case 4:
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
case 5:
digitalWrite(A, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
case 6:
digitalWrite(A, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
case 7:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
break;
case 8:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
case 9:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
}
}
void clear_segment(){
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
void ShowNumber_on_Display(int l_igit, int th_digit, int sec_digit, int f_digit)
{
clear_segment();
digitalWrite(2, HIGH);
switch_segment(l_igit);
digitalWrite(2, LOW);
delay(20);
clear_segment();
digitalWrite(6, HIGH);
switch_segment(th_digit);
digitalWrite(6, LOW);
delay(20);
clear_segment();
digitalWrite(5, HIGH);
switch_segment(sec_digit);
digitalWrite(5, LOW);
delay(20);
clear_segment();
digitalWrite(3, HIGH);
switch_segment(f_digit);
digitalWrite(3, LOW);
delay(20);
clear_segment();
}
void loop() {
if(Serial.available()> 0)
{
my_counter = Serial.parseInt();
Serial.read();
Serial.println("Введенное число: " + String(my_counter));
}
// установка отрицательных значений в 0 или больших 9999
if (my_counter < 0 or my_counter > 9999) my_counter = 0;
unsigned long currentMillis = millis();
int lastdigit = my_counter % 10;
int third_digit = (my_counter / 10) % 10;
int second_digit = (my_counter / 100) % 10;
int first_digit = my_counter / 1000;
ShowNumber_on_Display(lastdigit, third_digit, second_digit, first_digit);
if(currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis;
my_counter--;
}
}