e' talmente banale che quasi me ne vergogno
#define A 12
#define B 13
byte alza = 1;
byte abbassa = 0;
void setup()
{
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
Serial.println("programma per simulare encoder");
}
void loop(void)
{
for (byte i=0; i<20;i++){
ciclo();
}
// passi avanti
for (byte i=0; i<20;i++){
retro();
}
// passi indietro
alza=!alza;
abbassa=!alza;
Serial.println("inverto logica");
}
void ciclo(void)
{
su(A);
delay(100);
su(B);
delay(100);
giu(A);
delay(100);
giu(B);
delay(700);
Serial.println("ciclo");
}
void retro(void)
{
su(B);
delay(100);
su(A);
delay(100);
giu(B);
delay(100);
giu(A);
delay(700);
Serial.println("retro");
}
void su(byte pin)
{
for (byte i = 0; i < 10; i++)
{
digitalWrite(pin, !digitalRead(pin));
delay(3);
}
digitalWrite(pin, alza);
}
void giu(byte pin)
{
for (byte i = 0; i < 10; i++)
{
digitalWrite(pin, !digitalRead(pin));
delay(3);
}
digitalWrite(pin, abbassa);
}
vent giri in un senso
venti giri nell'altro
ad ogni cambio di stato delle uscite una mitragliata di write alternate
dopo 20+20 giri inverte alto con basso per simulare "negato"
tempi "storti" per simualre anche encoder "costruiti" con proximity su ruote
usa l ucite 13 e 12 (la 13 per "vedere" il led)
volevo trasferirlo su uno degli attiny45 che ho preso per la "stagione del riscaldamento"
ma non lo ho ancora fatto