정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노 7세그먼트와 led 동시 출력? 동시제어 코딩질문입니다!! 아두이노 고수님들 제발 도와주세요 너무급해요
숀리 | 2018-12-15

제가 한자리 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 값으로 조절해야할지 전혀 모르겠씁니다 ㅜㅜㅜ 도와주세요 ㅜㅜ

프로필사진

kocoafab 2018-12-26 11:54:35

안녕하세요. 코코아팹 입니다.

 

질문게시글을 올리실 경우에는 공지글을 참고하셔서 질문 양식을 맞춰서 작성 부탁 드립니다.

(공지글 보러가기: https://kocoafab.cc/fboard/view/0 )

 

* 양식에 맞춘 질문글은 다른 분들께서 답변을 달아주시는 데 큰 도움이 됩니다.  

* 저희 에디터들이 알고 있는 지식에 대해서는 가장 먼저 답변 드릴께요. 

* 저희도 공부하거나 테스트해봐야 하는 건, 다른 회원분들께서 답변하실 수 있도록 양보하겠습니다:) 

이전글   |    아두이노 초보인데 이 경우 어떻게 접근을 해야할까요??... 2018-12-14
다음글   |    바람으로 발전되는 전압 구하기 2018-12-16