Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 약수 구하기
- ESP32_S2_WROVER
- kotlin
- 7세그먼트
- string함수
- GCD
- 우송대 라즈베리파이 피코
- 라즈베리파이 피코
- 재정의함수
- Arduoin
- 개발 보드
- PICO4
- L293D
- 아두이노
- 카이캐드 다운로드
- 아두이노 모터 드라이버
- 코틀린
- 추상화함수
- ATmega328p
- 업캐스팅
- 카이캐드
- 카이캐드 설치
- 우송대
- ESP32_S2
- androidstudio
- 자료구조
- 안드로이드스튜디오
- KiCad
- 우송대학교
- 유클리드 호제법
Archives
- Today
- Total
개발자의 생활
2023년 1학기 5주차 (7세그먼트 제어) 본문
5_4) 1 digit 7 segment, 2개 버튼을 이용하여 상/하향 카운터
int Pin_Map[8] = {11, 10, 9, 8, 7, 6, 5, 4};
int Button_up = 3, Button_down = 2;
bool ButtonCheck_1 = false, ButtonCheck_2 = false;
int number = 0;
bool sgmt[10][8] = {
{0, 0, 0, 0, 0, 0, 1, 1}, //0
{1, 0, 0, 1, 1, 1, 1, 1}, //1
{0, 0, 1, 0, 0, 1, 0, 1}, //2
{0, 0, 0, 0, 1, 1, 0, 1}, //3
{1, 0, 0, 1, 1, 0, 0, 1}, //4
{0, 1, 0, 0, 1, 0, 0, 1}, //5
{0, 1, 0, 0, 0, 0, 0, 1}, //6
{0, 0, 0, 1, 1, 0, 1, 1}, //7
{0, 0, 0, 0, 0, 0, 0, 1}, //8
{0, 0, 0, 0, 1, 0, 0, 1}, //9
};
void setup() {
// put your setup code here, to run once:
for (int i = 0; i < sizeof(Pin_Map) / sizeof(int); i++) { //0 ~ 배열 크기만큼 1씩 증가
pinMode(Pin_Map[i], OUTPUT);//Pin_Map 배열에 각 핀을 출력으로 설정
digitalWrite(Pin_Map[i], true);// 모든핀의 초기상태를 5V 출력
}
pinMode(Button_up, INPUT);
pinMode(Button_down, INPUT);
sgmt_out(number);//세그먼트 출력 함수 정의
}
void loop() {
if (digitalRead(Button_up) == true && ButtonCheck_1 == false) {
ButtonCheck_1 = true;
number++;
if(number >= 9) number = 0;
sgmt_out(number);//세그먼트 출력 함수 정의
} else if (digitalRead(Button_up) == false) {
ButtonCheck_1 = false;
}
if (digitalRead(Button_down) == true && ButtonCheck_2 == false) {
ButtonCheck_2 = true;
if(number <= 0) number = 10;
number--;
sgmt_out(number);//세그먼트 출력 함수 정의
} else if (digitalRead(Button_down) == false) {
ButtonCheck_2 = false;
}
}
void sgmt_out(int num) {//출력할 값을 매개변수를 받아온다
for (int i = 0; i < sizeof(Pin_Map) / sizeof(int); i++) {//0 ~ 배열 크기만큼 1씩 증가
digitalWrite(Pin_Map[i], sgmt[num][i]);//각 핀마다 출력값을 sgmt에 매칭시켜준다.
}
}
5-6) 4 digit 7 segment, 가변저항을 이용하여 가변저항값 표시
bool sgmt[10][7] = {
{0, 0, 0, 0, 0, 0, 1}, //0
{1, 0, 0, 1, 1, 1, 1}, //1
{0, 0, 1, 0, 0, 1, 0}, //2
{0, 0, 0, 0, 1, 1, 0}, //3
{1, 0, 0, 1, 1, 0, 0}, //4
{0, 1, 0, 0, 1, 0, 0}, //5
{0, 1, 0, 0, 0, 0, 0}, //6
{0, 0, 0, 1, 1, 0, 1}, //7
{0, 0, 0, 0, 0, 0, 0}, //8
{0, 0, 0, 0, 1, 0, 0} //9
};
int sgmt_PinMap[7] = {12, 11, 10, 9, 8, 7, 6};
int ch_Pin[4] = {5, 4, 3, 2};
void setup() {
for (int i = 0; i < 7; i++) {
pinMode(sgmt_PinMap[i], OUTPUT);
}
for (int i = 0; i < 4; i++) {
pinMode(ch_Pin[i], OUTPUT);
digitalWrite(ch_Pin[i], false);
//모든체널의 핀 전압을 0V 로 하여
//전압차가 생기지 않게 하여 off 로 만든다
}
}
void loop() {
int value = analogRead(A1);
hc4_sgmt(value);
}
void hc4_sgmt(int num) {
int ch_num[4];
ch_num[0] = (num % 10000) / 1000;
ch_num[1] = (num % 1000) / 100;
ch_num[2] = (num % 100) / 10;
ch_num[3] = (num % 10) / 1;
for (int i = 0; i < 4; i++) {
digitalWrite(ch_Pin[i], true);//on
for (int j = 0; j < 7; j++) {
digitalWrite(sgmt_PinMap[j], sgmt[ch_num[i]][j]);
}
delay(4);
digitalWrite(ch_Pin[i], false);//off
}
}
'과제 > 아두이노' 카테고리의 다른 글
2024년2학기 9주차 과제 (0) | 2024.11.09 |
---|---|
2023년 1학기 6주차 (0) | 2023.04.16 |
2023년 1학기 4주차 과제 (0) | 2023.04.01 |
2023년 1학기 3주차 과제(millis사용하기) (0) | 2023.03.24 |
2023년 1학기 2주차 실습과제 (0) | 2023.03.17 |