Ви не увійшли.
Сторінки 1
Попробовал. Если убрать очистку, то выводятся значения яркости до тех пор, пока не начнешь её регулировать. То же самое.
Не думаю. Этот же скетч но с управлением 3-мя кнопками, вместо энкодера, работал.
Очистка нужна, иначе новые данные пишутся поверх.
Для проекта решил попробовать сделать установку значений энкодером. Для отображения использую экран от Нокии. Энкодер нормально работает только с прерываниями. Я новичок и только их осваиваю, поэтому перепробовал несколько готовых вариантов примеров для энкодера, пока у меня наконец-то получилось изиенять значения. Но теперь другая проблема - после первого же прерывания экран становится пустым. Для того, чтобы отследить работу энкодера его значения выводятся в порт, и активность там есть. Я сделал аналогичный короткий скетч, который меняет яркость подсветки, чтоб понять что же я делаю не так. Проблема в нем та же - в мониторе порта видна активность, подсветка меняется, но на экране пусто. И ещё интересно - если раскомментить Serial.println(light) в конце главного цикла, то экран тоже остается пустым.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <Rotary.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 1);
Rotary r = Rotary(2, 3);
int light = 90;
int bl=9;
int result = 1;
volatile int enc = 0;
void setup()
{
Serial.begin(9600);
display.begin();
PCICR |= (1 << PCIE2);
PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
sei();
pinMode(mode, INPUT); //Mode button
pinMode(bl, OUTPUT); //LCD light
analogWrite(bl, light);
}// Setup
void loop() {
display.clearDisplay();
if (enc == 1)
{
Serial.println(enc);
if (light<120) light +=30;
if (light>=120) light = 150;
}
if (enc == -1)
{
Serial.println(enc);
if (light >30 ) light -=30;
if (light<=30) light = 0;
}
analogWrite(bl, light);
display.println(light);
display.display();
[color=#ff450d]//Serial.println(light);[/color]
} //End loop
ISR(PCINT2_vect)
{
unsigned char result = r.process();
if (result == DIR_NONE) enc =0;
else if (result == DIR_CW) enc =1;
else if (result == DIR_CCW) enc =-1;
}
Сторінки 1