|
- #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 // 编码器调节PWM指示
- int v_temp = 48; //PWM输出1占空比初值
- int c_temp = 12; //PWM输出2占空比初值
- boolean Pmode = true;//true--调节PWM输出1 false--调节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;}
- }
- }
- }
- }
- }
复制代码
|
评分
-
查看全部评分
|