Robofun 機器人論壇

標題: Arduino藍芽問題(十萬火急) [打印本頁]

作者: a6141100    時間: 2013-6-5 16:22
標題: Arduino藍芽問題(十萬火急)
以下是小弟程式碼
目的:利用藍芽與手機(Android)藍芽通訊,手機傳數值2,1,0;
而Arduino收到2要執行感光偵測,大於臨界點會發出警報(蜂鳴器)且Led燈會亮;
收到1要自行一直跑感光並偵測值,大於臨界點會發出警報(蜂鳴器)且Led燈會亮,
收到0則關閉Arduino。
面臨問題:
當App結束關掉或是藍芽因距離過遠斷掉連接Arduino無法判斷出來!!!!
再跑模式1(收到1),會無窮迴圈,原本功能是希望能再跑迴圈的時候若輸入另外一個值(ex:2或1),則Arduino會執行2或1該有的功能。
請大大幫個忙,感恩
int potPin = 2;
int val = 0;
int speakerPin = 7;
int sval = 1318;
int ledPin = 9;
void setup(){
  Serial.begin(9600);
  pinMode(speakerPin,OUTPUT);
  pinMode(ledPin, OUTPUT);
}
void loop(){
  if(Serial.available()){
    unsigned char charreceived = Serial.read();
     switch(charreceived){
      case '2':
        Serial.println("can not open and far");
        val = analogRead(potPin);
        Serial.println(val);
        digitalWrite(ledPin,LOW);
        if(val>25){
          digitalWrite(ledPin,HIGH);
          digitalWrite(speakerPin,HIGH);
          delayMicroseconds(sval);
        }delay(1000);
  break;
  case '1':
        do{
        Serial.println("can not open");
        val = analogRead(potPin);
        Serial.println(val);
        digitalWrite(ledPin,LOW);
        if(val>25){
          digitalWrite(ledPin,HIGH);
          digitalWrite(speakerPin,HIGH);
          delayMicroseconds(sval);
        }
        delay(1000);
        }while(charreceived=1);

    break;
    case '0':
    Serial.println("free mode");
    break;

    }
}
}
作者: babyfish0226    時間: 2013-6-6 10:39
回復 1# a6141100

   

  1. case '1':
  2.         do{
  3.         Serial.println("can not open");
  4.         val = analogRead(potPin);
  5.         Serial.println(val);
  6.         digitalWrite(ledPin,LOW);
  7.         if(val>25){
  8.           digitalWrite(ledPin,HIGH);
  9.           digitalWrite(speakerPin,HIGH);
  10.           delayMicroseconds(sval);
  11.         }
  12.         delay(1000);
  13. charreceived = Serial.read();   //加這一行
  14.         }while(charreceived=1);

  15.     break;
複製代碼

這個迴圈主要是用charreceived=1來做判斷,但是當app端離開或藍芽斷線的時候,若最後的狀態停在charreceived=1的話則會進入do無限迴圈裡面,我想,在while的前面加上一行charreceived = Serial.read(); 若藍芽恢復連線時則do迴圈內也可以接收到訊號並改變charreceived的值也許就可以了。
作者: a6141100    時間: 2013-6-7 14:00
回復 2# babyfish0226
大哥@@感恩。這問題已解!!!!
但還有一個大問題!!!!
藍芽斷掉連接Arduino是否有判斷式,我目的是要做出當藍芽斷掉連接Arduino會知道並發出警報(蜂鳴器會叫)!!
麻煩看到的大大能幫忙一下。
感恩。
作者: pizg    時間: 2013-6-8 00:13
手機每隔特定的時間傳送資料給Arduino,
Arduino端則可以計數接收到該資料的時間,
若時間超過你認為就是斷訊的秒數,
就可判定為藍芽斷線.
作者: a6141100    時間: 2013-6-10 23:41
回復 4# pizg


   怎麼計數接收到該資料的時間!!?
作者: pizg    時間: 2013-6-13 18:13
本帖最後由 pizg 於 2013-6-13 18:25 編輯

回復 5# a6141100


   你可以參考Cooper Maa老師的這篇文章. http://coopermaa2nd.blogspot.tw/2011/04/millis-button.html
或是這一篇 http://coopermaa2nd.blogspot.tw/2011/04/pulsein-button.html
作者: faxg1991    時間: 2013-8-11 21:57
請問a6141100大大
你的android 端的程式是怎麼寫的??
小弟也再使用藍芽但看其他網站上的都看不太懂
能不能請大大給一下你android端的程式?
作者: pizg    時間: 2013-8-11 22:51
請問a6141100大大
你的android 端的程式是怎麼寫的??
小弟也再使用藍芽但看其他網站上的都看不太懂
能不 ...
faxg1991 發表於 2013-8-11 21:57


你 google 一下就有了,keyword > amarino




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2