我想要將經過計算後的變數傳給從端的arduino板子,好讓從端的馬達動作,但我所寫的程式沒有讓從端動作,目前能成功的只有從序列阜監控視窗輸入能成功動作,換作是直接傳送經計算的變數就不行了,希望有高手能幫我找出問題
主端程式如下:
#include <SoftwareSerial.h> // 引用程式庫
int sensor1 = 11;
int sensor2 = 10;
int a = 0 , b = 0;
int c = -1 , d = -1;
int inroom = 0;
// 定義連接藍牙模組的序列埠
SoftwareSerial BT(8, 9); // 接收腳, 傳送腳
char val; // 儲存接收資料的變數
void setup() {
Serial.begin(9600); // 與電腦序列埠連線
Serial.println("BT is ready!");
// 藍牙透傳模式的預設連線速率。
BT.begin(9600);
pinMode(sensor1,INPUT);
pinMode(sensor2,INPUT);
}
void loop() {
a = digitalRead(sensor1);
b = digitalRead(sensor2);
if ((c != a) || (d != b)) //人體進出判斷
{
if ((c == 1) && (d == 0) && (a == 1) && (b == 1))
{
Serial.println("out");
inroom = inroom - 1; //房間人數-1
}
if ((c == 0) && (d == 1) && (a == 1) && (b == 1))
{
Serial.println("in");
inroom = inroom + 1; //房間人數+1
}
c = a;
d = b;
}
if (inroom != 0)
{
val = '0';
}
if (inroom == 0)
{
val = '1' ;
}
// 若收到「序列埠監控視窗」的資料,則送到藍牙模組
if (Serial.available()) {
BT.print(val);
Serial.println(val);
}
// 若收到藍牙模組的資料,則送到「序列埠監控視窗」
if (BT.available()) {
val = BT.read();
Serial.print(val);
}
}
從端程式目前沒有問題,但還是丟上來,順便問一下,如果我希望在房間人數為0時讓馬達延遲30秒動作,期間房間人數變為>0時就停止計算那30秒,馬達也不會動作,整個程式從頭來過,我該怎麼寫,這也是我想很久的問題
#include <SoftwareSerial.h> // 引用程式庫
#include <Servo.h>
Servo myservo; // 建立一個 servo 物件,最多可建立 12個 servo
int pos = 0; // 設定 Servo 位置的變數
int a;
// 定義連接藍牙模組的序列埠
SoftwareSerial BT(8, 9); // 接收腳, 傳送腳
char val; // 儲存接收資料的變數
const byte LED_PIN = 13; // 定義LED腳位
void setup() {
Serial.begin(9600);
// 設定HC-05藍牙模組,AT命令模式的連線速率。
BT.begin(9600);
pinMode(LED_PIN, OUTPUT);
myservo.attach(10); // 將 servo 物件連接到 pin 10
}
void loop() {
// 若收到藍牙模組的資料,則送到「序列埠監控視窗」
if (BT.available()) {
val = BT.read();
Serial.println(val);
if (val != '0')
{}
else if (val == '0')
{
// 正轉 180度
for (pos = 0; pos <= 180; pos += 1) // 從 0 度旋轉到 180 度,每次 1 度
{
myservo.write(pos); // 告訴 servo 走到 'pos' 的位置
delay(15); // 等待 15ms 讓 servo 走到指定位置
}
// 反轉 180度
for (pos = 180; pos >= 0; pos -= 1) // 從 180 度旋轉到 0 度,每次 1 度
{
myservo.write(pos); // 告訴 servo 走到 'pos' 的位置
delay(15); // 等待 15ms 讓 servo 走到指定位置
}
}
}
}
最後,謝謝願意協助的你~
|