jihhy 發表於 2019-1-13 19:15:16

碰撞感測器 藍芽

不好意思 我想請問一下

碰撞感測器 如果接收到碰撞訊號如何傳送給藍芽呢?


void setup()
{
pins_init();
}

void loop()
{
    if(isTriggered())
    {
       turnOnLED();
delay(2000);
}
else turnOffLED();
}
void pins_init()
{
    pinMode(LED,OUTPUT);
    turnOffLED();
    pinMode(COLLISION_SENSOR,INPUT);
}
boolean isTriggered()
{
    if(!digitalRead(COLLISION_SENSOR))
    {
         delay(50);
      if(!digitalRead(COLLISION_SENSOR))
return true;//the collision sensor triggers
   }
    return false;
}
void turnOnLED()
{
digitalWrite(LED,HIGH);//the LED is on
}
void turnOffLED()
{
digitalWrite(LED,LOW);//the LED is off
}

這是程式碼

超新手 發表於 2019-1-14 09:57:17

用 UART , 也就是 Serial

if(isTriggered()) {
Serial.print("1");
turnOnLED();
delay(2000);
}
把資料傳過去

jihhy 發表於 2019-1-14 15:16:12

你好 不好意思

我目前是想把接收到碰撞訊號的資訊傳給藍芽 在 傳送給手機app

也是在if(isTriggered()) {

後面加上Serial.print("1")這樣嗎

超新手 發表於 2019-1-14 15:21:41


但....當然不是那麼簡單
1. 你的藍牙接那根腳? 要記得先初始化
2. 你的 APP 要怎麼寫? 送 1 給它, APP 就知道了嗎?
.....

jihhy 發表於 2019-1-14 16:35:38

本帖最後由 jihhy 於 2019-1-14 16:37 編輯

#include <SoftwareSerial.h>
SoftwareSerial I2CBT(10,11);

int COLLISION_SENSOR = 6

void setup()
{
pins_init();
}

void loop()
{
    if(isTriggered())
    {
Serial.print("1");   
delay(1000);
}
else Serial.print("0");
}
void pins_init()
{
    pinMode(COLLISION_SENSOR,INPUT);
}
boolean isTriggered()
{
    if(!digitalRead(COLLISION_SENSOR))
    {
         delay(50);
      if(!digitalRead(COLLISION_SENSOR))
return true;//the collision sensor triggers
   }
    return false;
}

這是後面修改加上藍芽的 然後我會加上 當APP 那邊接收到1 就開始執行動作 這樣

超新手 發表於 2019-1-14 16:46:14

本帖最後由 超新手 於 2019-1-14 16:47 編輯

1) 你的藍牙是 I2CBT
所以要改成
I2CBT.print("1"); 和
I2CBT.print("0");
2) 要設藍牙鮑率
所以在 SETUP 中加入
I2CBT.begin(9600);
9600 是我亂寫的, 因為一般藍牙鮑率預設是 9600 bps
請依自己的藍牙鮑率去設
3)
你這樣寫, 沒觸發時, 傳 "0" 的速度(頻率)還蠻快的.......
不算錯.....請確認接收端(app)夠快即可


jihhy 發表於 2019-1-14 17:04:26

阿 抱歉 不好意思 後面鮑率跟delay時間忘記加

#include <SoftwareSerial.h>
SoftwareSerial I2CBT(10,11);

int COLLISION_SENSOR = 8;

void setup()
{
pins_init();
}
void loop()
{
    if(isTriggered())
    {
       I2CBT.print("1");
delay(1000);
}
else I2CBT.print("0");
delay(1000);
}
void pins_init()
{
    pinMode(COLLISION_SENSOR,INPUT);
    I2CBT.begin(9600);
}
boolean isTriggered()
{
    if(!digitalRead(COLLISION_SENSOR))
    {
         delay(50);
      if(!digitalRead(COLLISION_SENSOR))
return true;//the collision sensor triggers
   }
    return false;
}

所以大概是這個樣子嗎 謝謝你的回答

超新手 發表於 2019-1-14 17:39:48

1) 這樣改變成
送 "1" 的間隔時間約 2 秒
送 "0" 的間隔時間約 1 秒
這是你所預期的速度嗎?
2) 不確定你是用什麼碰撞感測器
等 1 ~ 2 秒才去檢查一次....
你確定你不會錯過碰撞訊號嗎?
當然...如果這個感測器的訊號會自己保持一段時間, 就沒問題

jihhy 發表於 2019-1-14 19:26:19

不好意思 我是使用這款
https://img.biggo.com.tw/s4Yl29QLgi2uLYC5f_N9SCc7clw2etqy6IT-25rXrYX0/https://cfshopeetw-a.akamaihd.net/file/09af26055e84384d901ed9e040cb4407
如果我Delay調成50的話 這樣傳送間隔會比較好嗎

超新手 發表於 2019-1-15 08:43:43

看起來是微動開關
壓住就會一直保持
要怎麼做比較好, 應該是看你的應用吧?
反正只要和你預期不同,
改一下數字就可以


jihhy 發表於 2019-1-15 19:47:51

好的 謝謝你
我會再根據我的應用來調整的
頁: [1]
查看完整版本: 碰撞感測器 藍芽