현재 smart curtain 개발(과제)을 하고 있는데요..
timer1함수를 이용해 센서가 계속 작동하는 것은 중지시켰지만
delay함수 때문에 a==2 인 상황에서 a==1 , a==3, a==4로 바로 전환을 시킬수가 없네요..
어떻게하면 delay없이 a를 바꿀 수 있을까요?
도움 요청드립니다.
extern volatile unsigned long timer0_millis;
#include <SoftwareSerial.h>
#include <Stepper.h>
#include <dht.h>
#include <SimpleTimer.h>
SoftwareSerial BT(2,3);
const int stepsPerRevolution = 64;
Stepper myStepper(stepsPerRevolution, 11,9,10,8);
dht DHT;
#define DHT11_PIN A1
SimpleTimer timer;
char a = BT.read();
void setup()
{
Serial.begin(9600); //Sets the data rate in bits per second (baud) for serial data transmission
pinMode(7, OUTPUT);
myStepper.setSpeed(300);
BT.begin(9600);//Sets digital pin 13 as output pin
}
void loop(){
if(BT.available()){
char a = BT.read();
if (a=='1'){
digitalWrite(7,HIGH);
myStepper.step(2048);
delay(500);
Serial.print('1');
}
if (a=='2'){
automode();
}
if (a=='3'){
digitalWrite (7,LOW);
myStepper.step(-2048);
Serial.print('2');
delay(500);
} if (a=='4'){
digitalWrite (7,LOW);
myStepper.step(-2048);
Serial.print('2');
delay(500);
}
}
}
void automode(){
int chk = DHT.read11(DHT11_PIN);
int AnalogValue;
AnalogValue = analogRead(A0);
if(DHT.temperature>30&&AnalogValue>600){
myStepper.step(-2048);
timer1();
}else if(DHT.temperature>30&&AnalogValue<600){
myStepper.step(2048);
timer1();
}else if (DHT.temperature<30&&AnalogValue>600){
myStepper.step(2048);
timer1();
}else if (DHT.temperature<30&&AnalogValue<600){
myStepper.step(-2048);
timer1();
}
return;}
void timer1(){
timer0_millis;
if (timer0_millis>=100000){
timer0_millis=0;}
do{delay(5);}
while(timer0_millis<100000);
return;}
|