Hello, i have a simple question, i have written this simple
Arduino program where a 4 digit 7 segment led display is used to
count the numbers down from 10 to 0. all i need to know is how to
write "0" in the serial monitor whenever the number is on the
digital LED becomes 0, thank you.
#include <math.h>
int digit_pin[] = {6, 9, 10, 11};
int speakerPin = 15;
#define DIGIT_ON LOW
#define DIGIT_OFF HIGH
int segA = 2;
int segB = 3;
int segC = 4;
int segD = 5;
int segE = A0;
int segF = 7;
int segG = 8;
//int segPD = ;
int button1=13;
int button2=12;
int countdown_time = 10;
struct struct_digits {
int digit[4];
};
void setup() {
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
for (int i=0; i<4; i++) {
pinMode(digit_pin, OUTPUT);
}
pinMode(speakerPin, OUTPUT);
pinMode(button1,INPUT_PULLUP);
pinMode(button2,INPUT_PULLUP);
}
void lightNumber(int numberToDisplay) {
#define SEGMENT_ON HIGH
#define SEGMENT_OFF LOW
switch (numberToDisplay){
case 0:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
Serial.print("0,\t");
break;
case 1:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
Serial.print("0,\t");
break;
case 2:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 3:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 4:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 5:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 6:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 7:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 8:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 9:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 10:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
}
}
void SwitchDigit(int digit) {
for (int i=0; i<4; i++) {
if (i == digit) {
digitalWrite(digit_pin, DIGIT_ON);
} else {
digitalWrite(digit_pin, DIGIT_OFF);
}
}
}
struct struct_digits IntToDigits(int n){
struct struct_digits dig;
int zeros=0;
int d;
for (int i=0; i<4; i++) {
d=n/pow(10,3-i);
zeros += d;
n = n - d*pow(10,3-i);
if (zeros!=0 || i==3) {
dig.digit=d;
} else {
dig.digit=10;
}
}
return dig;
}
void PrintNumber(int n, int time) {
struct struct_digits dig;
dig = IntToDigits(n);
for (int i=0; i<= time/20; i++) {
if (digitalRead(button2)==LOW) {
return;
}
for (int j=0; j<4; j++) {
SwitchDigit(j);
lightNumber(dig.digit[j]);
delay(5);
}
}
}
bool Countdown(int n, int del){
for (int q=n; q>0; q--){
PrintNumber(q,del);
if (digitalRead(button2)==LOW) {
return false;
}
}
PrintNumber(0,0);
return true;
}
void reset() {
int m, zeros, d, pressed3 = 0, pressed4 = 0;
m=countdown_time;
struct struct_digits dig;
dig = IntToDigits(countdown_time);
while (digitalRead(button1)==HIGH) {
for (int j=0; j<4; j++) {
SwitchDigit(j);
lightNumber(dig.digit[j]);
delay(5);
}
dig =
IntToDigits(countdown_time);
}
pressed3 += 1;
}
void loop(){
reset();
while (!Countdown(countdown_time,962)) {
reset();
}
while (digitalRead(button2)==1){};
}
CRE0 E. ఉందంగా అలం.
3467
Hello, i have a simple question, i have written this simple Arduino program where a 4 digit 7 segment led display is use
-
answerhappygod
- Site Admin
- Posts: 899604
- Joined: Mon Aug 02, 2021 8:13 am
Hello, i have a simple question, i have written this simple Arduino program where a 4 digit 7 segment led display is use
Join a community of subject matter experts. Register for FREE to view solutions, replies, and use search function. Request answer by replying!