我想要將經過計算後的變數傳給從端的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 走到指定位置 
  }     
    } 
  } 
} 
 
 
最後,謝謝願意協助的你~ 
 
 
 |