BASIC4MCU | 질문게시판 | 답변 : while문 문제와 센서값 전송 문제
페이지 정보
작성자 master 작성일2020-06-04 16:46 조회10,754회 댓글2건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=12622
작성일
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2020-06-04 오후 5:13:30// by Ok-Hyun Park////--------------------------------[우노1]#include <SoftwareSerial.h>// LED1 PWM이 11 나머지가 9 10// LED2 PWM이 6 나머지가 7 8// 조도센서 A5#define BTtx 2#define BTrx 3#define LED1 11#define LED2 6//int final_data=0,mode=0;SoftwareSerial BT(BTtx,BTrx);//void setup(){BT.begin(9600);Serial.begin(9600);pinMode(A5,INPUT);pinMode( 6,OUTPUT); // PWM LED우pinMode( 7,OUTPUT); pinMode( 8,OUTPUT); // LED우pinMode( 9,OUTPUT); pinMode(10,OUTPUT); // LED좌pinMode(11,OUTPUT); // PWM LED좌}//void loop(){if(BT.available()>=2){unsigned int data1=BT.read();unsigned int data2=BT.read();unsigned int final_data=data1+(data2*256);Serial.write(final_data);//if(final_data>=1000&&final_data<=1255){digitalWrite(10,1); digitalWrite( 9,0); // LED좌 ondigitalWrite( 8,1); digitalWrite( 7,0); // LED우 onanalogWrite(LED1,final_data-1000); // LED 조도 바 설정analogWrite(LED2,final_data-1000); // LED 조도 바 설정}//if(final_data==4000)mode=1;else mode=0;}//if(mode==1){int cds=analogRead(A5);digitalWrite(10,1); digitalWrite(9,0); //LED좌 ondigitalWrite( 8,1); digitalWrite(7,0); //LED우 onanalogWrite(LED1,255-cds); //LED좌 밝기조절analogWrite(LED2,255-cds); //LED우 밝기조절}}//--------------------------------[우노2]#include <DHT.h>#include <SoftwareSerial.h>// 13,12 fan// 7, 8 워터펌프// 5 온습도센서// 4 조도센서#define soil A4 // 토양수분센서#define BTtx 2#define BTrx 3#define FAN A2#define WP A3#define light A5 // 조도센서#define DHTPIN 5 // 온습도센서#define DHTTYPE DHT22 //온습도센서DHT dht(DHTPIN,DHTTYPE);//SoftwareSerial BT(BTtx,BTrx);//int t=0,h=0,th,j=0,ss;int final_data=0;int value=0; // 빛의 밝기int neg_value=0; // 빛의 밝기를 뒤집기unsigned long t,t1=0;//void setup(){BT.begin(9600);dht.begin();Serial.begin(9600);pinMode(light,INPUT);pinMode(A4,INPUT); // 토양수분센서pinMode( 5,INPUT); // 온습도pinMode(A2,OUTPUT); pinMode(A3,OUTPUT);pinMode( 7,OUTPUT); pinMode(8,OUTPUT); // 펌프pinMode(12,OUTPUT); pinMode(13,OUTPUT); //환기팬}//void loop(){t=millis();if(t-t1)>=2000){ t1=t;t=dht.readTemperature();h=dht.readHumidity();th=t+h/2;byte j=analogRead(light);byte s=analogRead(soil)/10; // 수분값을 측정하여 10으로 나눈 값if(!(isnan(h)||isnan(t)||isnan(j))){BT.print(t); BT.print(","); BT.println(h); BT.print(","); BT.print(j); BT.print(","); BT.print(s);}}//if(BT.available()>=2){unsigned int data1=BT.read();unsigned int data2=BT.read();unsigned int final_data=data1+(data2*256);Serial.write(final_data);//if(final_data==2500){ digitalWrite( 8,1); digitalWrite( 7,0); analogWrite( WP,150); } //펌프 onif(final_data==2600){ digitalWrite( 8,1); digitalWrite( 7,0); analogWrite( WP, 0); } //펌프 offif(final_data==2700){ digitalWrite(12,1); digitalWrite(13,0); analogWrite(FAN,255); } //환기 onif(final_data==2800){ digitalWrite(12,1); digitalWrite(13,0); analogWrite(FAN, 0); } //환기 off//if(final_data==4000)mode=1;else mode=0;}//if(mode==1){ss=analogRead(soil);//if(ss<=30){ digitalWrite(8,1); digitalWrite(7,0); analogWrite(WP,200); } // 펌프 onelse { digitalWrite(8,1); digitalWrite(7,0); analogWrite(WP, 0); } // 펌프 on//if(th>=0){ digitalWrite(12,1); digitalWrite(13,0); analogWrite(FAN,255); } // 환기 onif(th<50){ digitalWrite(12,1); digitalWrite(13,0); analogWrite(FAN, 0); } // 환기 on}}
조금 정리를 해드리긴 했지만
원하는 동작과는 거리가 먼 것 같습니다.
한참 더 고민하면서 디버깅하셔야겠습니다.
작성한 소스코드 내용을 살펴봤을 때
결과를 얻기까지는 시간이 많이 소요될 것으로 예상됩니다.
댓글 2
조회수 10,754오이님의 댓글
오이 작성일
감사합니다 더 고민해보도록 하겠습니다! 아직 제가 모르부분이 많아서 그런것 같습니다
도움이 좀 되었습니다
master님의 댓글
master
우노2 코드를 조금 더 손봐드렸습니다.(온습도센서 관련)
질문소스는 전체적으로 손을 너무 많이 봐야해서(완성도가 너무 낮아서)
더이상 도와드리기 어렵습니다.
고민하는만큼 실력이 증가하는 것이니 열심히 공부해서 완성하시기 바랍니다.