谢谢大大分享 |
超新手 發表於 2017-11-22 14:36 懂了 謝謝 |
中間這四行 digitalWrite(A3, HIGH); delay(2000); digitalWrite(A3, LOW); delay(2000); 可是會讓你的車子失聯 4 秒... |
超新手 發表於 2017-11-15 11:10 可以請問一下 9V的電池有可能因為感應器太多 所以沒辦法正常運作嗎 我多加個七彩LED燈 燈跟其他感應器的功能有出來 遙控車的功能卻沒有了 #include <SoftwareSerial.h> //Arduino I2C library #include "DHT.h" #define DHTPIN A1 #define DHTTYPE DHT11 // DHT 11 const int trig = 8; //define Arduino pin const int echo = 7; const int TX = 1; const int RX = 0; const int delay_time = 400; //delay 1000 ms for every measurment const int Motor_E2 = 11; const int Motor_E1 = 10; const int Motor_M1 = 12; const int Motor_M2 = 13; char val; // variable to receive data from the serial port(bluetooth) DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); //set baud rate of Bluetooth pinMode(Motor_M1, OUTPUT); pinMode(Motor_M2, OUTPUT); 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) dht.begin(); pinMode(A3, OUTPUT); } void loop() { byte Data[12]; byte cmmd[20]; int val; int insize; float duration; float distance; digitalWrite(trig, HIGH); //trigger sona for 1 ms delayMicroseconds(1000); digitalWrite(trig, LOW); duration = pulseIn(echo, HIGH); distance = (duration / 2) * 0.034; int x = (int) (distance * 100); //times 100 and convert disance to integer int y = dht.readHumidity(); int z = dht.readTemperature(); int e = analogRead(A5); Data[0]=97; Data[1]=x/256; Data[2]=x%256; Data[3]='b' ; Data[4]=y/256; Data[5]=y%256; Data[6]='c' ; Data[7]=z/256; Data[8]=z%256; Data[9]='d'; Data[10]=e/256; Data[11]=e%256; digitalWrite(A3, HIGH); delay(2000); digitalWrite(A3, LOW); delay(2000); if(Serial.available()>0) { val = Serial.read(); switch(val) { case 97: //測距離溫溼度氣體 for(int i = 0; i < 12; i++) Serial.write(Data); //send Data to phone break; case 'f': // car forward forward(0, 255); break; case 'd': // car backward backward(0, 255); break; case 'l': // car turn left left(0, 255); break; case 'r': // car turn right right(0, 255); break; case 's': // car stop motorstop(0, 0); break; } } } void motorstop(byte flag, byte motorspeed) { digitalWrite( Motor_E1, motorspeed); digitalWrite( Motor_E2, motorspeed); } void forward(byte flag, byte motorspeed) { digitalWrite( Motor_M1, HIGH); digitalWrite( Motor_M2, HIGH); analogWrite( Motor_E1, 200); analogWrite( Motor_E2, 200); } void backward(byte flag, byte motorspeed) { digitalWrite( Motor_M1, LOW); digitalWrite( Motor_M2, LOW); analogWrite( Motor_E1, 200); analogWrite( Motor_E2, 200); } void right(byte flag, byte motorspeed) { digitalWrite( Motor_M1, HIGH); digitalWrite( Motor_M2, HIGH); analogWrite( Motor_E1, 150); analogWrite( Motor_E2, 0); } void left(byte flag, byte motorspeed) { digitalWrite( Motor_M1, HIGH); digitalWrite( Motor_M2, HIGH); analogWrite( Motor_E1, 0); analogWrite( Motor_E2, 150); } |
對 你的 arduino 已經用序列監控視窗"稍微"測過 加上你之前的測試. 應該沒太大問題 應該是 app 端有問題 因為基本上你這樣試(只收超音波), 是有可能有問題 不如一次到位, 三筆資料都收 我已經試過這個 app, 可以收沒問題 |
超新手 發表於 2017-11-15 10:37 不是要把您給的範例 加入進去 我原本的arduino嗎 因為我現在沒辦法在實驗室用 所以我只有先改一些 X Y Z的東西 我直接用原本的arduino 然後改app就可以了? |
當然不對... 其實你的 Arduino 程式基本上不用修改 就直接用即可 問題在app 端, |
本帖最後由 leo0983405269 於 2017-11-15 10:29 編輯 超新手 發表於 2017-11-15 09:05 void setup() { Serial.begin(9600); } int (int) (distance * 100), dht,readHumidity(),dht,readTemperature();// 測試用, 請自行修成自己的程式 void loop() { //晚點補上 byte Data[9]; int x =(int) (distance * 100);// 測試用, 請自行修成自己的程式 int y = dht,readHumidity();// 測試用, 請自行修成自己的程式 int z = dht,readTemperature();// 測試用, 請自行修成自己的程式 Data[0] = 'a'; Data[1] = x / 256; Data[2] = x % 256; Data[3] = 'b'; Data[4] = y / 256; Data[5] = y % 256; Data[6] = 'c'; Data[7] = z / 256; Data[8] = z % 256; if (Serial.available() > 0) { char c = Serial.read(); switch (c) { case 97: for (int i = 0 ; i < 9 ; i++) { Serial.write(Data); } // 測試用, 請自行修成自己的程式 (int) (distance * 100)++; dht,readHumidity()+=2; dht,readTemperature()+=3; // 測試用, 請自行修成自己的程式 break; } } } 這樣嗎? 我現在在另外一間教室上課 要下午才能到實驗室試試看最後結果 testx = (int) (distance * 100); 這是不是有點奇怪 還是我自己的問題 |
本帖最後由 超新手 於 2017-11-15 11:54 編輯 >>我一直送A給他 他就這樣 "應該"是有在運作? 是的, 你的手機程式不就是在做這件事 每2秒送一次 a, 同時看有沒有收到值 因為送的是ascii code, 所以有些字會看不到, 或是亂碼 但 a, b, c 一定看的到 也就是 arduino 端看起來沒問題, 至少有反應 我自己試了一下, 但因為我沒有 sensor 可用, 所以就亂送資料 看來三個值都有顯示 你可以參考看看
另外. 其實不用送那麼多對齊字元(如 'a', 'b', 'c') 送一個是有點少, 沒對齊的機率是 1/256(資料錯誤) 送二個, 沒對齊的機率是 1/65536, 也差不多了 送三個, 沒對齊的機率是 1/16777216 附帶說明一下 下面 app 程式的這種寫法只適用顯示正數 如果出現負數, 顯示結果就會完全不正確 免得以後的人照抄, 又發現問題而不知道如何解決 |
1.jpg (55.23 KB, 下載次數: 617)
不,還有一個看不懂的字元,表示 arduino 端程式”應該”有正常工作 |
因為你送9bytes 但接收只處理3 bytes 當處理到第4個 byte的時候 又送了 9bytes 過來 當處理到第5 byte 又送了 9 byte 因此很快就會爆掉 但應該至少有一次會成功 可以先用序列監控視窗測試 看看是不是卡住在 dht 或 sonar 或是其他問題 |
你先試看看使用序列監控視窗來除錯 不用改任何程式, 先拔掉藍牙, 接到USB 在Arduino序列監控視窗中設好鮑率後, 輸入 a(就是97) 應該會收到 a , b, c 和一大堆看不懂的字元才對 |
超新手 發表於 2017-11-14 19:51 什麼是一次兩次? 手機端的格子裡面一個數字都沒有 timer 2000 論壇裡有網友說不能設太短 會卡住 |
1.一次都沒有嗎?應該至少有一兩次才對 2.Clock1 timer是多久送一次 |
超新手 發表於 2017-11-14 18:57 不好意思 因為改來改去 圖沒拉好 但是加上>0 超音波的值還是沒有 |
為什麼你要把 BytesAvailableToReceive>0 拿掉? |
小黑屋|手機版|Archiver|機器人論壇 from 2005.07
GMT+8, 2024-11-23 16:19 , Processed in 0.078365 second(s), 10 queries , Apc On.
Powered by Discuz! X3.2
© 2001-2013 Comsenz Inc.