제가 한자리 7세그먼트(애노드) 와 led 5개를 동시에 제어하려고 합니다
제가 구현하고 싶은것은
제가 설정한 세그먼트 카운트 다운 4-3-2-1-0
2초간격으로 숫자 하나씩줄어드는 delay(2000)에 맞추어서
led 불빛이 동시에 하나씩 줄어드는것을
구현하고 싶습니다!!
기호로 설명하자면
led 와 세그먼트가
led ●●●●● ------이때 동시에 세그먼트 화면에 4
led ○●●●●-------이때 동시에 세그먼트 화면에 3
led ○○●●●-------이때 동시에 세그먼트 화면에 2
led ○○○●●-------이때 동시에 세그먼트 화면에 1
led ○○○○●-------이때 동시에 세그먼트 화면에 0
led ○○○○○-------이때 동시에 세그먼트 화면에 아무것도 안뜸
이렇게 하고 싶은데 제가 짠 코드로는
led 543210 이 끝나면 그제서야 세그먼트가 43210_ 이 뜹니다 ㅜㅜㅜ
동시에 어떻게 제어하는지 알려주시면 감사하겠습니다 ㅜㅜㅜㅜ너무 급해요
0번핀~6번핀이 세그먼트고 8~12 가 led입니다!!
led 랑 세그먼트 를 코딩창에 서로따로따로 했을땐
작동이 잘되어서 둘을 그냥 순서대로 setup 과 loop 안에 넣어봤어요!!
int Led1 = 8;
int Led2 = 9;
int Led3 = 10;
int Led4 = 11;
int Led5 = 12;
int a = 0;
int b = 1;
int c = 2;
int d = 3;
int e = 4;
int f = 5;
int g = 6;
int cou;
//led 점등패턴1번 서브루틴
void style_1(void)
{
unsigned char j;
for(j=8;j<=13;j++)
digitalWrite(j,HIGH);
delay(2000);
for(j=13;j>=8;j--)
{
digitalWrite(j,LOW);
delay(2000);
}
}
void setup()
{ Serial. begin(9600);
unsigned char i;
for(i=8;i<=13 ;i++)//디지털IO 1~6번까지 출력모드로 설정합니다.
pinMode(i,OUTPUT);// i번째 핀을 출력모드로 설정합니다.
// initialize the digital pins as an output.
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
Scheduler.startLoop(loop2);
}
void on(int num){
if (num == 0){
digitalWrite (a,LOW);
digitalWrite (b,LOW);
digitalWrite (c,LOW);
digitalWrite (d,LOW);
digitalWrite (e,LOW);
digitalWrite (f,LOW);
} else if (num == 1){
digitalWrite (b,LOW);
digitalWrite (c,LOW);
} else if (num == 2){
digitalWrite (a,LOW);
digitalWrite (b,LOW);
digitalWrite (g,LOW);
digitalWrite (e,LOW);
digitalWrite (d,LOW);
} else if (num == 3){
digitalWrite (a,LOW);
digitalWrite (b,LOW);
digitalWrite (g,LOW);
digitalWrite (c,LOW);
digitalWrite (d,LOW);
} else if (num == 4) {
digitalWrite (f,LOW);
digitalWrite (g,LOW);
digitalWrite (b,LOW);
digitalWrite (c,LOW);
} else if (num == 5) {
digitalWrite (a,LOW);
digitalWrite (f,LOW);
digitalWrite (g,LOW);
digitalWrite (c,LOW);
digitalWrite (d,LOW);
} else if (num == 6) {
digitalWrite (a,LOW);
digitalWrite (f,LOW);
digitalWrite (g,LOW);
digitalWrite (e,LOW);
digitalWrite (d,LOW);
digitalWrite (c,LOW);
} else if (num == 7) {
digitalWrite (f,LOW);
digitalWrite (a,LOW);
digitalWrite (b,LOW);
digitalWrite (c,LOW);
} else if (num == 8) {
digitalWrite (a,LOW);
digitalWrite (b,LOW);
digitalWrite (c,LOW);
digitalWrite (d,LOW);
digitalWrite (e,LOW);
digitalWrite (f,LOW);
digitalWrite (g,LOW);
} else if (num == 9) {
digitalWrite (f,LOW);
digitalWrite (a,LOW);
digitalWrite (g,LOW);
digitalWrite (b,LOW);
digitalWrite (c,LOW);
digitalWrite (d,LOW);
}
}
void off(int num){
digitalWrite (a,HIGH);
digitalWrite (b,HIGH);
digitalWrite (c,HIGH);
digitalWrite (d,HIGH);
digitalWrite (e,HIGH);
digitalWrite (f,HIGH);
digitalWrite (g,HIGH);
}
void loop() {
// put your main code here, to run repeatedly:
style_1();//서브루틴 호출
for (cou=4;cou >= 0;cou--){
on (cou);
delay (2000);
off (cou);
}
}
루프를 두개를 걸어야할지 dealy 값으로 조절해야할지 전혀 모르겠씁니다 ㅜㅜㅜ 도와주세요 ㅜㅜ
|