어제 한 자리 7세그먼트 캐소드를 이용해서 사이즈를 표시했는데요,
핀을 너무 많이 사용하는 것이 고민이었습니다.
그래서 사실 다른 기능도 사용할 것을 생각하면 아두이노를 2개 이상 써야 하나 싶었어요.
그런데 정말 고맙게도 그 포스팅을 보고 피드백을 받았어요! 다음과 같은 방법을 알게 되었습니다.
아래는 각각의 방법에 대한 간단한 소개입니다.
방법 | 기존 방법(한 자리 7세그먼트 캐소드) | 한 자리 7 세그먼트 캐소드 + 74HC595 시프트 레지스터 사용 | 어댑터 결합형 LCD 모듈 사용 | 4핀 OLED 모듈 사용 |
필요한 핀의 개수 | 8개 | 3개 | 2개 | 2개 |
- 아날로그 핀 | 4개 | 2개 | 3개 | 2개 |
- 디지털 핀 | 4개 | 1개 | 3개 | 0개 |
가격 | 440원(0.56인치 기준) | 440원 + 200원(시프트 레지스터) | 2200원 | 4400원(0.91인치) |
1) 74HC595 시프트 레지스터 사용: datain, latch, clk (아날로그 핀 2개, 디지털 핀 1개)
7세그먼트 캐소드를 사용하되 8비트 시프트 레지스터인 74HC595를 이용하는 것인데요,
- 기존에 만든 코드를 활용할 수 있다는 점
- 틴커캐드 서킷에 이 부품이 있어서 한 번 만들어 볼 수 있다는 점이 장점입니다.
2) 어댑터 결합형 LCD모듈 사용: SCL, SDA (아날로그 핀 2개)
이전에 LCD모듈 사용에 대해 포스팅한 적이 있습니다.
https://juhongeom.tistory.com/3?category=896695
아두이노랑 서킷이랑 2
오늘은 LCD 를 연결하기를 시도했습니다. 서킷에 예제가 있어서 보고 따라해보려 했는데요, 이 녀석이 이 녀석이랑 같은지가 알 수 없어서 다른 예제를 찾아보게 되었습니다. 그 중 제가 갖고 있�
juhongeom.tistory.com
이것도 어댑터가 결합된 것이 있더라구요!
3) OLED 모듈 사용: SCL, SDA (아날로그 핀 2개)
참고한 블로그 링크입니다. - https://baessi.tistory.com/51
[아두이노] OLED[0.96인치(128*64)]에 원하는 그림 출력-NodeMCU포함
안녕하세요 오늘은 OLED에 원하는 그림 출력에 대해서 알려드리겠습니다. 이전에도 OLED를 이용한 예제를 보여드렸는데 이번에는 Adafruit_SSD1306 라이브러리를 이용하여 OLED에 본인이 원하는 그림을
baessi.tistory.com
3), 4)가 제일 핀을 덜 쓰기 때문에 그 둘 중 선택을 해야할 것 같습니다.
저는 4)로 하기로 결정했습니다. ㅋㅋㅋ 조금 비싸긴 하지만 일단 핀의 개수가 가장 큰 변수니까요!
그래도 일단은 틴커캐드에 3), 4)가 없어서 1)로 해보았습니다.
아래는 이에 사용한 코드입니다.
byte dec_digits[] = {0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110,
0b01101101, 0b01111100, 0b00000111, 0b01111111, 0b01100111};
byte eraser = 0b00000000;
int dataPin = 5;
int latchPin = 6;
int clockPin = 7;
int UB = 10; //UpButton
int DB = 11; //DownButton
int num = 0; //화면 표시 숫자
int Size = 0; //정한 사이즈
int SetSize = A5;
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(UB, INPUT_PULLUP);//UpButton 입력
pinMode(DB, INPUT_PULLUP);//DownButton 입력
pinMode(SetSize, INPUT_PULLUP);//사이즈 정하기 버튼 입력
}
void loop() {
if(digitalRead(UB) == LOW){
if(num==9) num = 0;
else num++;
delay(150);
}
if(digitalRead(DB) == LOW){
if(num != 0) num--;
delay(150);
}
segOutput(num);
if(digitalRead(SetSize) == LOW){
Size = num;
segClear();
delay(200);
segOutput(Size);
}
}
void segClear(){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST,eraser);
digitalWrite(latchPin, HIGH);
}
void segOutput(int Number){
segClear();
digitalWrite(latchPin, LOW); // shift out the bits:
shiftOut(dataPin, clockPin, MSBFIRST, dec_digits[Number]);
//take the latch pin high so the LEDs will light up:
digitalWrite(latchPin, HIGH); // pause before next value:
delayMicroseconds(1000);
}
그리고 틴커캐드 링크입니다.
https://www.tinkercad.com/things/jukG1RLe7IU
Circuit design 74HC595 와 7세그먼트 캐소드
3D design '74HC595 와 7세그먼트 캐소드' created by juhong0422 with Tinkercad.
www.tinkercad.com
작동하는 모습입니다.
ㅎㅎ 이제 OLED모듈도 구해야겠군요!^^
'MAKING > 우리반 쌤의 똑똑한 메이커 테이블' 카테고리의 다른 글
코틀린_공부_1 (0) | 2020.09.10 |
---|---|
이것은 바로!! 사업 선정 결과!! (0) | 2020.05.24 |
스테퍼 모터 연구4 (0) | 2020.05.09 |
스테퍼 모터 연구3 (0) | 2020.05.09 |
스테퍼 모터 연구2 (0) | 2020.04.01 |
댓글