질문게시판 > 답변 : 아두이노 세븐 세그먼트 제어

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 질문게시판

답변 : 아두이노 세븐 세그먼트 제어

페이지 정보

작성자 master 작성일19-08-29 21:21 조회6,768회 댓글0건

본문

 

// DateTime : 2019-08-29 오후 9:11:02
// by Ok-Hyun Park
//
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
//
#define A          3
#define B          4
#define C          8
#define D          10
#define E          9
#define F          7
#define G          11
#define digit1     6
#define digit2     5
#define PIN        12
#define NUMPIXELS  20
#define buttonPin  2
//
Adafruit_NeoPixel pixels=Adafruit_NeoPixel(NUMPIXELS,PIN,NEO_GRB+NEO_KHZ800);
//
const int segs[7]={ A,B,C,D,E,F,G};
const int numbers[10][7]={{ 1,1,1,1,1,1,0},{ 0,1,1,0,0,0,0},{ 1,1,0,1,1,0,1},{ 1,1,1,1,0,0,1},{ 0,1,1,0,0,1,1},{ 1,0,1,1,0,1,1},{ 1,0,1,1,1,1,1},{ 1,1,1,0,0,1,0},{ 1,1,1,1,1,1,1},{ 1,1,1,1,0,1,1},};
const int NUMBER_OF_FIELDS=2;
//
int  values[NUMBER_OF_FIELDS];
int  bookled,delayval=500,k=0,j=0,i=0;
int  fieldIndex=0,randomNum=0;
char ch,store=0;
//
void setup(){
  Serial.begin(9600);
  #if defined(__AVR_ATtiny85__)
    if(F_CPU==16000000)clock_prescale_set(clock_div_1);
  #endif
  pixels.begin();
  pinMode(buttonPin,INPUT_PULLUP);
  for(int i=0i<7i++){ pinMode(segs[i],OUTPUT); }
  pinMode(digit1,OUTPUT); pinMode(digit2,OUTPUT);
}
//
void loop(){
  if(Serial.available()){
    ch=Serial.read();
    if(store!=ch){
      if(store>='0'&&store<='9'){
        if(fieldIndex<NUMBER_OF_FIELDS){
          values[fieldIndex]=(values[fieldIndex]*10)+((int)store-'0');
        }
      }
      else if(store==','){ fieldIndex++; }
      else               { randomNum=values[0]; bookled=values[1]; fieldIndex=0values[0]=0; }
      store=ch;
    }
  }
  //
  lightnumber1(randomNum%10); delay(10);
  lightnumber2(randomNum/10); delay(10);
  //
  pixels.clear(); pixels.show();
  //
  if(digitalRead(buttonPin)==LOW){
    randomNum=0;
    for(j=0j<5j++){
      for(k=0k<3k++){
        pixels.setPixelColor(bookled-2+k,pixels.Color(10,10,10));
      }
      pixels.show(); delay(delayval); pixels.clear();
      pixels.show(); delay(delayval);
    }
  }
}
//
void lightnumber1(int num1){
  digitalWrite(digit1,LOW); digitalWrite(digit2,HIGH);
  for(int i=0i<7i++){ digitalWrite(segs[i],numbers[num1][i]); }
}
//
void lightnumber2(int num2){
  digitalWrite(digit1,HIGH); digitalWrite(digit2,LOW);
  for(int i=0i<7i++){ digitalWrite(segs[i],numbers[num2][i]); }
}

 

루프문만 보면 3종류의 코드가 있습니다.

 

  if(Serial.available()){
    ch=Serial.read();
    if(store!=ch){
      if(store>='0'&&store<='9'){
        if(fieldIndex<NUMBER_OF_FIELDS){
          values[fieldIndex]=(values[fieldIndex]*10)+((int)store-'0');
        }
      }
      else if(store==','){ fieldIndex++; }
      else               { randomNum=values[0]; bookled=values[1]; fieldIndex=0values[0]=0; }
      store=ch;
    }
  }
이 부분은 시리얼 수신 데이터가 있어야하므로 평소에는 실행되지 않습니다.

  if(digitalRead(buttonPin)==LOW){
    randomNum=0;
    for(j=0j<5j++){
      for(k=0k<3k++){
        pixels.setPixelColor(bookled-2+k,pixels.Color(10,10,10));
      }
      pixels.show(); delay(delayval); pixels.clear();
      pixels.show(); delay(delayval);
    }
  }
이 부분은 스위치를 눌렀을 때만 동작하므로 평소에는 실행되지 않습니다.

  //
  lightnumber1(randomNum%10); delay(10);
  lightnumber2(randomNum/10); delay(10);
  //
  pixels.clear(); pixels.show();

중간에는  이 코드가 들어 있는데요
일 자리는 10ms 딜레이라서 10ms 동안켜지지만
십 자리를 출력 후 10ms 딜레이라서 10ms 동안 켜지는 것으로 생각하겠지만

  pixels.clear(); pixels.show();
이 코드를 실행하는데에도 시간이 걸리므로 십자리 출력에는 일자리보다 더 많은 시간동안 출력 됩니다.
시리얼수신이 있거나 스위치를 눌렀을 때는 훨씬 더 많은 시간동안 십자리가 표시됩니다.

  lightnumber1(randomNum%10); pixels.clear(); pixels.show();
  lightnumber2(randomNum/10); pixels.clear(); pixels.show();

이런식으로 변경하면 특별한(시리얼수신 또는 스위치입력) 일이 발생하지 않을 때에 일자리와 십자리가 동일한 시간동안 켜지게 됩니다.

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

댓글 : 0

조회수 : 6,768

등록된 댓글이 없습니다.

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[29] master  17-10-29
질문 타이머 인터럽트를 이용한 LCD제어 질문입니다. Tell 새글 23-09-27
답변 답변 : 타이머 인터럽트를 이용한 LCD제어 질문입니다… master 새글 09:19
질문 아두이노 무한루프 코드 질문... 댓글[1] vnpaz 새글 23-09-27
질문 질문있습니다ㅠㅠ 부탁드려요 댓글[1] keldeo 새글 23-09-27
질문 0 ~ 99 이중 for문으로 작성하는법! 댓글[2] 상어 새글 23-09-26
질문 리튬배터리로 화면 출력 질문드립니다 ! 댓글[1] 멘탈나간다 새글 23-09-26
질문 lcd,바코드,서보모터, 아두이노 질문 드립니다. ㅠㅠ 댓글[1] 아두이노개발자 새글 23-09-26
질문 stm32에서 변수 값을 유지하는 방법 댓글[1] 라칸  23-09-26
질문 안녕하세요 스위치로 led 제어 관련 질문이 있습니다 댓글[1] 노형빈  23-09-25
질문 16X16 도트 매트릭스 구동방법 질문입니다. 댓글[1] 첨부파일맹균  23-09-25
질문 stm32에서 RTC 시간 함수 쓰는데 의문점 댓글[1] 라칸  23-09-25
질문 GPS 모듈 관련 질문입니다. 댓글[3] 지구과학  23-09-22
질문 아두이노 블루투스와 초음파센서를 이용한 장애물 정지 댓글[2] 둘둘이  23-09-22
답변 답변 : 아두이노 블루투스와 초음파센서를 이용한 장애물… 댓글[1] master  23-09-25
질문 stm32 보드에서 시간설정과 불러오기를 하는데 댓글[5] 라칸  23-09-22
질문 아두이노 인터럽트 질문입니다. 댓글[2] Tell  23-09-21
답변 답변 : 아두이노 인터럽트 질문입니다. 댓글[1] master  23-09-22
질문 아두이노와 거리 감지 센서의 전류 관련 댓글[1] hmkim  23-09-21
질문 아두이노 코딩 질문있습니다. 도와주세요.... 댓글[1] 첨부파일vnpaz  23-09-20
질문 아두이노를 사용한 dc모터 위치제어 댓글[2] 모터위치  23-09-20
질문 stm32 디버깅이나 rst버튼 없이 하는 방법좀 댓글[1] 라칸  23-09-20
질문 LCD에 숫자 표기법을 바꾸고 싶습니 댓글[2] Bs드리프터  23-09-19
질문 알코올 측정기(MQ-3) 관련 질문 소오금  23-09-18
답변 답변 : 알코올 측정기(MQ-3) 관련 질문 master  23-09-19
질문 스텝모터 제어하는 소스파일 수정방법 질문드립니다. Bs드리프터  23-09-15
답변 답변 : 스텝모터 제어하는 소스파일 수정방법 질문드립니… 댓글[1] master  23-09-15
질문 atmega 128을 이용한 악기 튜너기 댓글[1] 아두이노짱  23-09-15
질문 stm32 보드 ip주소 찾는법 댓글[1] 라칸  23-09-13
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전