[6주차/교재제작] LCD, 7segment 제어하기(with C++)

장다희·2023년 2월 23일
0

Arduino

목록 보기
6/7

week6
2023.02.17
17:00-20:00


🔥 목표

  • LCD 제어 코드 및 회로도 정리

  • 7segment 제어 코드 및 회로도 정리

  • 아두이노 5주차 ppt 교재 제작(LCD, 7segment)

💡 학습 내용

LCD 제어 코드 및 회로도

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20,16,2); // lcd(접근주소, lcd 열의 수, lcd 행의 수)
void setup()
{
   lcd.init();
   lcd.backlight();
   lcd.setCursor(0,0); //0행 0열에 커서 set
   lcd.print("Hello,world!"); // LCD 모니터에 출력
   lcd.setCursor(3,1); //0행 1열에 커서 set
   lcd.print("SWeat!"); // LCD 모니터에 출력
}
void loop()
{
}

7segment 제어 코드 및 회로도

/*
 제목      : 7세그먼트로 숫자 표시하기
 내용      : 7세그먼트를 사용하여 0부터 9까지 숫자를 표시해 봅시다. 
 */

// 7세그먼트는 총 8개의 LED로 구성이 되어 있습니다.
// 본 예제에서는 캐소드(Common Cathode) 타입을 사용하므로, HIGH(1) 값으로 설정합니다.
// 켜고자 하는 LED의 핀에 HIGH(1) 값을 보내도록 설정합니다.
// 반대로, 공통 애노드(Common Anode) 타입의 7세그먼트을 사용할 경우, LOW(0) 값으로 설정합니다.
// 7세그먼트 각각 LED에 핀을 할당합니다. {A, B, C, D, E, F, G, H}
int segmentLEDs[] = {2, 3, 4, 5, 6, 7, 8, 9};
// 지정된 LED 개수
int segmentLEDsNum = 8;

// 각 숫자에 대한 LED 설정 값을 정의합니다.
// 숫자에 매칭되는 LED의 로직레벨을 LOW(0) 상태로 설정합니다.
int digitForNum[10][8] = {
// {A, B, C, D, E, F, G, H}
   {1, 1, 1, 1, 1, 0, 1, 0}, //0
   {0, 1, 1, 0, 0, 0, 0, 0}, //1
   {1, 1, 0, 1, 1, 1, 0, 0}, //2
   {1, 1, 1, 1, 0, 1, 0, 0}, //3
   {0, 1, 1, 0, 0, 1, 1, 0}, //4
   {1, 0, 1, 1, 0, 1, 1, 0}, //5
   {1, 0, 1, 1, 1, 1, 1, 0}, //6
   {1, 1, 1, 0, 0, 0, 0, 0}, //7
   {1, 1, 1, 1, 1, 1, 1, 0}, //8
   {1, 1, 1, 1, 0, 1, 1, 0}  //9
   
};

// 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
// 변수를 선언하거나 초기화를 위한 코드를 포함합니다.
void setup() {
   // 7세그먼트 각각 LED에 연결된 핀을 OUTPUT으로 설정합니다.
   for (int i = 0 ; i < segmentLEDsNum ; i++) {
      pinMode(segmentLEDs[i], OUTPUT);
   }
}

// setup() 함수가 호출된 이후, loop() 함수가 호출되며,
// 블록 안의 코드를 무한히 반복 실행됩니다.
void loop() {
   // 0부터 9까지 숫자를 순서대로 표시합니다.
   for (int i = 0 ; i < 10 ; i++) {
      // 각 숫자에 대한 각각 LED의 로직레벨을 설정합니다.
      for (int j = 0 ; j < segmentLEDsNum ; j++) {
         digitalWrite(segmentLEDs[j], digitForNum[i][j]);
      }
      // 1초 동안 대기합니다.
      delay(1000);
   }
   delay(1000);
}

5주차 ppt 교재 제작














































💥문제와 해결 과정

LCD 주소 설정

LCD I2c의 경우에는 주소를 맞춰주지 않으면 작동을 하지 않기에 주소를 찾는 작업을 해줘야 한다. 주소가 보통은 0X27과 0X3F라고 나와있지만 이번 교재를 만들며 사용했던 LCD는 주소가 0X20이었기에 이를 알아차리는 데 시간이 걸렸고, LCD의 종류 또한 참고자료에 있던 것과 달랐기에 이를 수정하는 데 시간이 걸렸다.

7 segment

7 segment 파트의 회로를 제작하는 과정에서는 7-segment의 LED가 a, b, c, d, e, f, g 중 어디에 해당하는지 확인해야 한다. 이 부품 역시 참고 자료에 나와있는 7-segment의 LED 배열과 달라서 하나하나 LED의 위치를 확인해야 했기에 시간이 걸렸다.

아두이노가 제대로 동작하지 않을 때

위의 두 과정을 거치며 아두이노가 제대로 동작하지 않을 때는 부품의 타입과 부품에 따른 기본 설정이 다르게 되어있지는 않은지를 확인해야 한다는 것을 알게되었다.

0개의 댓글