답변 : 검토좀부탁드립니다
페이지 정보
작성자 master 작성일18-06-23 23:04 조회5,272회 댓글1건본문
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-06-23 오후 11:03:07
// by Ok-Hyun Park
//
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
//
#include <IRremote.h>
#include <VirtualWire.h>
//
#include <SoftwareSerial.h>
int bluetoothTx=2,bluetoothRx=3;
SoftwareSerial bluetooth(bluetoothTx,bluetoothRx);
//
int RECV_PIN=A0; //define input pin on Arduino
IRrecv irrecv(RECV_PIN);
int RF433receivePin=A1;
//
int n,m,k;
long RF433time,RF433startTime;
bool RF433start=false;
long RF433firstSignaltime;
bool firstSignal=false;
bool ledOn,ledOff;
decode_results results;
//
void setup(){
irrecv.enableIRIn(); // Start the receiver
lcd.init(); lcd.backlight();
//lcd.begin(20,4);
lcd.setCursor(6,1); lcd.print("MY HOME"); lcd.setCursor(2,2); lcd.print("LIGHTING SYSTEMS"); delay(5000);
lcd.clear();
lcd.setCursor(0,3); lcd.print("OFF"); lcd.setCursor(8,3); lcd.print("OFF"); lcd.setCursor(16,3); lcd.print("OFF");
lcd.setBacklight(0x7);
//
bluetooth.begin(9600);
Serial.begin(9600);
Serial.println("sdadsfjkdfskjlsdf");
delay(100);
pinMode(10,OUTPUT); pinMode(11,OUTPUT); pinMode(12,OUTPUT); pinMode(A1,INPUT);
pinMode(RF433receivePin,INPUT);
}
//
void loop(){
if(irrecv.decode(&results)){
Serial.println(results.value,HEX);
switch(results.value){
case 0x20DF4EB1: digitalWrite(10,HIGH); break; //0버튼이 눌리면 LED ON
case 0x20DF8E71: digitalWrite(10,LOW ); break; //0버튼이 눌리면 LED OFF
case 0x20DFC639: digitalWrite(11,HIGH); break; //0버튼이 눌리면 LED ON
case 0x20DF8679: digitalWrite(11,LOW ); break; //0버튼이 눌리면 LED OFF
}
irrecv.resume(); // Receive the next value
}
//
if(Serial.available()){
switch(Serial.read()){
case '1': lcd.setCursor(0,3); lcd.print("ON "); digitalWrite(10,HIGH); Serial.println("LED1 ON "); break;
case '2': lcd.setCursor(0,3); lcd.print("OFF "); digitalWrite(10,LOW ); Serial.println("LED1 OFF "); digitalWrite(10,LOW); break;
case '3': digitalWrite(11,HIGH); break;
case '4': digitalWrite(11,LOW ); break;
case '5': digitalWrite(12,HIGH); break;
case '6': digitalWrite(12,LOW ); break;
}
}
//
lcd.setCursor(0,2); lcd.print("LED1 LED2 LED3");
//
if(bluetooth.available()){
char cmd=(char)bluetooth.read(); Serial.print("Command="); Serial.println(cmd);
//
if(cmd=='1'){ lcd.setCursor( 0,3); lcd.print("ON "); Serial.println("LED1 ON "); digitalWrite(10,HIGH); }
if(cmd=='2'){ lcd.setCursor( 0,3); lcd.print("OFF"); Serial.println("LED1 OFF"); digitalWrite(10,LOW ); }
if(cmd=='3'){ lcd.setCursor( 8,3); lcd.print("ON "); Serial.println("LED2 ON "); digitalWrite(11,HIGH); }
if(cmd=='4'){ lcd.setCursor( 8,3); lcd.print("OFF"); Serial.println("LED2 OFF"); digitalWrite(11,LOW ); }
if(cmd=='5'){ lcd.setCursor(16,3); lcd.print("ON "); Serial.println("LED3 ON "); digitalWrite(12,HIGH); }
if(cmd=='6'){ lcd.setCursor(16,3); lcd.print("OFF"); Serial.println("LED3 OFF"); digitalWrite(12,LOW ); }
}
//
if(!RF433start){
if(RF433signal(7,A1)){ RF433startTime=millis()+10; RF433start=true; firstSignal=false; }
}
if(RF433start){
long milli=millis();
if(!firstSignal){
if(milli>RF433startTime){
if(RF433signal(7,A1)){ firstSignal=true; RF433firstSignaltime=milli; }
}
else{
if(milli>RF433startTime+30)RF433start=false;
}
}
else{
if(milli>RF433firstSignaltime+80)RF433start=false;
else{
if(RF433signal(7,A1)){
long timeGap=milli-RF433firstSignaltime;
Serial.println(timeGap);
if(timeGap>50&&timeGap<71){ ledOff=true; RF433start=false; }
if(timeGap>29&&timeGap<51){ ledOn =true; RF433start=false; }
}
}
}
}
//
if(ledOn ){ ledOn =false; lcd.setCursor(0,3); lcd.print("ON "); Serial.println("on "); }
if(ledOff){ ledOff=false; lcd.setCursor(0,3); lcd.print("OFF "); Serial.println("off"); }
}
//***********************************************
bool RF433signal(int8_t numCriteria,int8_t pinNum){
//***********************************************
int8_t count=0;
for(int8_t i=0; i<10; i++){
if(analogRead(pinNum)>RFsSignalLevel;)count++;
delay(1);
}
if(count>=numCriteria)return true; else return false;
}
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-06-23 오후 11:06:36
// by Ok-Hyun Park
//
#include <SoftwareSerial.h>
#define BT_TXD 2
#define BT_RXD 3
SoftwareSerial btSerial(BT_RXD,BT_TXD);
//
#include <IRremote.h>
int RECV_PIN=A0;
IRrecv irrecv(RECV_PIN);
decode_results results;
//
int RFsendPin=4;
//
bool ledLight=false;
bool previousLedlight=false;
//
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(4,OUTPUT);
pinMode(10,OUTPUT); digitalWrite(10,HIGH); //RELAY핀
pinMode(11,OUTPUT); digitalWrite(11,HIGH);
pinMode(12,OUTPUT); digitalWrite(12,HIGH);
btSerial.begin(9600);
}
//
void loop(){
if(irrecv.decode(&results)){
Serial.println(results.value,HEX);
switch(results.value){
case 0x20DF4EB1: digitalWrite(10,HIGH); break; //0버튼이 눌리면 LED ON
case 0x20DF8E71: digitalWrite(10,LOW); break; //0버튼이 눌리면 LED OFF
case 0x20DFC639: digitalWrite(11,HIGH); break; //0버튼이 눌리면 LED ON
case 0x20DF8679: digitalWrite(11,LOW); break; //0버튼이 눌리면 LED OFF
}
irrecv.resume(); // Receive the next value
}
if(Serial.available()){
switch(Serial.read()){
case '1': digitalWrite(10,HIGH); ledLight=true; break;
case '2': digitalWrite(10,LOW ); ledLight=false; break;
case '3': digitalWrite(11,HIGH); ledLight=true; break;
case '4': digitalWrite(11,LOW ); ledLight=false; break;
case '5': digitalWrite(12,HIGH); ledLight=true; break;
case '6': digitalWrite(12,LOW ); ledLight=false; break;
}
}
//
if(btSerial.available()){
char ch=btSerial.read();
Serial.write(ch);
switch(ch){
case '1': digitalWrite(10,HIGH); ledLight=true; break; //ch가 1이면 C와 NC가 붙는다.// LED는 꺼진다.
case '2': digitalWrite(10,LOW ); ledLight=false; break; //ch가 2이면 C와 NO가 붙는다.// LED는 켜진다.
case '3': digitalWrite(11,HIGH); ledLight=true; break; //ch가 1이면 C와 NC가 붙는다.// LED는 꺼진다.
case '4': digitalWrite(11,LOW ); ledLight=false; break; //ch가 2이면 C와 NO가 붙는다.// LED는 켜진다.
case '5': digitalWrite(12,HIGH); ledLight=true; break; //ch가 2이면 C와 NO가 붙는다.// LED는 켜진다.
case '6': digitalWrite(12,LOW ); ledLight=false; break; //ch가 2이면 C와 NO가 붙는다.// LED는 켜진다.
}
}
//
if(ledLight&&!previousLedlight){ //새로이 ledLight 가 참이되면 0.25초간 송신기에 high 신호를 보냅니다.
digitalWrite(RFsendPin,HIGH); delay(20); digitalWrite(RFsendPin,LOW); delay(10);
digitalWrite(RFsendPin,HIGH); delay(20); digitalWrite(RFsendPin,LOW); delay(50);
digitalWrite(RFsendPin,HIGH); delay(20); digitalWrite(RFsendPin,LOW);
previousLedlight=ledLight;
}
//
if(!ledLight&&previousLedlight){ //새로이 ledLight가 부가 되면 0.4초간 송신기에 high 신호를 보냅니다.
digitalWrite(RFsendPin,HIGH); delay(20); digitalWrite(RFsendPin,LOW); delay(10);
digitalWrite(RFsendPin,HIGH); delay(20); digitalWrite(RFsendPin,LOW); delay(50);
digitalWrite(RFsendPin,HIGH); delay(20); digitalWrite(RFsendPin,LOW);
previousLedlight=ledLight; //현재의 ledLight 신호 값을 과거의 ledLight 값으로 바꿉니다.
}
}
길거나 복잡한 기능의 소스는 남이 봐줄 수가 없습니다.
스스로 디버깅하는 능력을 키우세요
잘 안되는 기능을 하나씩 차례대로 체크해서 문제를 해결하세요
댓글 : 1
조회수 : 5,272
슬픈남부님의 댓글
비공개 작성일
검토해주셔서 감사합니다~
역시나 업로드 했더니 안되네요!