미세먼지 작품만들고있는데 주 목적은 LCD에 온도값,먼지값,가스값 출력 및 블루투스 통신을 하려고 합니다 LCD출력구현은 작동이 되나 블루투스 AT통신이 안됩니다
이 소스코드를 바탕으로 무엇이 잘못되었는지 알려주시면 감사하겠습니다
#include <LiquidCrystal.h>
#include <Wire.h>
LiquidCrystal lcd(12, 11, 2, 3, 4, 5);
#include <SoftwareSerial.h>
SoftwareSerial mySerial(8, 9); // RX 9, TX 8
unsigned char Send_data[4] = {0x11, 0x01, 0x01, 0xED}; // 읽는명령
unsigned char Receive_Buff[16]; // data buffer
unsigned long PCS; // 수량 저장 변수
float ug; // 농도 저장 변수
unsigned char recv_cnt = 0;
void rly_sw_on();
void rly_sw_off();
int reading ;
float voltage;
float temperatureC;
int sensorPin = A0;
void Send_CMD(void) // COMMAND
{
unsigned char i;
for (i = 0; i < 4; i++)
{
mySerial.write(Send_data[i]);
delay(1); // Don\'t delete this line !!
}
}
unsigned char Checksum_cal(void) // CHECKSUM
{
unsigned char count, SUM = 0;
for (count = 0; count < 15; count++)
{
SUM += Receive_Buff[count];
}
return 256 - SUM;
}
void setup() {
lcd.begin(16, 2);
unsigned int temperatureC;
temperatureC = analogRead(A0);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT); digitalWrite(7,LOW);
Serial.begin(9600);
while (!Serial) ;
mySerial.begin(9600);
while (!mySerial);
lcd.clear();
}
void loop() {
int PCS = digitalRead(8); // 미세먼지 센서
int gas = analogRead(A4); //A4 or A5도 가능함 아직 CO2센서값이 SDA인지 SCL인지 불투명함
lcd.setCursor(0, 0);
lcd.print(\"Gas:\");
lcd.print(gas);
lcd.setCursor(9, 0);
int reading = analogRead(sensorPin);
voltage = reading * 0.0048;
temperatureC = ((voltage * 100)-18);
lcd.print(\"Tp:\");
lcd.print(temperatureC);
Serial.println(temperatureC);
Send_CMD(); // Send Read Command
while (1)
{
if (mySerial.available())
{
Receive_Buff[recv_cnt++] = mySerial.read();
if (recv_cnt == 16) {
recv_cnt = 0;
break;
}
}
}
if (Checksum_cal() == Receive_Buff[15]) // CS 확인을 통해 통신 에러 없으면
{
PCS = (unsigned long)Receive_Buff[3] << 24 | (unsigned long)Receive_Buff[4] << 16 | (unsigned long)Receive_Buff[5] << 8 | (unsigned long)Receive_Buff[6]; // 수량
ug = (float)PCS * 3528 / 100000; // 농도 변환(이 식은 PM1001 모델만 적용됩니다.)
Serial.write(\"PCS : \");
Serial.print(PCS);
Serial.write(\"ug : \");
Serial.println(ug);
lcd.setCursor(1, 1);
lcd.print(\"ug :\");
lcd.print(ug);
delay(1000);
}
else
{
Serial.write(\"CHECKSUM Error\");
}
delay(1000);
if (temperatureC>=85)rly_sw_on();
else if (temperatureC<=84)rly_sw_off();
delay(100);
}
void rly_sw_on()
{
digitalWrite(6,HIGH);
}
void rly_sw_off()
{
digitalWrite(6,LOW);
}
댓글 0