Notice
Recent Posts
Recent Comments
Link
이런거 저런거 그런거
조도센서값을 도트 매트릭스에 표시하기 본문
그냥 숫자,문자 표시하기엔 심심한 것 같아 빵판 살 때 배송비가 아까워서 추가로 같이 샀던 조도 센서 값을 표시해 보기로 했다.
"[YwRobot] 아두이노 조도센서 모듈 [SEN030101]"
이 부품을 아래와 같이 연결하고 조도센서값을 analogRead()로 읽은 값을 표시해보았다.
도트 매트릭스에 나름 표시 할 수 있는 숫자가 00 ~ 99 이므로
읽은 값을 10으로 나눈 값으로 표시하기로 했다.
사전에 도트매트릭스에 표시 할 숫자 0 ~ 9 패턴 9개는 미리 만들어놓고
들어온 입력에 대해 적당한 위치(십의자리, 일의자리)에 해당 패턴을 써주는 방법으로...
#define MAX7219_CLK (10)
#define MAX7219_CS (11)
#define MAX7219_DIN (12)
/*
* LED Matrix
*/
#define DECODE_MODE_ADDR (0x09)
#define DECODE_MODE_VAL (0x00)
#define INTENSITY_ADDR (0x0A) //Bright Setting (0x00 ~ 0x0F)
#define INTENSITY_VAL (0x00)
#define SCAN_LIMIT_ADDR (0x0B) //How many use digit led (line count in matrix led device)
#define SCAN_LIMIT_VAL (0x07)
#define POWER_DOWN_MODE_ADDR (0x0C)
#define POWER_DOWN_MODE_VAR (0x01)
#define TEST_DISPLAY_ADDR (0x0F)
#define TEST_DISPLAY_VAL (0x00)
/* LED Pattern */
const char NUMBER[10][3] = {
{0x1f, 0x11, 0x1f}, //0
{0x00, 0x00, 0x1f}, //1
{0x1d, 0x15, 0x17}, //2
{0x15, 0x15, 0x1f}, //3
{0x07, 0x04, 0x1f}, //4
{0x17, 0x15, 0x1d}, //5
{0x1f, 0x15, 0x1d}, //6
{0x03, 0x01, 0x1f}, //7
{0x1f, 0x15, 0x1f}, //8
{0x17, 0x15, 0x1f} //9
};
void write_to_max7219(uint8_t addr, uint8_t value)
{
digitalWrite(MAX7219_CS, LOW); //ChipSelect to LOW
shiftOut(MAX7219_DIN, MAX7219_CLK, MSBFIRST, addr);
shiftOut(MAX7219_DIN, MAX7219_CLK, MSBFIRST, value);
digitalWrite(MAX7219_CS, HIGH); //ChipSelect to HIGH
}
void init_max7219(void)
{
pinMode(MAX7219_CLK, OUTPUT);
pinMode(MAX7219_CS, OUTPUT);
pinMode(MAX7219_DIN, OUTPUT);
//settings
write_to_max7219(DECODE_MODE_ADDR, DECODE_MODE_VAL);
write_to_max7219(INTENSITY_ADDR, INTENSITY_VAL);
write_to_max7219(SCAN_LIMIT_ADDR, SCAN_LIMIT_VAL);
write_to_max7219(POWER_DOWN_MODE_ADDR, POWER_DOWN_MODE_VAR);
write_to_max7219(TEST_DISPLAY_ADDR, TEST_DISPLAY_VAL);
}
/*
* Light Sensor
*/
#define LIGHT_SENSOR_PIN (0)
void init_light_sensor(void)
{
/* Do Nothing */
}
int read_light_sensor(void)
{
return analogRead(LIGHT_SENSOR_PIN);
}
/*
* Functions
*/
void setup()
{
Serial.begin(115200);
init_max7219();
init_light_sensor();
}
void loop()
{
int light_sensor_value;
unsigned int i;
unsigned char display_data[8] = {0,};
light_sensor_value = read_light_sensor() / 10;
memcpy(&(display_data[5]), NUMBER[light_sensor_value % 10], 3);
memcpy(&(display_data[1]), NUMBER[((light_sensor_value % 100) / 10)], 3);
for (i = 0; i < 8; i++) {
write_to_max7219(i+1, display_data[i]);
}
delay(500);
Serial.println(read_light_sensor());
}
완성~~
다음엔 뭘 해볼까나...
'이것저것 해보기 > 아두이노 가지고 놀기' 카테고리의 다른 글
4개 LED Matrix (8x32) 컨트롤 하기 (0) | 2019.10.06 |
---|---|
Matrix LED를 좀 쉽게 컨트롤하는 방법(MAX7219) (0) | 2019.09.21 |
8x8 Led Matrix를 전체 컨트롤 해 보기 (0) | 2019.09.17 |
8x8 LED 매트릭스 한 줄 컨트롤 해보기 (0) | 2019.09.08 |
8x8 LED 매트릭스에서 LED 하나 깜박거리게 해보기 (0) | 2019.09.08 |
Comments