제가 프로잭트에있는 http://kocoafab.cc/make/view/647 전기방석
http://kocoafab.cc/make/view/216 알람방석
두가지 프로잭트를 이용해서 온도조절을하면서 시간이 되면 알람이울리게 만들어보려고했는데 부저가 울리질않고 압력센서가 잘먹질않는거같은데 딜레이 함수위치랑 소스 문제점좀 고쳐주시면 감사하겟습니다. 다른거도 문제있으면 지적좀해주세요 ~~ㅠㅠ 아 그리고 lcd에 온도랑 시간이 표현하려고햇는데 온도값만 표시되고 시간은 아무리해도 나오질않네요 도와주세요~~
#include <LiquidCrystal.h>
#include <core_build_options.h>
#include <swRTC.h>
swRTC rtc;
boolean sit = false;
LiquidCrystal lcd(12,11,5,4,3,2);
int Temperature = A0;
int Mosfet1 = 7 ;
int Mosfet2 = 6 ;
int btnLow1 = 8;
int btnLow2 = 9;
float Val;
float val;
const int tmpLow = 25;
const int tmpHIGH = 30;
int tmpSetting = 0;
int piezo = 10;
void setup()
{
Serial.begin(9600);
pinMode(Mosfet1, OUTPUT);
pinMode(Mosfet2, OUTPUT);
pinMode(btnLow1, INPUT_PULLUP);
pinMode(btnLow2, INPUT_PULLUP);
lcd.begin(16,2);
rtc.stopRTC();
rtc.setTime(0,0,0);
rtc.setDate(1,1,2000);
Serial.begin(9600); //시리얼통신 초기화
pinMode(piezo, OUTPUT);
}
void loop()
{
Val = (float)analogRead(Temperature)*5/1024;
val = 100*(Val-0.5);
delay(1000);
if (digitalRead(btnLow1) == LOW) {
tmpSetting = tmpLow;}
if (digitalRead(btnLow2) == LOW) {
tmpSetting = tmpHIGH;}
if(val<tmpSetting) // 저는 50℃로 설정하여 사용하고 있습니다 이 부분을 원하시는 온도로 변경하시면 됩니다.
{
digitalWrite(Mosfet1,HIGH);
digitalWrite(Mosfet2,HIGH);
}
else if((tmpSetting != 0) && (val > tmpSetting))
{
digitalWrite(Mosfet1,LOW);
digitalWrite(Mosfet2,LOW);
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temperature:");
lcd.print(val);
delay(2000);
int sensorValue = analogRead(A1); //압력센서에서 값을 읽어온다
//압력센서의 Output값이 100이상일 경우 앉은걸로 간주하고 타이머를 시작한다.
if(sensorValue > 100) {
Serial.println("sitdown");
rtc.startRTC(); //rtc시작(시간 측정)
sit = true;} //앉아있는 상태로 변경
if(sensorValue > 100 && sit) {
delay(1000);
sensorValue = analogRead(A1); //압력센서의 값을 읽어온다
Serial.print(rtc.getMinutes(), DEC);
Serial.print(":");
Serial.println(rtc.getSeconds(), DEC);
if(rtc.getMinutes() == 1) {
//압력센서의 값이 100이상일 경우 피에조부저를 울린다
if(sensorValue > 100) {
lcd.setCursor(0,1);
lcd.print("standUP!!");
tone(10,1000,500);
sensorValue = analogRead(A1);
lcd.print(????);
}
//자리에서 일어났을 경우 피에조부저의 소리를 끄고 rtc를 다시 초기화 시킨다
Serial.println("INITIALIZE");
rtc.stopRTC(); //정지
rtc.setTime(0,0,0); //시간, 분, 초 초기화
rtc.setDate(1,1,2000); //일, 월, 년도 초기화
sit = false;
delay(1000);
}}
}
|