BASIC4MCU | 질문게시판 | 아두이노를 이용한 축이 회전하는 환풍기
페이지 정보
작성자 굳은살 작성일2018-10-28 23:26 조회1,098회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=3977
본문
master님께서 지적해주신 사항들 고려해서 코드를 수정해 보았습니다.
사실 저도 C언어를 예전부터 정통으로 학습하고 싶었지만 현재 사정상 C언어를 깊게 파고들기에는 충분한 시간이 없는 상황이라서요..
너무 자주 질문해서 죄송합니다.
아래의 코드는 master님의 지적사항을 나름대로 수정해본 코드입니다.
컴파일링은 잘 되는데 혹시 잘못고쳤거나 한 부분이 있는지 체크가능하실까요?
#define U32 unsigned long
#include <DHT.h>
#define DHTTYPE DHT22
#define DHTPIN1 52
#define DHTPIN2 53
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,20,4);
//
#include <SoftwareSerial.h>
SoftwareSerial mySerial(13,11);
//
#include <Stepper.h>
const int stepsPerRevolution=100;
Stepper myStepper(stepsPerRevolution,8,9,10,3);
//
int GAS_1=48,GAS_2=49;
int ENA=7,ENB=12;
int fan=4,led=6,buzzer=5;
//
U32 PM25;
float t1=0,t2=0;
int target=0,angle=0;
unsigned char Send_data[5]={0x11,0x02,0x0b,0x01,0xE1};
unsigned char recv_cnt=0,RxBuf[20];
//
void Send_CMD(void){
for(char i=0;i<5;i++){mySerial.write(Send_data[i]);delay(1);}
}
//
unsigned char Checksum_cal(void){
unsigned char count,SUM=0;
for(count=0;count<19;count++)SUM+=RxBuf[count];
return 256-SUM;
}
//
void setup(){
pinMode(fan,OUTPUT);
pinMode(led,OUTPUT);
pinMode(buzzer,OUTPUT);
pinMode(11,OUTPUT);
analogWrite(ENA,255);
analogWrite(ENB,255);
pinMode(13,INPUT);
myStepper.setSpeed(60);
lcd.init();
lcd.backlight();
Serial.begin(9600);
while(!Serial);
mySerial.begin(9600);
while(!mySerial);
}
//
void loop(){
Send_CMD();
while(1){
if(mySerial.available()){
RxBuf[recv_cnt++]=mySerial.read();
if(recv_cnt==20){recv_cnt=0;break;}
}
}
//
if(Checksum_cal()==RxBuf[19]){
PM25=(U32)RxBuf[3]<<24|(U32)RxBuf[4]<<16|(U32)RxBuf[5]<<8|(U32)RxBuf[6];
Serial.write("PM2.5: ");Serial.println(PM25);
}
else{Serial.write("CHECKSUM Error");}
//
t1=dht1.readTemperature();
Serial.write("DHT_1: ");
Serial.println(t1);
t2=dht2.readTemperature();
Serial.write("DHT_2: ");
Serial.println(t2);
Serial.write("GAS_1: ");
Serial.println(digitalRead(GAS_1));
Serial.write("GAS_2: ");
Serial.println(digitalRead(GAS_2));
//digitalWrite(led,LOW); //noTone(buzzer);
if((digitalRead(GAS_1)==0) || (digitalRead(GAS_2)==0)){
while(180>angle){angle++;myStepper.step(1);delay(10);}
analogWrite(fan,150);
digitalWrite(led,HIGH);
tone(buzzer,500,100);
}
else if((digitalRead(GAS_1)==1) || (digitalRead(GAS_2)==1)&&(PM25>=35.1)){
analogWrite(fan,0);
digitalWrite(led,HIGH);
noTone(buzzer);
}
else if((digitalRead(GAS_1)==1) || (digitalRead(GAS_2)==1)&&(PM25<=35)&&(t1>=18.0)&&(t1<=25)){
analogWrite(fan,0);
digitalWrite(led,LOW);
noTone(buzzer);
}
else if((digitalRead(GAS_1)==1) || (digitalRead(GAS_2)==1)&&(PM25<=35)&&(t1<=17.9)&&(t2>=18)){
while(0<angle){angle--; myStepper.step(-1); delay(10);}
analogWrite(fan,150);
digitalWrite(led,LOW);
noTone(buzzer);
}
else if((digitalRead(GAS_1)==1) || (digitalRead(GAS_2)==1)&&(PM25<=35)&&(t1>=25.1)&&(t2<=25)){
while(180>angle){angle++; myStepper.step(1); delay(10);}
analogWrite(fan,150);
digitalWrite(led,LOW);
noTone(buzzer);
}
lcd.setCursor(0,0);
lcd.print("T1: ");
lcd.print(t1);
lcd.print("T2: ");
lcd.print(t2);
lcd.setCursor(0,1);
lcd.print("D: ");
lcd.print(PM25);
delay(3000);
}
댓글 0
조회수 1,098등록된 댓글이 없습니다.