BASIC4MCU | 질문게시판 | 아두이노 코딩질문
페이지 정보
작성자 붕붕 작성일2019-07-26 15:40 조회3,555회 댓글0건본문
#include <LiquidCrystal.h>
#define A_motor_L_BUTTON 24
#define A_motor_R_BUTTON 6
#define A_motor_S_BUTTON 22LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int A_motor_L = 7;
int A_motor_R = 8;
int A_motor_S = 9;
int ledPower = 10;
int dustPin = A5;
int cnt_once;
int delayTime = 280;
int delayTime2 = 40;
float offTime = 9680;unsigned long time1, time2;
int state = 0;
void setup() {
pinMode(ledPower, OUTPUT);
pinMode(dustPin, INPUT);
lcd.begin(16, 2);
lcd.print("Air Quality!");pinMode(A_motor_L_BUTTON, INPUT);
pinMode(A_motor_R_BUTTON, INPUT);
pinMode(A_motor_S_BUTTON, INPUT);
pinMode(A_motor_L, OUTPUT);
pinMode(A_motor_R, OUTPUT);
pinMode(A_motor_S, OUTPUT);}
void loop() {
digitalWrite(ledPower, LOW);
delayMicroseconds(delayTime);
float dustVal = analogRead(dustPin);
delayMicroseconds(delayTime2);
digitalWrite(ledPower, HIGH);
delayMicroseconds(offTime);float dustDensity = (0.172*(dustVal*(5/1024.0))-0.0999)*1000;
lcd.setCursor(0, 1);
lcd.print("Dust:");
lcd.print(dustDensity);
lcd.print("ug/m3 ");
delay(1000);time1 = millis();
if( dustDensity > 500){
if(state == 0 || state == 2){
digitalWrite(A_motor_L, HIGH);
digitalWrite(A_motor_R, LOW);
analogWrite(A_motor_S, 100);if(time1 - time2 > 5000){
state = 1;
time2 = millis();
}
}
}else if(dustDensity < 80){
if(state == 1 || state == 0){
digitalWrite(A_motor_L, LOW);
digitalWrite(A_motor_R, HIGH);
analogWrite(A_motor_S, 100);if(time1 - time2 > 5000){
state = 2;
time2 = millis();
}
}
}else if(80 < dustDensity < 500){
if(state == 2 || state == 1){
digitalWrite(A_motor_L, LOW);
digitalWrite(A_motor_R, LOW);
analogWrite(A_motor_S, 0);
digitalWrite(ledPower, LOW);
delayMicroseconds(delayTime);if(time1 - time2 > 5000){
state = 0;
time2 = millis();
}
}
}else{}
if(digitalRead(A_motor_L_BUTTON) == HIGH){
digitalWrite(A_motor_L, HIGH);
digitalWrite(A_motor_R, LOW);
analogWrite(A_motor_S, 100);
}
if(digitalRead(A_motor_S_BUTTON) == HIGH){
digitalWrite(A_motor_L, LOW);
digitalWrite(A_motor_R, LOW);
analogWrite(A_motor_S, 0);
}
if(digitalRead(A_motor_R_BUTTON) == HIGH){
digitalWrite(A_motor_L, LOW);
digitalWrite(A_motor_R, HIGH);
analogWrite(A_motor_S, 100);
}
}
제가 미세먼지를 측정해서 미세먼지 농도에 따라서 창문을 자동으로 개폐시켜주는 아두이노 프로그램을 만들고 있는데, 마음처럼 되지가 않아서 질문을 드려봅니다ㅠ
제가 원하는건 미세먼지 농도가 80 미만일 때 모터가 회전하고, 80이상 500 이하일때는 모터가 멈춰있고, 500 초과일때는 80미만일때와 반대방향으로 모터가 회전하기를 원하고, 이 과정들이 전부 딱 한번만 진행되었으면 좋겠습니다.
예를 들어, 80 미만일 때 모터가 5초 정도 회전하고 그 이후로는 동작이 없으며, 500 초과일때도 모터가 5초 정도 회전하고 그 이후 동작이 없었으면 좋겠습니다ㅠ 그런데 저 코딩대로 프로그램을 작동시켜보니 모터가 계속 회전하기만 합니다.
그리고 수동 작동일때를 감안해서 미세먼지와 관계없이 버튼을 누르는 것 만으로 모터가 제어될 수 있었으면 좋겠는데, 모터가 미세먼지 농도에 따라서만 제어되고 버튼 신호에 따라서는 제어되지 않습니다.
컴파일 했을 때 해당 코딩에 오류는 존재하지 않았는데 왜 이런 반응이 나타나는지 모르겠네요ㅠㅠ
어느 부분을 어떻게 수정하면 될까요ㅠ?
댓글 0
조회수 3,555등록된 댓글이 없습니다.