Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 3832|回復: 10

碰撞感測器 藍芽

[複製鏈接]
發表於 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);
}
把資料傳過去
 樓主| 發表於 2019-1-14 15:16:12 | 顯示全部樓層
你好 不好意思

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

也是在if(isTriggered()) {

後面加上Serial.print("1")這樣嗎
發表於 2019-1-14 15:21:41 | 顯示全部樓層

但....當然不是那麼簡單
1. 你的藍牙接那根腳? 要記得先初始化
2. 你的 APP 要怎麼寫? 送 1 給它, APP 就知道了嗎?
.....
 樓主| 發表於 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)夠快即可


 樓主| 發表於 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 秒才去檢查一次....
你確定你不會錯過碰撞訊號嗎?
當然...如果這個感測器的訊號會自己保持一段時間, 就沒問題
 樓主| 發表於 2019-1-14 19:26:19 | 顯示全部樓層
不好意思 我是使用這款

如果我Delay調成50的話 這樣傳送間隔會比較好嗎
發表於 2019-1-15 08:43:43 | 顯示全部樓層
看起來是微動開關
壓住就會一直保持
要怎麼做比較好, 應該是看你的應用吧?
反正只要和你預期不同,
改一下數字就可以


 樓主| 發表於 2019-1-15 19:47:51 | 顯示全部樓層
好的 謝謝你
我會再根據我的應用來調整的
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-3-29 03:51 , Processed in 0.222092 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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