답변 2: 가변저항으로 세그먼트
페이지 정보
작성자 master 작성일18-06-18 18:27 조회6,760회 댓글2건본문
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-06-20 오전 9:12:58
// by Ok-Hyun Park
//
int segPin[]={4,2,3,7,8,10,11}; // a,b,c,d,e,f
int sensorPin=A5;
//
//char seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //캐소드
char seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //애노드
//
int Val=0;
//
void setup(){
for(int i=0;i<7;i++)pinMode(segPin[i],OUTPUT);
Serial.begin(9600);
}
//
void fnd(int n){
for(int i=0;i<7;i++)digitalWrite(segPin[i], (seg[n]>>i)&1);
}
//
void loop(){
Val=analogRead(sensorPin); Serial.println(sensorVal);
Val=Val*9.0/1023.0; // 0~1023 -> 0~9
fnd(Val);
}
0~9 표시
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-06-20 오전 9:14:38
// by Ok-Hyun Park
//
int segPin[]={4,2,3,7,8,10,11}; // a,b,c,d,e,f
int sensorPin=A5;
//
//char seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //캐소드
char seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //애노드
//
int Val=0;
//
void setup(){
for(int i=0;i<7;i++)pinMode(segPin[i],OUTPUT);
Serial.begin(9600);
}
//
void fnd(int n){
for(int i=0;i<7;i++)digitalWrite(segPin[i], (seg[n]>>i)&1);
}
//
void loop(){
Val=analogRead(sensorPin); Serial.println(sensorVal);
Val=Val*15.0/1023.0; // 0~1023 -> 0~15(0x0F)
fnd(Val);
}
0~F까지 표시하는 예제입니다.
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-06-20 오전 9:15:25
// by Ok-Hyun Park
//
int segPin[]={4,2,3,7,8,10,11}; // a,b,c,d,e,f
int sensorPin=A5;
//
//char seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //캐소드
char seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //애노드
//
int Val=0;
//
void setup(){
for(int i=0;i<7;i++)pinMode(segPin[i],OUTPUT);
Serial.begin(9600);
}
//
void fnd(int n){
for(int i=0;i<7;i++)digitalWrite(segPin[i], (seg[n]>>i)&1);
}
//
void loop(){
Val=analogRead(sensorPin); Serial.println(sensorVal);
Val>>=6; // 0~1023 -> 0~15(0x0F)
fnd(Val);
}
6비트 우쉬프트 시켜도 0~0x0F를 얻을 수 있습니다.
10비트>>6=4비트
//
콤몬 애노드, 콤몬 캐소드에 따라서 코드의 출력 논리가 달라지며
콤몬에 저항 1개 사용하는 것보다 세그에 330옴 저항 7개 사용하고, 콤몬은 전원에 직접 연결하는 것이 좋습니다.
댓글 : 2
조회수 : 6,760
아두이노초보2757님의 댓글
비공개 작성일애노드타입이면 어떻게하나요?
master님의 댓글
master
char fnd_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //캐소드
//char fnd_table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //애노드