정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

블루투스 관련하여 질문있습니다.
김동휘 | 2015-06-03

현재 제가 짠 코딩중에 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);
    
  }
 } 

프로필사진

SaBo 2015-06-04 08:57:28

" 현재 제가 짠 코딩중에 void loop 5번째줄에 digital write 를 넣음으로서 블루투스에 전압이 끊어 졌을때 인식하여 A0 REDLED에 빛을 내고있는데요" 

일단 이부분이 잘 이해가 안됩니다.

블루투스 전압이 끊어졌을 때 -> 블루투스 송수신이 안될 때 일텐데

질문자님이 올려주신 소스를 보면

 if (BTSerial.available()){
    byte data = BTSerial.read();
    Serial.write(data); 
    buffer[bufferPosition++] = data; 
    digitalWrite(A0, HIGH); 

BTSerial이 available 일때 Red LED가 켜지는 동작이네요~ 

 

 if (!BTSerial.available()) {digitalWrite(A0,HIGH);}
 if (BTSerial.available()){
    byte data = BTSerial.read();
    Serial.write(data); 
    buffer[bufferPosition++] = data; 
    digitalWrite(A0, LOW); 

 

이렇게 해야 블루투스가 끊어졌을때 불이 들어오지 않을까요~
 

끊어진 뒤 수십초 뒤의 동작을 하고자 한다면 Timer Libary를 참고해보세요.

이전글   |    http://kocoafab.cc/tutorial/view/297 관련 문의입니다.... 2015-06-02
다음글   |    앱인벤터 블루투스 압력센서 연동에 관한 질문입니다... 2015-06-03