반응형
가변저항 값이 약간 오차가 생기는 이유를 찾고 있다.
가변저항 값을 읽어 표시하는 코드
//a,b,c,d,e,f,g 상태값
const byte segValue[10][7] = {
{1,1,1,1,1,1,0}, //0
{0,1,1,0,0,0,0}, //1
{1,1,0,1,1,0,1}, //2
{1,1,1,1,0,0,1}, //3
{0,1,1,0,0,1,1}, //4
{1,0,1,1,0,1,1}, //5
{1,0,1,1,1,1,1}, //6
{1,1,1,0,0,0,0}, //7
{1,1,1,1,1,1,1}, //8
{1,1,1,1,0,1,1} //9
};
//const byte segPin[8]={7,3,A3,A1,A0,6,A4,A2}; //사용핀{a,b,c,d,e,f,g,dp} 순서대로임
//const byte digitPin[4] = {8,5,4,A5}; //segment 위치 핀
const byte segPin[8]={7,3,11,A1,A0,6,10,A2}; //사용핀{a,b,c,d,e,f,g,dp} 순서대로임
const byte digitPin[4] = {8,5,4,9}; //segment 위치 핀
const byte interruptPin = 2;//인터럽트핀
extern volatile unsigned long timer0_millis; //타이머변수
boolean state = true; //false //처음 타이머 동작 제어
unsigned int readTime=0; //현재시간
int d1 = 0; //1의 자리
int d2 = 0; //10의 자리
int d3 = 0; //100의 자리
int d4 = 0; //1000의 자리
void setup() {
Serial.begin(9600);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), switchFn, FALLING);
for(int i=0;i<10;i++){
pinMode(segPin[i], OUTPUT);
}
for(int j=0;j<4;j++){
pinMode(digitPin[j], OUTPUT);
digitalWrite(digitPin[j], HIGH);
}
}
void loop() {
readTime = analogRead(A5); //1000: 1sec, 10: 10milisecond
Serial.println(readTime);
d1 = readTime % 10; //1의 자리
d2 = (readTime/10)%10; //10의 자리
d3 = (readTime/100)%10; //100의 자리
d4 = (readTime/1000)%10; //1000의 자리
segOutput(3,d1,0);
segOutput(2,d2,0);
segOutput(1,d3,0);
segOutput(0,d4,0);
//if(readTime>=0)segOutput(3,d1,0); //1의 자리
//if(readTime>=10) segOutput(2,d2,0); //10의 자리
//if(readTime>=100) segOutput(1,d3,0); //10의 자리
//if(readTime>=1000) segOutput(0,d4,0); //10의 자리
}
//스위치 버튼 인터럽트 결과 처리
void switchFn(){
state=!state;
if(state==true){ // false
timer0_millis=0; //타이머 변수 리셋
}
}
//LED 초기화
void segClear(){
for(int i=0;i<8;i++){
digitalWrite(segPin[i], LOW);
}
}
//LED 출력
void segOutput(int d, int Number, int dp){
segClear();
digitalWrite(digitPin[d], LOW);
for(int i=0;i<7;i++){
digitalWrite(segPin[i], segValue[Number][i]);
}
digitalWrite(segPin[7], dp);
delayMicroseconds(1000);
digitalWrite(digitPin[d], HIGH);
}
씨리얼 모니터에 나오는 값
참고 이미지 - 이런 식으로 구현한 Smart Knob 스마트 노브 참고
반응형
'개발자 > Arduino' 카테고리의 다른 글
아두이노 DHT11 온도 습도 센서 실습 (0) | 2022.04.11 |
---|---|
아두이노 포모도로 시계 만들기 (0) | 2022.04.11 |
Arduino Uno로 ATtiny13 프로그래밍 (0) | 2022.04.07 |
아두이노 우노 보드와 브레드 보드 고정 아크릴 받침 (0) | 2022.04.07 |
아두이노 dht22 온도 습도 센서 테스트 (0) | 2022.04.04 |
아두아노 millis()함수 시간 다루기 (0) | 2022.04.04 |
4 Digit 7 Segment Display 아두이노 제어 (0) | 2022.03.31 |
아두이노 버튼처리 한번, 버튼 길게, 더블 클릭 감지하기 (0) | 2022.03.09 |
더욱 좋은 정보를 제공하겠습니다.~ ^^