Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 9759|回復: 13
打印 上一主題 下一主題

新手求助

[複製鏈接]
跳轉到指定樓層
1#
發表於 2016-12-5 12:28:40 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
請問一下 兩個紅外線感應裝置A和B感應到有東西經過的話從0變1
下面重點......

如果先A==1之後再B==1的情況,輸出+1
順序反過來(先B再A)則輸出-1

這個部分應該怎麼寫?
2#
 樓主| 發表於 2016-12-5 17:59:25 | 顯示全部樓層
感謝你的回答 幫了大忙
但按照我的要求,return(-1)和return(+1)的位置是不是應該反過來?
不過還是謝謝你
3#
 樓主| 發表於 2016-12-5 22:06:20 | 顯示全部樓層
喔喔~ 原來是這樣 我看懂了
4#
 樓主| 發表於 2016-12-6 22:16:06 | 顯示全部樓層
那個 不好意思 我又有問題了....
  1. void loop() {
  2.   int ira = digitalRead(irReceiver_a);      
  3.   int irb = digitalRead(irReceiver_b);  
  4.   
  5. int check(void) {
  6.   static char lastA=0,lastB=0;
  7.   if(lastA != ira) {
  8.     if(ira==1 && irb==1)
  9.       return -1;
  10.   }
  11.   if(lastB != irb) {
  12.     if(irb==1 && ira==1)
  13.       return 1;
  14.   }
  15.   lastA = ira;
  16.   lastB = irb;
  17.   return 0;
  18. }
  19. }
複製代碼
裡面 void loop() { 這段在編譯的時候會報錯
a function-definition is not allowed here before '{' token

請問這是哪裡錯了?
5#
 樓主| 發表於 2016-12-6 22:22:18 | 顯示全部樓層
上面講錯了
報錯了的是 int check(void) { 這一行
6#
 樓主| 發表於 2016-12-7 12:22:43 | 顯示全部樓層
對不起不是很懂,所謂括號不對齊是甚麼意思?
loop的下括號的話在19行
7#
 樓主| 發表於 2016-12-7 19:16:37 | 顯示全部樓層
謝謝指點,現在把他全部宣告在外面就可以了
  1. const int irReceiver_a = 2;                // IRA
  2. const int irLed_a  = 3;                    
  3. const int irReceiver_b = 4;                // IRB
  4. const int irLed_b  = 5;                  
  5. const unsigned int frequency = 38000;    // 發射頻率(單位: Hz)

  6. void setup() {               
  7.   Serial.begin(9600);                    // 開啟 Serial port, 通訊速率為 9600 bps
  8.   pinMode(irReceiver_a, INPUT);           // 把 irReceiverin 接腳設置為 INPUT
  9.   pinMode(irLed_a, OUTPUT);               // 把 irLedin 接腳設置為 OUTPUT
  10.   pinMode(irReceiver_b, INPUT);           // 把 irReceiverout 接腳設置為 INPUT
  11.   pinMode(irLed_b, OUTPUT);               // 把 irLedout 接腳設置為 OUTPUT
  12.   
  13.   tone(irLed_a, frequency);               // 產生指定頻率的脈波 (Pulses)
  14.   tone(irLed_b, frequency);
  15. }

  16. int ira = digitalRead(irReceiver_a);
  17. int irb = digitalRead(irReceiver_b);
  18. int check(void) {
  19.     static char lasta=0,lastb=0;
  20.     if(lasta!=ira) {
  21.       if(ira==1&&irb==1) {
  22.       Serial.println("IN");
  23.       return 1;
  24.       }
  25.     }
  26.     if(lastb!=irb) {
  27.       if(irb==1&&ira==1) {
  28.       Serial.println("OUT");
  29.       return -1;
  30.       }
  31.     }
  32.     lasta=ira;
  33.     lastb=irb;
  34.     return 0;
  35. }
  36. int p;
  37. void loop() {
  38.   int c = check();
  39.   if(c != 0) {
  40.     p = p + c;            
  41.     Serial.println(c);
  42.     Serial.println(p);
  43.   }
  44. }
複製代碼
接下來就是上傳來實驗看看
8#
 樓主| 發表於 2016-12-9 14:36:59 | 顯示全部樓層
現在遇到的問題
(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不太熟)
9#
 樓主| 發表於 2016-12-9 20:34:09 | 顯示全部樓層
恩 謝謝 我這樣修改試試看
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-14 12:16 , Processed in 0.254745 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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