Давно хотел провести эксперимент с энкодером и прикрутить его к Arduino Nano
Но все никак не удавалось его приобрести .
Вчера разобрал старую убитую мышку и выпаял из нее Энкодер для экспериментов. Все оказалось достаточно просто . Написал скетч для cArduino / Arduino, взял уже готовую программу для ПК написанную для другого проекта и через 15 мин. я уже регулировал громкость при помощи энкодера.
Недавно приобрел энкодер с нажатием и подправил Sketch под него, теперь можно назначать вращение энкодера с нажатием и без него или назначать комбинацию клавишь только на нажатие
Программу скачиваем здесь
Код для Arduino Nano:
PHP код:
#define encoder0PinA 2
#define encoder0PinB 3
#define encoder0PinC 4
byte bytes[2]={0,7} ;
void setup()
{
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // подключить подтягивающий резистор
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // подключить подтягивающий резистор
pinMode(encoder0PinC, INPUT);
digitalWrite(encoder0PinC, HIGH); // подключить подтягивающий резистор
attachInterrupt(0, doEncoderA, FALLING); // настроить прерывание interrupt 0 на pin 2
attachInterrupt(1, doEncoderB, FALLING); // настроить прерывание interrupt 0 на pin 3
Serial.begin (115200);
}
void loop()
{
if(digitalRead(encoder0PinC)==LOW)
{
bytes[1]=8;
Serial.write( bytes,2);
while(digitalRead(encoder0PinC)==LOW){delay(50);}
bytes[1]=7;
}
}
// обработка прерывания
void doEncoderA()
{
if(digitalRead(encoder0PinB)==HIGH){bytes[0]=25;}else{bytes[0]=5;}
Serial.write( bytes,2);
bytes[0]=0;
}
// обработка прерывания
void doEncoderB()
{
if(digitalRead(encoder0PinA)==HIGH){bytes[0]=5;}else{bytes[0]=25;}
Serial.write( bytes,2);
bytes[0]=0;
}