
Daltronde ascolto il telegiornale in versione ridotta perché viene incontro alle mie capacità mentali (cit.)...
Per favore ditemi che così comincia ad avere una sua decenza.
- Codice: Seleziona tutto
#define SW_PIN 2
#define CLK_PIN 3
#define DT_PIN 4
volatile boolean button_trig = 0;
volatile boolean encoder_trig = 0;
volatile unsigned long button_trig_time;
volatile unsigned long encoder_trig_time;
int encoder_count = 0;
int last_encoder_count = 0;
void button_isr ()
{
button_trig_time = millis();
button_trig = 1;
}
void encoder_isr ()
{
encoder_trig_time = millis();
encoder_trig = 1;
}
int encoder_read ()
{
unsigned int encoder_val = digitalRead(CLK_PIN) << 1 | digitalRead(DT_PIN);
switch (encoder_val) {
case 0: /* case 3: */
encoder_count--;
break;
case 1: /* case 2: */
encoder_count++;
break;
}
return encoder_count;
}
void setup()
{
pinMode (SW_PIN, INPUT);
pinMode (CLK_PIN, INPUT);
pinMode (DT_PIN, INPUT);
attachInterrupt (0, button_isr, FALLING); // encoder SW_PIN.
attachInterrupt (1, encoder_isr, CHANGE); // encoder CLK_PIN.
Serial.begin (9600);
}
void loop()
{
if (encoder_trig) {
if (millis() - encoder_trig_time > 1) {
if (encoder_read() != last_encoder_count) {
Serial.print(encoder_count);
Serial.print(" ");
last_encoder_count = encoder_count;
}
encoder_trig = 0;
}
}
if (button_trig) {
if (millis() - button_trig_time > 300) {
Serial.print("\n\rConfermato ");
Serial.println(encoder_count);
Serial.println();
button_trig = 0;
}
}
}