BASIC4MCU | 질문게시판 | 선생님들 FND 디스플레이에 관련하여 질문 드립니다.
페이지 정보
작성자 현태 작성일2018-09-10 11:21 조회5,409회 댓글0건본문
#include <SoftwareSerial.h>
#include "SevenSegmentExtended.h"
const byte PIN_CLK = A4; // define CLK pin
const byte PIN_DIO = A5; // define DIO pin
char Buffer[50];
int hour,min,second,ip,id,vol,dim,info;
SevenSegmentExtended display(PIN_CLK, PIN_DIO);
const unsigned int clockSpeed = 1;
void setup() {
Serial.begin(115200);
display.begin();
display.setBacklight(25);
}
void loop() {
int cnt = 0;
if (Serial.available() < 1) {
return 0;
}
unsigned long start = millis();
while (millis() - start < 100) {
if (Serial.available() < 1) {
continue;
}
char data = Serial.read();
if (data == '\n') {
Buffer[cnt] = '\0';
break;
}
Buffer[cnt++] = data;
}
while(Serial.available() > 0) {
Serial.read();
}
//02,58,38,IP093,ID123,V0,D0,I0 -> 라즈베리 파이를 아두이노 시리얼로 넘어오는 프로토콜입니다. IP와 ID는 임의로 줬습니다. V0, D0, I0는 각각의 버튼을 누를 때 0~3까지 변합니다.
sscanf(Buffer,
"%d,%d,%d,IP%d,ID%d,V%d,D%d,I%d",
&hour,&min,&second,&ip,&id,&vol,&dim,&info); // 파싱한 부분입니다.
if (hour < 10) // Print hour value
{
Serial.print("0");
Serial.print(hour);
}
else
{
Serial.print(hour);
}
Serial.print(",");
if (min < 10) // Print min value
{
Serial.print("0");
Serial.print(min);
}
else
{
Serial.print(min);
}
Serial.print(",");
if (second < 10) // Print second value
{
Serial.print("0");
Serial.print(second);
}
else
{
Serial.print(second);
}
Serial.print(",IP");
if (ip < 10) // Print second value
{
Serial.print("00");
Serial.print(ip);
}
if (ip < 100)
{
Serial.print("0");
Serial.print(ip);
}
else
{
Serial.print(ip);
}
Serial.print(",ID"); // Print ID value
if (id < 10) // Print second value
{
Serial.print("00");
Serial.print(id);
}
if (id < 100)
{
Serial.print("0");
Serial.print(id);
}
else
{
Serial.print(id);
}
Serial.print(",V"); // Print Vol value
Serial.print(vol);
Serial.print(",D"); // Print Dim value
Serial.print(dim);
Serial.print(",I"); // Print Info value
Serial.println(info);
display.printTime(hour,min, true); // FND Seven Segment Display에 시간을 표시합니다.
switch(dim %4) //Dimmer setting --> D0~3 값을 읽어 밝기를 조절합니다. 정상작동.
{
case 0:
display.setBacklight(35);
break;
case 1:
display.setBacklight(100);
break;
case 2:
display.setBacklight(0);
break;
case 3:
display.setBacklight(25);
break;
}
}
현재 라즈베리파이에 버튼들을 연동하였고, 파이썬을 돌려서 아두이노 시리얼로 프로토콜을 날리고 있습니다. (각 버튼의 Input은 라즈베리파이에서 감지하여 D0~3, V0~3, I0~3의 값을 파이썬으로 시리얼을 통해 아두이노에게 주고 있습니다. 아두이노에 직접적으로 연결 된 버튼은 없는 상황입니다.)
여기서 질문 드리고 싶은게 Switch - Case문을 이용하여 딤머 버튼을 눌렀을 때 D0~3의 값을 인지하고 디스플레이 밝기를 조절하는데는 성공했습니다.
하지만 볼륨과 인포 버튼을 눌러 V0~3, I0~3으로 각각 변경하였을 때 FND의 시간 표시를 멈추고 각 값에 원하는 정보를 표시하고 싶은데 잘 안됩니다.
ex) 볼륨 값이 V0에서 V1로 바꼈을 때 FND 디스플레이에 "VOL1" 을 약 1초간 표시 한 후 다시 시간 표시.
상기의 문제점에 대해 조언 부탁 드립니다.
감사합니다.
댓글 0
조회수 5,409등록된 댓글이 없습니다.