Robofun 機器人論壇

標題: 有關於arduino傳送資料到手機上顯示 [打印本頁]

作者: leo0983405269    時間: 2017-9-27 14:23
標題: 有關於arduino傳送資料到手機上顯示
本帖最後由 leo0983405269 於 2017-9-27 18:47 編輯

我的問題跟之前有人問過的問題類似
只是我沒辦法從他那邊嘗試成功在手機顯示


#include <SoftwareSerial.h> //Arduino I2C library

const int trig =  8; //define Arduino pin
const int echo =  7;
const int TX   = 1;
const int RX   = 0;

const int delay_time = 1000; //delay 1000 ms for every measurment

SoftwareSerial BT(0, 1);
//set Bluetooth RX (-> pin TX of Bluetooth Module), TX (-> pin RX of Bluetooth Module)

void setup() {
        Serial.begin(9600); //set baud rate of Serial Monitor
        BT.begin(9600); //set baud rate of Bluetooth
        pinMode(trig, OUTPUT); //set trigger pin to OUTPUT (-> pin trig of Ultrasonic Sensor)
        pinMode(echo, INPUT); //set echo pin to INPUT (-> pin echo of Ultrasonic Sensor)
        Serial.println("Start!!!");
}

void loop() {
        float duration; //duration to record the time of every back and forth
        float distance;
        digitalWrite(trig, HIGH); //trigger sona for 1 ms
        delayMicroseconds(1000);
        digitalWrite(trig, LOW);
        duration = pulseIn(echo, HIGH);
        //use pulseIn() function to get the time of pin echo from HIGH to LOW, unit=microseconds
        distance = (duration / 2) * 0.034;
        //distance = ( half of time of back and forth )x( wave velocity(use 0.034 cm per microsecond) )
       
        Serial.print("Distance ="); //show result on Serial Monitor
        Serial.print(distance);
        Serial.println("cm");
        delay(500);

        int sendData = (int) (distance * 100); //times 100 and convert disance to integer
        byte packet[3];
        packet[0] = 97; //key send to phone
        packet[1] = sendData / 256; //divides sendData to two 1 byte packets
        packet[2] = sendData % 256;
       

       
        if(BT.available() > 0) //check BT is succeed
                if(BT.read() == 97) //check recieve key from phone
                {
                        Serial.println("succeed!");
                        for(int i = 0; i < 3; i++)
                                BT.write(packet); //send packet to phone
                }


}_

紅色部分是我有更改過的參數

他手機程式如下面沒有橘色拼圖的圖片 有關於顯示數值的部分   除了連線斷線部分我沒有上傳

有橘色拼圖的那張圖 是可變電阻的  範例
網址http://blog.cavedu.com/programmi ... tooth3/#prettyPhoto

希望有人能幫忙翻譯一下橘色部分  為什麼要一下*256 一下+256等等的ˋ



3.jpg (158.96 KB, 下載次數: 437)

3.jpg

1506491307636.jpg (445.03 KB, 下載次數: 429)

1506491307636.jpg

1506491400319.jpg (169.92 KB, 下載次數: 438)

1506491400319.jpg

作者: 超新手    時間: 2017-9-27 16:57
1.不確定你用的是什麼板子(uno 或 mega?)
  如果是, 你就改錯
  你的 BLUETOOTH 和 SERIAL 衝到了
   uno serial 是用 0, 1, 但是 BLUETOOTH  也是用 0.1
   應該把 BLUETOOTH  改一下腳位
2. 兩張圖有點不同,  1506491400319.jpg  手機會送出 49. 和arduino程式相同
    1506491307636.jpg 手機會送出 97, 根本不對
3. 至於 *256, 就是距離值會分成兩個 byte 來送
一個值是 a0 = distance/256. 另一個值是 a1 = distance%256.
所以收到後, 要把數字還原, 就是 a0*256+a1 而已
但因為上面那張圖的程式其實有點寫的不對
他應該直接使用 ReceiveUnsigned1ByteNumber
而不是 ReceiveSigned1ByteNumber
就不用再去加 256, 把它變回正數

下面那張的程式看起來比較正確

   

   
作者: leo0983405269    時間: 2017-9-27 18:45
您好
我是用UNO板R3+擴充版L298P

因為Keyes_L298P板子 一開始就規定 0是它的RX  1是它的TX
所以還是會衝突到嗎?

1506491307636.jpg這圖片是人家寫其他資料傳到手機的
我想要把超音波的部分也試試看修改成這樣
但是不懂它橘色部分  不好意思 我表達不清楚
97是人家寫超音波的
49是人家寫溫度用到的手機程式我有問題提出來的
另外我會補上我的板子擴充版圖片
我現在比較懷疑的是手機程式部分  感謝您
作者: 超新手    時間: 2017-9-27 19:10
1.如果是這樣,把 serial 部份拿掉即可
反正它的作用只是 debug
2. 兩張圖基本上差不多
用319.jpg 應該就可以
作者: leo0983405269    時間: 2017-9-28 16:37
SoftwareSerial BT(RX, TX); 好像不用改成rx跟tx  變成0,1  

SoftwareSerial BT(0, 1);   
我明天會在試試看  

如果是要像您說得把serial部分拿掉  這意思是怎樣
不好意思 不太清楚


作者: 超新手    時間: 2017-9-28 17:04
只要有 SERIAL, 前面加 //
//Serial.begin
//Serial.println
應該有六個地方
1個 begin, 5 個 println
作者: leo0983405269    時間: 2017-10-6 14:32
好  我再試試看   感謝你
作者: leo0983405269    時間: 2017-10-6 15:25
有了 成功在手機上面顯示

就是使用版主的方法 把他//

感謝救援




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