BASIC4MCU | 질문게시판 | 답변 : 아두이노 a4988 스텝모터 + LCD 모니터 + 미세먼지 센서 (GP2Y1014AU0F)
페이지 정보
작성자 master 작성일2022-12-15 17:55 조회1,413회 댓글2건본문
#include
#include
LiquidCrystal_I2C lcd(0x27,16,2);
//
#define DIR 5
#define STEP 4
//
int Vo=A0;
int V_LED=2;
//
#define STEP_DELAY 5000
#define STEP_COUNT 300
//
char str1[10];
int Dust=0,mode=0;
float Vo_value=0,Voltage=0;
//
void setup(){
Wire.begin();
Serial.begin(9600); while(!Serial); Serial.println("\nI2C Scanner");
//
pinMode(V_LED,OUTPUT); pinMode(Vo,INPUT);
pinMode(DIR,OUTPUT); digitalWrite(DIR,1); pinMode(STEP,OUTPUT);
//
lcd.begin(); lcd.noBacklight(); lcd.clear(); delay(500); lcd.backlight(); delay(500);
lcd.setCursor(6,0); lcd.print("SENSOR"); delay(1000); lcd.clear();
}
//
void loop(){
digitalWrite(V_LED,0); delayMicroseconds(280);
Vo_value=analogRead(Vo); delayMicroseconds(30);
digitalWrite(V_LED,1); delayMicroseconds(9680);
//
Voltage=Vo_value * 5.0/1023.0;
Serial.print(" Volatage: "); Serial.println(Voltage);
//
if(Voltage<0.1){ Dust=0; }
else if(Voltage<0.8){ Dust=10 *(5 *(Voltage - 0.1)); }
else if(Voltage<1){ Dust=10 + 15 *((Voltage - 0.8)* 10); }
else { Dust=40 + 16 *((Voltage - 1)* 10); }
//
Serial.print("Dust : "); Serial.println(Dust); Serial.println(" ");
delay(10);
sprintf(str1,"%03d",Dust);
lcd.setCursor(1,0); lcd.print("Dust : "); lcd.print(str1); lcd.write(0); lcd.print("g/m"); lcd.write(1);
//
if(Dust>80){
if(mode!=1){ mode=1;
digitalWrite(DIR,1);
for(int i=0;i<STEP_COUNT;i++){
digitalWrite(STEP,1); delayMicroseconds(STEP_DELAY);
digitalWrite(STEP,0); delayMicroseconds(STEP_DELAY);
}
}
}
else{
if(mode!=2){ mode=2;
digitalWrite(DIR,0);
for(int i=0;i<STEP_COUNT;i++){
digitalWrite(STEP,1); delayMicroseconds(STEP_DELAY);
digitalWrite(STEP,0); delayMicroseconds(STEP_DELAY);
}
}
}
//
delay(10000);
}
mode 변수를 추가했습니다.
댓글 2
조회수 1,413JCHJ님의 댓글
JCHJ 작성일정말 감사합니다 ㅠㅠ 혹시 문제점이 무엇인지 말씀해 주실 수 있나요?
master님의 댓글
master
mode관련 코드를 적색으로 눈에 잘 띄게 색칠했습니다.
간단한 if문이라서 해석이 어렵지 않을겁니다.
같은 조건에서는 1회만 동작하기!