Robofun 機器人論壇

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

新手求助:用解碼器加一個按鍵控制2個LED

[複製鏈接]
跳轉到指定樓層
1#
發表於 2014-9-19 06:18:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
不好意思第一次在此發問,我在試作Arduino用解碼器加一個按鍵來控制2個LED,
目前程式2個led只會跟1個val變數跑,led0的val變數會帶給led1,這不是我要的結果,
請問有辦法把一組val變成兩組獨立變數嗎?例如val0,val1.可能是陣列或MAP類似概念.
或是判斷何時為val新值,舊值,運算並套用各自LED.這些部份我真的是不會.
我想讓encoder"單獨"控制led0Pin跟led1Pin.比方說,轉encoder調整led0Pin亮度,
按下按鍵控制切換到led1Pin,轉encoder調整led1Pin亮度,再按按鍵回到led0Pin.如此類推.
請各位幫忙.感謝.
  1. #include <RotaryEncoder.h>   // 從這來的. https://code.google.com/p/arduino-rotary-encoder-with-velocity/
  2. int val =0;
  3. int x=0;
  4. RotaryEncoder encoder(A2,A3,5,6,3000);  //解碼器腳位 A_A2,B_A3
  5. const int buttonPin = 2;   
  6. const int switch_ledPin = 13;
  7. int led0Pin = 5;
  8. int led1Pin = 6;
  9. int button_state = HIGH;
  10. unsigned long int previous_time = 0;

  11. void switch_led_state() {
  12.     if(digitalRead(switch_ledPin) == LOW) digitalWrite(switch_ledPin, HIGH);
  13.     else digitalWrite(switch_ledPin, LOW);
  14.     Serial.print(String("Switching after ") + (millis() - previous_time) + String(" milliseconds\n"));
  15.     previous_time = millis();
  16.     }
  17.    
  18.    
  19. void setup() {  
  20.     pinMode(buttonPin, INPUT_PULLUP);
  21.     pinMode(switch_ledPin, OUTPUT);
  22.     pinMode(led0Pin, OUTPUT);
  23.     pinMode(led1Pin, OUTPUT);
  24.     digitalWrite(switch_ledPin, LOW);
  25.     Serial.begin(9600) ;
  26.     }
  27.    


  28. void loop() {
  29.    if(digitalRead(buttonPin) == LOW) {
  30.         if(button_state != LOW) switch_led_state();
  31.         button_state = LOW;
  32.     } else button_state = HIGH;
  33.    
  34.    int enc = encoder.readEncoder();
  35.    int changevalue = 1;
  36.    if(enc != 0) {
  37.     val = val + (enc);
  38.     val = min(val,255);
  39.     val = max(val,0);
  40.     Serial.println(val);
  41.    }
  42.    delayMicroseconds(5);
  43.    if (digitalRead (switch_ledPin)==LOW)
  44.    x=1;
  45.    if (digitalRead (switch_ledPin)==HIGH)
  46.    x=2;
  47.    switch (x){
  48.    case 1:
  49.    analogWrite(led0Pin,(val));
  50.    break;
  51.    case 2:
  52.    analogWrite(led1Pin,(val));
  53.    break;
  54.    }
  55.    }
複製代碼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-30 18:32 , Processed in 0.195066 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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