Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 12624|回復: 64
打印 上一主題 下一主題

Arduino藍芽感測器訊號傳給手機

[複製鏈接]
跳轉到指定樓層
1#
發表於 2018-2-16 00:55:49 | 顯示全部樓層 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
想請問如果我loop裡面打這些

//煙霧
  S=analogRead(smoke);
  Serial.print("煙霧濃度:");
  Serial.println(S);
  delay(500);
  
//溫溼度
  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);
  Serial.print("Humidity: ");
  Serial.print(h);                    
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);                    
  Serial.print(" *C ");
  Serial.print(f);                    
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.print(hic);                 
  Serial.print(" *C ");
  Serial.print(hif);                  
  Serial.println(" *F");
  delay(500);


  //紅外線
  R=digitalRead(red);
  if(R==HIGH)
  {
  Serial.println("有人!");
  digitalWrite(LEDR,HIGH);
  }
  else
  {
  Serial.println("沒有人");
  digitalWrite(LEDR,LOW);
  }
  delay(500);

以上都還只是測試用
但是我要如何把資料傳給APP INVENTOR2的APP
網路上爬過也試過很多
也曾使用過這個

接收到序列阜的資料

但是我有這種的感測器

這樣就會一堆數值堆在一個標籤裡面

請問我要如何讓他判斷一個感測到的數值到要到他一個正確的位置
2#
 樓主| 發表於 2018-2-16 23:36:08 | 顯示全部樓層

這是我看你推薦的那一篇文章照著做出來的
以下Arduino端程式
#include <SoftwareSerial.h>
SoftwareSerial I2CBT(0,1);
#include <DHT.h>     
#define DHTTYPE DHT22
const int smoke=2;
const int tem=3;
DHT dht(tem, DHTTYPE);
void setup() {
  Serial.begin(9600);
  pinMode(smoke,INPUT);
  pinMode(tem,INPUT);
  dht.begin();
}
void loop() {
  int x = analogRead(smoke);
  int y = dht.readHumidity();
  int z = dht.readTemperature();
  int a = dht.readTemperature(true);
  byte Data[12];
  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]=a/256;
  Data[11]=a%256;
  
if (Serial.available() > 0) {
    char val = Serial.read();
    switch (val) {
      case 97:
        for (int i = 0 ; i < 9 ; i++) {
          Serial.write(Data);
          break;
        }
    }
}
}
有很多地方都搞不清楚為甚麼 為甚麼會這樣
像是APP的接收1無位元支無號數是 97 98 99
上面應該有不少錯 因為東西出不來
第一次做兩個連接的 有很多不懂
希望能告訴哪裡有誤 謝謝
3#
 樓主| 發表於 2018-2-17 21:40:53 | 顯示全部樓層
本帖最後由 RJay 於 2018-2-17 21:46 編輯

請問藍芽SoftwareSerial I2CBT(0,1);這一行 0代表RX 1代表TX是嗎 藍芽的那一端就要相反接?
我只有煙霧濃度出現249.29 而且不會變動 是不是哪裡還有問題(接線沒有問題Serial.print 會顯示);
4#
 樓主| 發表於 2018-2-18 11:06:27 | 顯示全部樓層
喔喔喔!我成功了 謝謝救援
5#
 樓主| 發表於 2018-2-18 17:51:45 | 顯示全部樓層
我想再請問一下 那如果是紅外線感測器這種
要如何讓手機不顯示數值 只顯示 有/沒有 人這樣的
6#
 樓主| 發表於 2018-2-18 20:34:49 | 顯示全部樓層
請問如果我紅外線感應到人 然後LED亮 沒人就滅
我要如何在感應到人的情下把LED關掉然後再次感應到人的時候開啟
7#
 樓主| 發表於 2018-2-18 22:40:07 | 顯示全部樓層
這樣好像可以 那請問這個變數要在哪裡設定呢
那要如何把LED關掉
8#
 樓主| 發表於 2018-2-19 10:43:46 | 顯示全部樓層
假如我進房間 紅外線感測器感應到我 燈(LED)自動打開
但是我要關燈 不過我在房間裡 我用手機操控她把它關掉 直到我出去 再次進入在打開燈(LED)
(還要可以用按鈕開關燈)這樣的情形可以嗎
9#
 樓主| 發表於 2018-2-19 16:37:54 | 顯示全部樓層
本帖最後由 RJay 於 2018-2-19 16:39 編輯

我現在只能用這個按鈕控制LED
if(digitalRead(button) == HIGH)
if(digitalRead(led) == HIGH){
       digitalWrite(led, LOW);
       delay(500);
}
else{
       digitalWrite(led, HIGH);
       delay(500);
}
但我不知道怎麼用偵測到人的時候還可以把led關閉
如果我把它用成這樣
if(紅外線感測器 == HIGH){
digitalWrite(led, HIGH);
if(digitalRead(button) == HIGH)
if(digitalRead(led) == HIGH){
       digitalWrite(led, LOW);
       delay(500);
}
else{
       digitalWrite(led, HIGH);
       delay(500);
}
}
else
digitalWrite(led, LOW);
偵測到的時候會不受控制 因為她會一直把led打開
請問這要如何解決
10#
 樓主| 發表於 2018-2-19 18:07:20 | 顯示全部樓層
那請問要用甚麼方法做呢 除了紅外線開燈(LED) 還要可以手動跟用手機APP開關燈(LED)
還需要甚麼元件或是程式要怎麼改
11#
 樓主| 發表於 2018-2-20 00:00:17 | 顯示全部樓層
請問我要怎麼讓感應器不再偵測
請問能寫個範例嗎 我試了一下發現我想不通 加入LED都會亂亮(按按鈕的時候)
12#
 樓主| 發表於 2018-2-20 10:52:56 | 顯示全部樓層
本帖最後由 RJay 於 2018-2-20 10:54 編輯

請問我現在連接藍芽後APP變得非常卡頓
這是甚麼原因
APP


arduino
void loop() {
  int a = analogRead(smoke);
  int b = dht.readHumidity();
  int c = dht.readTemperature();
  int d = dht.readTemperature(true);
  byte Data[12];
  Data[0]=97;
  Data[1]=a/256;
  Data[2]=a%256;
  Data[3]='b';
  Data[4]=b/256;
  Data[5]=b%256;
  Data[6]='c';
  Data[7]=c/256;
  Data[8]=c%256;
  Data[9]='d';
  Data[10]=d/256;
  Data[11]=d%256;
  
if (Serial.available() > 0) {
    char val = Serial.read();
    switch (val) {
      case 1:
        for (int i = 0 ; i < 12 ; i++)
        Serial.write(Data);
        delay(100);
        break;   
      case 2:
        digitalWrite(fan, HIGH);
        break;
      case 3:
        digitalWrite(fan, LOW);
        break;
    }
}
if (a>380){
   digitalWrite(bz,HIGH);
   }
   else{
   digitalWrite(bz,LOW);
   }
   R=digitalRead(red);
   if(R1){
   if(R == LOW){
      Serial.write(0);
      delay(500);
      R1=0;
      digitalWrite(led,LOW);
  }
  }
   else{
   if(R==HIGH){
      Serial.write(1);
      delay(500);
      R1=1;
      digitalWrite(led,HIGH);
  }
}
    if(digitalRead(button) == HIGH)
    if(digitalRead(led) == HIGH){
       digitalWrite(led, LOW);
       delay(500);
      }
    else{
       digitalWrite(led, HIGH);
       delay(500);
      }
13#
 樓主| 發表於 2018-2-20 11:38:02 | 顯示全部樓層
請問改成這樣是對的嗎
R=digitalRead(red);
if(R1){
if(R == LOW){
      Serial.write(0);
      R1=0;
      digitalWrite(led,LOW);
}
}
else{
   if(R==HIGH){
      Serial.write(1);
      R1=1;
      digitalWrite(led,HIGH);
  }
}
if(digitalRead(button) == HIGH){
if(digitalRead(led) == HIGH){
       digitalWrite(led, LOW);
       delay(500);
      }
else{
       digitalWrite(led, HIGH);
       delay(500);
      }
    }
紅外線那邊可以用按鈕控制燈(無論有沒有感應到)
APP端連接到藍芽就會黑屏然後無回應 是不是因為很多感應器都用在一起的關係
14#
 樓主| 發表於 2018-2-20 15:25:48 | 顯示全部樓層
現在只要連到藍芽都很卡 不管有沒有傳資料 這是哪裡出了問題@@
15#
 樓主| 發表於 2018-2-20 16:34:21 | 顯示全部樓層
可是現在我就算把它去掉 或是用其他比較簡單的程式連到就會卡住了
16#
 樓主| 發表於 2018-2-20 17:08:21 | 顯示全部樓層
我現在找到問題了
那請問發出1或0這個動作要怎麼寫才是對的
17#
 樓主| 發表於 2018-2-20 19:29:26 | 顯示全部樓層
現在按鈕出了個問題 有時候會衝突到 而且他會莫名其妙地把我的arduino reset
請問這要怎麼處理
18#
 樓主| 發表於 2018-2-20 20:14:48 | 顯示全部樓層
#include <SoftwareSerial.h>
#include <DHT.h>   
#define DHTTYPE DHT22
const int smoke=A5;
const int tem=2;
const int red=3;
const int button=4;
const int fan=12;
const int led=13;
int R;
unsigned char R1=0;
DHT dht(tem, DHTTYPE);
void setup() {
  Serial.begin(9600);
  pinMode(smoke,INPUT);
  pinMode(tem,INPUT);
  pinMode(red,INPUT);
  pinMode(button,INPUT);
  pinMode(fan,OUTPUT);
  pinMode(led,OUTPUT);
  dht.begin();
}
void loop() {
  R=digitalRead(red);
  int a = analogRead(smoke);
  int b = dht.readHumidity();
  int c = dht.readTemperature();
  int d = dht.readTemperature(true);
  byte Data[13];
  Data[0]=97;
  Data[1]=a/256;
  Data[2]=a%256;
  Data[3]='b';
  Data[4]=b/256;
  Data[5]=b%256;
  Data[6]='c';
  Data[7]=c/256;
  Data[8]=c%256;
  Data[9]='d';
  Data[10]=d/256;
  Data[11]=d%256;
  if(R == HIGH){
      Data[12]='e';
  }
   if(R==LOW){
      Data[12]='f';
  }
if (Serial.available() > 0) {
    char val = Serial.read();
    switch (val) {
      case 1:
        for (int i = 0 ; i < 13 ; i++)
        Serial.write(Data[i]);
        delay(100);
        break;   
      case 2:
        digitalWrite(fan, HIGH);
        break;
      case 3:
        digitalWrite(fan, LOW);
        break;
    }
}
if(R1){
if(R == LOW){
      R1=0;
      digitalWrite(led,LOW);
      }
}
else{
if(R==HIGH){
      R1=1;
      digitalWrite(led,HIGH);
      }
}
if(digitalRead(button) == HIGH){
    if(digitalRead(led) == HIGH){
       digitalWrite(led, LOW);
       delay(500);
      }
    else{
       digitalWrite(led, HIGH);
       delay(500);
      }
}
}
19#
 樓主| 發表於 2018-2-20 20:56:00 | 顯示全部樓層
我有在接1顆LED
差不多 就是偵測到人 led亮  在這同時也可以把led關掉或再次打開(有感應到人的情況下) 就是偵測到人的那時候亮1次之後就一直亮就好 沒偵測到人就關掉 又偵測到人的時候開啟led....loop(也要可以用手機APP開關)
但是我的按鈕是按下去會起來那種 這我就不知道怎用
20#
 樓主| 發表於 2018-2-21 16:39:14 | 顯示全部樓層
qzec0910266 發表於 2018-2-21 11:36
你好
請問一下
appinventor的字型怎麼改的跟你這張圖片一樣??

這是手機的畫面 應該是改手機字型吧?
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-2 17:13 , Processed in 0.244827 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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