Paso 4: Desarrollar el código
Mi código de 's por debajo. Como tratamos con mechanicals aquí, tuyo puede ser diferente. Trate de tocar el debounce constante y la constante 'cuánto tiempo espera antes de asumir el dial ha terminado de girar'.
He intentado comentar tan cuidadosamente como pueda. Que es bastante simple.
int needToPrint = 0;
int cuenta;
int en = 2;
int lastState = bajo;
int trueState = bajo;
lastStateChangeTime largo = 0;
borrados int = 0;
constantes
int dialHasFinishedRotatingAfterMs = 100;
int debounceDelay = 10;
void setup()
{
Serial.Begin(9600);
pinMode (in, INPUT);
}
void loop()
{
lectura de int = digitalRead(in);
Si ((millis()-lastStateChangeTime) > dialHasFinishedRotatingAfterMs) {}
el disco no está marcado, o acaba siendo marcado.
Si (needToPrint) {}
apenas ha terminado siendo marcado, es necesario enviar el número de abajo el serial
línea y restablecer la cuenta. Que mod la cuenta por 10 porque '0' enviará 10 impulsos.
Serial.Print (% de la cuenta 10, DEC);
needToPrint = 0;
cuenta = 0;
borra = 0;
}
}
Si (leer! = lastState) {}
lastStateChangeTime = millis();
}
Si ((millis()-lastStateChangeTime) > debounceDelay) {}
Debounce - esto ocurre una vez es stablized
Si (leer! = trueState) {}
Esto significa que el interruptor ha pasado apenas de cerrado -> abrir o viceversa.
trueState = lectura;
Si (trueState == HIGH) {}
incrementar el número de pulsos si se ha ido alta.
cuenta ++;
needToPrint = 1; Necesitamos imprimir este número (una vez finalizada la esfera giratoria)
}
}
}
lastState = lectura;
}