도트매트릭스 테스트

Slug
proj_dot_matrix
Date
Sep 11, 2021 → Sep 30, 2021
Tags
Arduino
C++
notion image
 
💡
아두이노 나노를 활용하여, 도트매트릭스에 원하는 정보 표출해보기
 
 
 
 

도트매트릭스 2개를 활용한 온습도 정보

준비물

  • 아두이노 나노
  • 점퍼선
  • 7X7 도트매트릭스 2개
  • 온습도 센서
 

코드 순서

  • 0~9, °C, %를 표시할 높이가 5인 바이트 배열 정리
  • 회로도 구조상 90% 돌려서 표현하기 위해, 배열 값 회전
  • LED 및 온습도 센서 초기화
  • 2초에 1번씩 온도와 LED 정보 표출하기
 

코드

전체 코드
#include "LedControl.h" #include <DHT11.h> LedControl dot = LedControl(12, 11, 10, 2); DHT11 dht11(A1); const int column = 3; const int row = 5; byte numbers[10][row][column] = { { {1, 1, 1}, {1, 0, 1}, {1, 0, 1}, {1, 0, 1}, {1, 1, 1} }, { {0, 1, 0}, {1, 1, 0}, {0, 1, 0}, {0, 1, 0}, {1, 1, 1} }, { {1, 1, 1}, {0, 0, 1}, {1, 1, 1}, {1, 0, 0}, {1, 1, 1} }, { {1, 1, 1}, {0, 0, 1}, {1, 1, 1}, {0, 0, 1}, {1, 1, 1} }, { {1, 0, 1}, {1, 0, 1}, {1, 1, 1}, {0, 0, 1}, {0, 0, 1} }, { {1, 1, 1}, {1, 0, 0}, {1, 1, 1}, {0, 0, 1}, {1, 1, 1} }, { {1, 1, 1}, {1, 0, 0}, {1, 1, 1}, {1, 0, 1}, {1, 1, 1} }, { {1, 1, 1}, {1, 0, 1}, {1, 0, 1}, {0, 0, 1}, {0, 0, 1} }, { {1, 1, 1}, {1, 0, 1}, {1, 1, 1}, {1, 0, 1}, {1, 1, 1} }, { {1, 1, 1}, {1, 0, 1}, {1, 1, 1}, {0, 0, 1}, {1, 1, 1} } }; byte marks[2][row][column+1] = { { {0, 0, 0, 0}, {1, 0, 0, 0}, {0, 1, 1, 1}, {0, 1, 0, 0}, {0, 1, 1, 1} }, { {0, 0, 0, 0}, {1, 0, 0, 1}, {0, 0, 1, 0}, {0, 1, 0, 0}, {1, 0, 0, 1} } }; byte reversed_numbers[10][column][row]; byte reversed_marks[2][column+1][row]; boolean isTemp = true; void printNumber(int number, int index, boolean isUp = true) { for (int x = 0; x < column; x++) { for (int y = 0; y < row; y++) { if (index < 2) dot.setLed(0, column - x + 4 - index * 4, y + 1, reversed_numbers[number][x][y] ? true : false); else dot.setLed(1, column - x + 4, y + 1, reversed_numbers[number][x][y] ? true : false); } } } void printMark(boolean isTemp) { for (int x = 0; x < column+1; x++) { for (int y = 0; y < row; y++) { dot.setLed(1, column - x, y + 1, reversed_marks[isTemp ? 0 : 1][x][y] ? true : false); } } } void setup() { Serial.begin(9600); dot.shutdown(0, false); dot.setIntensity(0, 1); dot.clearDisplay(0); dot.shutdown(1, false); dot.setIntensity(1, 1); dot.clearDisplay(1); for (int n = 0; n < 10; n++) { for (int y = column - 1; y >= 0; y--) { for (int x = 0; x < row; x++) { reversed_numbers[n][y][x] = numbers[n][x][y]; } } } for (int n = 0; n < 2; n++) { for (int y = column; y >= 0; y--) { for (int x = 0; x < row; x++) { reversed_marks[n][y][x] = marks[n][x][y]; } } } } void loop() { int i; float getH; float getT; i = dht11.read(getH, getT); if (i == 0) { if (isTemp) { getT = roundf(getT * 10) * 0.1; Serial.print("t:"); Serial.println(getT); printNumber(int(getT / 10), 0, true); printNumber(int(getT) % 10, 1, true); dot.setLed(0, 0, 6, true); printNumber(int(getT * 10) % 10, 2, true); printMark(true); } else { getH = roundf(getH * 10) * 0.1; Serial.print("h:"); Serial.println(getH); printNumber(int(getH / 10), 0, true); printNumber(int(getH) % 10, 1, true); dot.setLed(0, 0, 6, true); printNumber(int(getH * 10) % 10, 2, true); printMark(false); } isTemp = !isTemp; } delay(1000); }
 

결과물

센서를 만지고 있으면 시간이 지나면 값이 변화한다
 
 

도트매트릭스 4개를 활용한 시간 및 온습도 표시

준비물

  • 아두이노 나노
  • 브레드보드, 점퍼선
  • 7X7 도트매트릭스 4개
  • 온습도 센서
  • DS1302 RTS 모듈
  • 블루투스 모듈 HC-06
 
 

결과물