新手求助
請問一下 兩個紅外線感應裝置A和B感應到有東西經過的話從0變1下面重點......
如果先A==1之後再B==1的情況,輸出+1
順序反過來(先B再A)則輸出-1
這個部分應該怎麼寫? int check(void) {
static char lastA=0,lastB=0;
if(lastA != A){
if(A==1 && B==1)
return -1;
}
if(lastB != B) {
if(B==1 && A== 1)
return 1;
}
lastA = A;
lastB = B;
return 0;
} 感謝你的回答 幫了大忙
但按照我的要求,return(-1)和return(+1)的位置是不是應該反過來?
不過還是謝謝你 應該不用反過來吧~
你的要求是 先B再A 則輸出-1
所以是 A 發生變化時 A 要等於 1 而且 B 要等於 1
if(lastA != A){
if(A==1 && B==1)
return -1;
} 喔喔~ 原來是這樣 我看懂了 那個 不好意思 我又有問題了....void loop() {
int ira = digitalRead(irReceiver_a);
int irb = digitalRead(irReceiver_b);
int check(void) {
static char lastA=0,lastB=0;
if(lastA != ira) {
if(ira==1 && irb==1)
return -1;
}
if(lastB != irb) {
if(irb==1 && ira==1)
return 1;
}
lastA = ira;
lastB = irb;
return 0;
}
}裡面 void loop() { 這段在編譯的時候會報錯
a function-definition is not allowed here before '{' token
請問這是哪裡錯了? 上面講錯了
報錯了的是 int check(void) { 這一行 本帖最後由 croma 於 2016-12-7 10:36 編輯
回復 7# tuyn76801
因為你的括號是不對齊的 loop 函數的下括號勒 對不起不是很懂,所謂括號不對齊是甚麼意思?
loop的下括號的話在19行 回復 9# tuyn76801
你一個函數包裹另一個函數,不是每個編譯器都支援這種語法 謝謝指點,現在把他全部宣告在外面就可以了const int irReceiver_a = 2; // IRA
const int irLed_a= 3;
const int irReceiver_b = 4; // IRB
const int irLed_b= 5;
const unsigned int frequency = 38000; // 發射頻率(單位: Hz)
void setup() {
Serial.begin(9600); // 開啟 Serial port, 通訊速率為 9600 bps
pinMode(irReceiver_a, INPUT); // 把 irReceiverin 接腳設置為 INPUT
pinMode(irLed_a, OUTPUT); // 把 irLedin 接腳設置為 OUTPUT
pinMode(irReceiver_b, INPUT); // 把 irReceiverout 接腳設置為 INPUT
pinMode(irLed_b, OUTPUT); // 把 irLedout 接腳設置為 OUTPUT
tone(irLed_a, frequency); // 產生指定頻率的脈波 (Pulses)
tone(irLed_b, frequency);
}
int ira = digitalRead(irReceiver_a);
int irb = digitalRead(irReceiver_b);
int check(void) {
static char lasta=0,lastb=0;
if(lasta!=ira) {
if(ira==1&&irb==1) {
Serial.println("IN");
return 1;
}
}
if(lastb!=irb) {
if(irb==1&&ira==1) {
Serial.println("OUT");
return -1;
}
}
lasta=ira;
lastb=irb;
return 0;
}
int p;
void loop() {
int c = check();
if(c != 0) {
p = p + c;
Serial.println(c);
Serial.println(p);
}
}接下來就是上傳來實驗看看 現在遇到的問題
(1) int ira = digitalRead(irReceiver_a);
int irb = digitalRead(irReceiver_b);
這兩個一定要在void loop()裡面,不然ira和irb會一直是1
(2) check(void)不能在void loop()裡面,不然編譯會失敗
但是如果把check(void)放在最外層的話,他就讀不到ira和irb了
請問有沒有什麼寫法可以讓check(void)抓的到在void loop()裡面的ira和irb ? (對不起,我副程式和return不太熟) 宣告在外面,程式寫裡面即可
char ira;
char irb;
int check(void) {
ira = digitalRead(irReceiver_a);
irb = digitalRead(irReceiver_b);
static char lasta=0,lastb=0;
if(lasta!=ira) { 恩 謝謝 我這樣修改試試看
頁:
[1]