현재 제가 짠 코딩중에 void loop 5번째줄에 digital write 를 넣음으로서
블루투스에 전압이 끊어 졌을때 인식하여 A0 REDLED에 빛을 내고있는데요
여기에서 끊어졌을때 바로 빛이 나는것이 아닌 일정시간이상 지난후 소리를 낼려면 delay를 바로위에 넣으면 되긴되는데
그렇게 되면 전체적으로 딜레이를 넣은 시간동안 텀이 생겨버려서 .. 버벅거리는 듯이 반응이 느립니다.
이런 딜레이 반응 말고 지연없이 블루투스가 차단되고 몇십초뒤에 소리가 나는 코딩을 알수있을까요?
#include <SoftwareSerial.h>
#include <Servo.h>
SoftwareSerial BTSerial(2, 3);
byte buffer[1024];
int bufferPosition;
Servo myservo;
int yellowLed = 12;
int redLed = A0;
int greenLed = A1;
int redState = 0;
int yellowState = 0;
int greenState = 0;
int servoState = 0;
void setup (){
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(greenLed, OUTPUT);
myservo.attach(9);
BTSerial.begin(9600);
Serial.begin(9600);
bufferPosition = 0;
}
void loop (){
if (BTSerial.available()){
byte data = BTSerial.read();
Serial.write(data);
buffer[bufferPosition++] = data;
digitalWrite(A0, HIGH);
if(data == '5'){
if(redState == 0){
digitalWrite(A0, LOW);
}
}
if(data == '2'){
if(redState == 0){
digitalWrite(A0, LOW);
}
}
if(data == '3'){
if(redState == 0){
digitalWrite(A0, LOW);
}
}
if(data == '5'){
if(greenState == 0){
digitalWrite(12, LOW);
}
}
if(data == '2'){
if(greenState == 0){
digitalWrite(12, LOW);
}
}
if(data == '3'){
if(greenState == 0){
digitalWrite(12, LOW);
}
}
if(data == '2'){
if(yellowState == 0){
digitalWrite(A1, LOW);
}
}
if(data == '3'){
if(yellowState == 0){
digitalWrite(A1, HIGH);
}
}
if(data == '3'){
if(servoState <= 120){
servoState += 90;
myservo.write(servoState);
delay(150);
}
}
if(data == '2'){
if(servoState >= 30){
servoState -= 90;
myservo.write(servoState);
delay(150);
}
}
}
else{
digitalWrite(12, HIGH);
delay(150);
}
}
|