Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
12
返回列表 發新帖
樓主: leo0983405269
打印 上一主題 下一主題

請問DHT11如果要傳送到手機

[複製鏈接]
21#
發表於 2017-11-8 19:29:31 來自手機 | 顯示全部樓層
Arduino 的 for loop 應該是 j < 6
22#
發表於 2017-11-10 14:27:32 | 顯示全部樓層
>>.應該是這樣吧
不是....
for(int i = 0; i < 8; i++)
i = 0 ~7 , 沒有 8, 你又少傳一個BYTE
這個問題...你已經錯三次了

23#
發表於 2017-11-10 14:41:45 來自手機 | 顯示全部樓層
我就是在回答47 樓的問題
24#
發表於 2017-11-10 14:59:12 | 顯示全部樓層
說真的, 你一次討論兩個程式, 我也常搞不清楚你在說那一個
你說手機會收到錯誤資料
所以我就往前看到 43F 的Arduino程式
那邊的程式會少送一個字元. 所以會錯

總之..如果你把資料送正確了之後
資料還會是錯的嗎?
25#
發表於 2017-11-10 17:09:12 | 顯示全部樓層
要這樣寫才對
IF BYTETOREAD > 0 THEN
IF  Receive= 97 THEN
  IF  Receive = 'b' THEN
    IF  Receive = 'c' THEN
     ENDIF
  ENDIF
ENDIF
ENDIF
如果 97 的頭都不對了, 就不收了, 否則後面會被讀掉
更好的寫法是
WHILE BYTETOREAD > 0
IF  Receive= 97 THEN
  IF  Receive = 'b' THEN
    IF  Receive = 'c' THEN
        BREAK;
     ENDIF
  ENDIF
ENDIF
ENDIF
26#
發表於 2017-11-10 19:25:21 來自手機 | 顯示全部樓層
本帖最後由 超新手 於 2017-11-10 19:36 編輯

你貼的圖上面有,
就是while test do
27#
發表於 2017-11-10 19:27:32 來自手機 | 顯示全部樓層
本帖最後由 超新手 於 2017-11-10 19:40 編輯

我寫的只是架構。基本上就是你寫的這樣
ByteAvailableToReceive

你只要調整一下架構
可別真的照我打的改
28#
發表於 2017-11-10 20:38:05 | 顯示全部樓層
本帖最後由 超新手 於 2017-11-10 20:39 編輯

仔細想想,用while 也有點問題
不如
IF BYTETOREAD >= 9
IF  Receive= 97 THEN
  IF  Receive = 'b' THEN
    IF  Receive = 'c' THEN
      
     ENDIF
  ENDIF
ENDIF
ENDIF
ENDIF
29#
發表於 2017-11-14 18:57:57 | 顯示全部樓層
為什麼你要把 BytesAvailableToReceive>0 拿掉?
30#
發表於 2017-11-14 19:51:01 | 顯示全部樓層
1.一次都沒有嗎?應該至少有一兩次才對
2.Clock1 timer是多久送一次
31#
發表於 2017-11-14 20:15:41 | 顯示全部樓層
你先試看看使用序列監控視窗來除錯
不用改任何程式,
先拔掉藍牙, 接到USB
在Arduino序列監控視窗中設好鮑率後, 輸入 a(就是97)
應該會收到 a , b, c 和一大堆看不懂的字元才對
32#
發表於 2017-11-14 20:27:05 | 顯示全部樓層
因為你送9bytes
但接收只處理3 bytes
當處理到第4個 byte的時候
又送了 9bytes 過來
當處理到第5 byte
又送了 9 byte
因此很快就會爆掉
但應該至少有一次會成功
可以先用序列監控視窗測試
看看是不是卡住在 dht 或 sonar
或是其他問題

33#
發表於 2017-11-14 21:02:52 來自手機 | 顯示全部樓層
不,還有一個看不懂的字元,表示 arduino 端程式”應該”有正常工作
34#
發表於 2017-11-15 09:05:17 | 顯示全部樓層
本帖最後由 超新手 於 2017-11-15 11:54 編輯

>>我一直送A給他  他就這樣 "應該"是有在運作?
是的, 你的手機程式不就是在做這件事
每2秒送一次 a, 同時看有沒有收到值
因為送的是ascii code, 所以有些字會看不到, 或是亂碼
但 a, b, c 一定看的到
也就是 arduino 端看起來沒問題, 至少有反應

我自己試了一下,
但因為我沒有 sensor 可用, 所以就亂送資料
看來三個值都有顯示
你可以參考看看
  1. void setup() {
  2.   Serial.begin(9600);
  3. }
  4. int testx, testy, testz;// 測試用, 請自行修成自己的程式
  5. void loop() {
  6.   // put your main code here, to run repeatedly:
  7.   byte Data[9];
  8.   int x = testx;// 測試用, 請自行修成自己的程式
  9.   int y = testy;// 測試用, 請自行修成自己的程式
  10.   int z = testz;// 測試用, 請自行修成自己的程式
  11.   Data[0] = 'a';
  12.   Data[1] = x / 256;
  13.   Data[2] = x % 256;
  14.   Data[3] = 'b';
  15.   Data[4] = y / 256;
  16.   Data[5] = y % 256;
  17.   Data[6] = 'c';
  18.   Data[7] = z / 256;
  19.   Data[8] = z % 256;
  20.   if (Serial.available() > 0) {
  21.     char c = Serial.read();
  22.     switch (c) {
  23.       case 97:
  24.         for (int i = 0 ; i < 9 ; i++) {
  25.           Serial.write(Data[i]);
  26.         }
  27. // 測試用, 請自行修成自己的程式
  28.         testx++;
  29.         testy+=2;
  30.         testz+=3;
  31. // 測試用, 請自行修成自己的程式
  32.         break;
  33.     }
  34.   }
  35. }
複製代碼


另外. 其實不用送那麼多對齊字元(如 'a', 'b', 'c')
送一個是有點少, 沒對齊的機率是 1/256(資料錯誤)
送二個, 沒對齊的機率是 1/65536, 也差不多了
送三個, 沒對齊的機率是 1/16777216


附帶說明一下
下面 app 程式的這種寫法只適用顯示正數
如果出現負數, 顯示結果就會完全不正確
免得以後的人照抄, 又發現問題而不知道如何解決

1.jpg (55.23 KB, 下載次數: 289)

1.jpg
35#
發表於 2017-11-15 10:37:01 | 顯示全部樓層
當然不對...
其實你的 Arduino 程式基本上不用修改
就直接用即可
問題在app 端,
36#
發表於 2017-11-15 11:10:23 | 顯示全部樓層

你的 arduino 已經用序列監控視窗"稍微"測過
加上你之前的測試.
應該沒太大問題
應該是 app 端有問題
因為基本上你這樣試(只收超音波), 是有可能有問題
不如一次到位, 三筆資料都收
我已經試過這個 app, 可以收沒問題


37#
發表於 2017-11-22 14:36:25 | 顯示全部樓層
中間這四行
digitalWrite(A3, HIGH);
  delay(2000);  
  digitalWrite(A3, LOW);  
  delay(2000);
可是會讓你的車子失聯 4 秒...
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-5-2 10:24 , Processed in 0.246873 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表