|
- #include <Arduino.h>//ATMEGA328P-AU-2Channel-PWM.ino
- #define PIN_ENT 6 //編碼器的按鈕接6
- #define PIN_ENA 7 //編碼器的a腳接7
- #define PIN_ENB 8 //編碼器的b腳接8
- #define PIN_VOL 9 //PWM電平模擬電壓輸出1,可以更換其它 PWM 輸出引腳3,10
- #define PIN_CUR 5 //PWM電平模擬電壓輸出2,可以更換其它 PWM 輸出引腳3,10
- #define PIN_zhshi 11 // 編碼器調(diào)節(jié)PWM指示
- int v_temp = 48; //PWM輸出1占空比初值
- int c_temp = 12; //PWM輸出2占空比初值
- boolean Pmode = true;//true--調(diào)節(jié)PWM輸出1 false--調(diào)節(jié)PWM輸出2
- volatile uint8_t a0, b0;
- int c0 = 1; //定義變量存以儲讀值
- void setup()
- {
- pinMode(PIN_VOL, OUTPUT);//
- pinMode(PIN_CUR, OUTPUT);//
- pinMode(PIN_zhshi, OUTPUT);//
- digitalWrite(PIN_zhshi, HIGH);
- pinMode(PIN_ENA, INPUT_PULLUP);//
- pinMode(PIN_ENB, INPUT_PULLUP);//
- pinMode(PIN_ENT, INPUT);//
- Serial.begin(9600);
-
- // setup pin change interrupt for rotary encoder
- PCMSK0 = bit (PCINT0); // Configure pin change interrupt on Pin8
- PCICR = bit (PCIE0); // Enable pin change interrupt
- PCIFR = bit (PCIF0); // Clear interrupt flag
- a0 = PINB & 1;
- b0 = PIND>>7 & 1;
- //c0 = digitalRead(PIN_ENT);
- }
-
- void loop()
- {
- PINENTCheck();
- analogWrite(PIN_VOL,v_temp);//
- analogWrite(PIN_CUR,c_temp);//
- }
- // check and activate/deactivate boost mode
- void PINENTCheck(void)
- {
- uint8_t c = digitalRead(PIN_ENT);
- if (!c && c0) {
- // check rotary encoder switch
- // delay(10);
- // val = digitalRead(PIN_ENT);
- if(Pmode == false)//切換PWM通道
- {
- Pmode = true;
- digitalWrite(PIN_zhshi, HIGH);
- }
- else
- {
- Pmode = false;
- digitalWrite(PIN_zhshi, LOW);
- }
- }
- c0 = c;
- }
- // Pin change interrupt service routine for rotary encoder
- ISR (PCINT0_vect)
- {
- uint8_t a = PINB & 1;
- uint8_t b = PIND>>7 & 1;
- if (a != a0) // A changed
- {
- a0 = a;
- if (b != b0) // B changed
- {
- b0 = b;
- if (a == b)
- {
- if (Pmode == true)
- {
- v_temp++;;
- if (v_temp > 255) {v_temp = 255;}
- }
- else if ( Pmode == false)
- {
- c_temp++;;
- if (c_temp > 255) {c_temp = 255;}
- }
- }
- else if (a != b)
- {
- if ( Pmode == true)
- {
- v_temp--;
- if (v_temp < 1) {v_temp = 1;}
- }
- else if ( Pmode == false)
- {
- c_temp--;
- if (c_temp < 1) {c_temp = 1;}
- }
- }
- }
- }
- }
復(fù)制代碼
|
評分
-
查看全部評分
|