Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
樓主: leo0983405269

請問DHT11如果要傳送到手機

[複製鏈接]
發表於 2017-10-25 20:10:58 | 顯示全部樓層
改成 雙引號也不行嗎?
 樓主| 發表於 2017-10-25 20:14:35 | 顯示全部樓層
超新手 發表於 2017-10-25 19:50
找不到 dht.h 檔
Dht library 不是預設的
如果你曾經成功過

請問DHT版本有關係嗎

我有找到一個網頁

有歷年版本

改小寫的也沒有用
發表於 2017-10-25 20:18:57 來自手機 | 顯示全部樓層
它一定有範例,直接開它的範例試試看
 樓主| 發表於 2017-10-25 20:22:59 | 顯示全部樓層
我是直接叫範例出來 把它註解弄掉
改一些腳位而已  
 樓主| 發表於 2017-10-25 21:26:06 | 顯示全部樓層
我把整個arduino全部刪掉 再安裝就成功了  打擾您  謝謝
 樓主| 發表於 2017-10-31 18:17:06 | 顯示全部樓層
超新手 發表於 2017-10-25 20:18
它一定有範例,直接開它的範例試試看

請問為什麼這邊他說我沒有宣告的樣子

1509444569230.jpg



1509444981321.jpg 我這邊宣告有問題嗎?




但是我單獨測試他編譯是沒有問題的
2.jpg
發表於 2017-10-31 18:58:57 | 顯示全部樓層
沒看到你有宣告?
DHT dht(DHTPIN, DHTTYPE);
 樓主| 發表於 2017-10-31 20:08:33 | 顯示全部樓層
超新手 發表於 2017-10-31 18:58
沒看到你有宣告?
DHT dht(DHTPIN, DHTTYPE);

對   我以為只要#define DHTTYPE DHT11   // DHT 11 就好了  謝謝
 樓主| 發表於 2017-10-31 21:34:58 | 顯示全部樓層
超新手 發表於 2017-10-31 18:58
沒看到你有宣告?
DHT dht(DHTPIN, DHTTYPE);

#include <SoftwareSerial.h> //Arduino I2C library
#include "DHT.h"
#define DHTPIN A1  
#define DHTTYPE DHT11   // DHT 11
//byte serialA;
//#include <Wire.h>

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();
}

void loop()
{
  byte Data[7];
  byte cmmd[20];
  int insize;
  int x =pulseIn(echo, HIGH);
  int y = dht.readHumidity();
  int z = dht.readTemperature();
  //serialA=I2CBT.read();
  
  Data[0]=97;
  Data[1]=x/256;
  Data[2]=x%256;
  Data[3]=y/256;
  Data[4]=y%256;
  Data[5]=z/256;
  Data[6]=z%256;
  
  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);
  //int x =pulseIn(echo, HIGH);
  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) )

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);


  if (isnan(h) || isnan(t) || isnan(f)) {
    //Serial.println("Failed to read from DHT sensor!");
    return;
  }
  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);
  
  
  delay(200);
  int sendData = (int) (distance * 100); //times 100 and convert disance to integer
  byte Data[3];

  //Data[0] = 97; //key send to phone
  //Data[1] = sendData / 256; //divides sendData to two 1 byte packets
  //Data[2] = sendData % 256;
這邊原本是傳送超音波的
那我現在要傳送三種資料
要怎麼把這幾行寫到上面的Data[0]~Data[2]
複製到上面去就可以了嗎?
   
  
  if(Serial.available()>0)
  {
    val = Serial.read();
    switch(val)
    {
      case 97:   //測距離
      for(int i = 0; i < 6; i++)
        Serial.write(Date[ i]); //send packet 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);
}




我想再問一下紅色的三行 我應該要有嗎   
//#include <Wire.h> 這行我查(1) I2C 地址設定 及 I2C 地址掃瞄是這樣
因為我編譯會再serialA=I2CBT.read();這行有錯誤
但是我當初傳送超音波沒有用到這幾行
但是我找範例傳送溫度資料他們是有那幾行
發表於 2017-10-31 21:50:56 來自手機 | 顯示全部樓層
1.資料往下設即可
data[6]=senddata/256;
data[7]=senddata%256;
2.陣列要宣告到data[8]
3.serial.write 要送 8個位元
4. i2c .....當然是多餘的
 樓主| 發表於 2017-11-1 12:19:57 | 顯示全部樓層
超新手 發表於 2017-10-31 21:50
1.資料往下設即可
data[6]=senddata/256;
data[7]=senddata%256;

第一個請問資料往下設即可

Data[0]=97;
Data[1]=x/256;
Data[2]=x%256;

因為我這三個就是寫超音波的
所以我直接改成
byte Data[7];
byte cmmd[20];
int insize;
// int x =pulseIn(echo, HIGH);
  int sendData = (int) (distance * 100); //times 100 and convert disance to integer
  byte Data[3];
  int y = dht.readHumidity();
  int z = dht.readTemperature();

  Data[0]=97;
  Data[1]=sendData/256;
  Data[2]=sendData%256;
  Data[3]=y/256;
  Data[4]=y%256;
  Data[5]=z/256;
  Data[6]=z%256;
是這樣改嗎?
第二個所以我還是data0~data6 所以陣列還是7個 這樣
第三個serial.write 還是送0~6 7個位元
           case 97:   //測距離
        for(int i = 0; i < 6; i++)
        Serial.write(Date[ i]); //send packet to phone
        break;
發表於 2017-11-1 14:45:09 來自手機 | 顯示全部樓層
1. i < 7 才是 7 個
2. serial.write(data[ i]);
打錯字了
 樓主| 發表於 2017-11-1 16:26:37 | 顯示全部樓層
超新手 發表於 2017-11-1 14:45
1. i < 7 才是 7 個
2. serial.write(data[ i]);
打錯字了

void loop()
{
  byte Data[7];
  byte cmmd[20];
  int insize;
  //int x =pulseIn(echo, HIGH);
  int y = dht.readHumidity();
  int z = dht.readTemperature();
  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 sendData = (int) (distance * 100); //times 100 and convert disance to integer
  byte Data[3];
  請問這邊是哪裡有錯誤編譯不過去....
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);


  if (isnan(h) || isnan(t) || isnan(f)) {
    //Serial.println("Failed to read from DHT sensor!");
    return;
  }
  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);
  
  Data[0]=97;
  Data[1]=sendData/256;
  Data[2]=sendData%256;
  Data[3]=y/256;
  Data[4]=y%256;
  Data[5]=z/256;
  Data[6]=z%256;


  delay(200);
  if(Serial.available()>0)
  {
    val = Serial.read();
    switch(val)
    {
      case 97:   //測距離
      for(int i = 0; i < 7; i++)

另外可以問一下 我這樣arduino傳送三種資料還有哪邊有問題沒有改到嗎
一直打擾你也很抱歉
發表於 2017-11-1 17:29:47 | 顯示全部樓層
你宣告了兩次 data
一次是 data[7],一次是 data[3]
其實從 data[3]到float hic
這幾行都是多餘的
沒看到你有用過它來做過什麼
 樓主| 發表於 2017-11-3 15:55:43 | 顯示全部樓層
超新手 發表於 2017-11-1 17:29
你宣告了兩次 data
一次是 data[7],一次是 data[3]
其實從 data[3]到float hic

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);
  
  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);

這幾行是從DHT11 的 void 複製出來的

他不是會去讀溫溼度嗎

然後因為一開始int y = dht.readHumidity();
                       int z = dht.readTemperature();

然後去做 y/256
              y%256  等等

跟超音波一樣的意思  不是嗎  還是我從一開始出發就錯了...
發表於 2017-11-3 16:22:14 | 顯示全部樓層
你已經在上面讀了一次
int y = dht.readHumidity();
int z = dht.readTemperature();
然後下面再讀一次
float h = dht.readHumidity();
float t = dht.readTemperature();
第二次這個值 h, t, 從頭到尾也沒看到你用過
其他也一樣, 就多讀而已
當然, 放著也不會怎麼樣..
 樓主| 發表於 2017-11-7 18:17:11 | 顯示全部樓層
超新手 發表於 2017-11-3 16:22
你已經在上面讀了一次
int y = dht.readHumidity();
int z = dht.readTemperature();

可以問一下為什麼這樣不行

  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;

會有下面這個錯誤
part100:50:error:expected';'在“數據”之前

part100:53:error:expected';'在“數據”之前


但是這樣可以嗎
  Data[0]=97;
  Data[1]=x/256;
  Data[2]=x%256;
  Data[3]=y/256;
  Data[4]=y%256;
  Data[5]=z/256;
  Data[6]=z%256;
發表於 2017-11-7 19:17:07 來自手機 | 顯示全部樓層
本帖最後由 超新手 於 2017-11-7 19:22 編輯

1.怎麼寫都可以,只要兩邊一致就可以
2. 要傳幾個 byte,當然要宣告足夠記憶體
byte data[9];
 樓主| 發表於 2017-11-7 19:25:16 | 顯示全部樓層
超新手 發表於 2017-11-7 19:17
1.怎麼寫都可以,只要兩邊一致就可以

不好意思 我沒表達清楚

我現在卡在
  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;
這樣會有這樣的錯誤
part100:50:error:expected';'在“數據”之前

part100:53:error:expected';'在“數據”之前

只有用下面這個才不會有錯誤出現
  Data[0]=97;
  Data[1]=x/256;
  Data[2]=x%256;
  Data[3]=y/256;
  Data[4]=y%256;
  Data[5]=z/256;
  Data[6]=z%256;

但是我想要用有Data[3]='b'  Data[6]='c' 這幾行的程式
因為我照著網路上的範例自己改了一下app


1111.jpg

 樓主| 發表於 2017-11-7 19:30:14 | 顯示全部樓層
超新手 發表於 2017-11-7 19:17
1.怎麼寫都可以,只要兩邊一致就可以
2. 要傳幾個 byte,當然要宣告足夠記憶體
byte data[9]; ...

摁  我有改成9個 byte

您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-4-18 21:21 , Processed in 0.257562 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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