Etape 6: Réglage de l’heure avec les potentiomètres
Si vous êtes curieux, un potientiometer fonctionne comme un diviseur de tension. La raison pourquoi il n’est pas nécessaire de la résistance du potentiomètre est parce que c’est la seule charge entre 5V et la masse. Ainsi, sur une extrémité de la poignée, que vous êtes connecté directement à la masse (0V), sur l’autre extrême, que vous êtes connecté directement à 5V et entre les deux vous obtiendrez une transition sans heurt entre 0 à 5V. Si vous avez ajouté quelques autre charge en série à l’une des broches à l’extérieur, alors vous devriez examiner attentivement quelle résistance devrait être le potentiomètre.
Lecture des valeurs des potentiomètres
Afin de régler l’heure à l’aide de potentiomètres, nous allons brancher un fil extérieur au sol et l’autre conducteur extérieur à 5V et mesurer la tension du moyen principal à l’aide de analogRead(). Ceci renverra une valeur comprise entre 0 (0V) et 1023 (5V). Après cela, c’est juste une question de mise à l’échelle de la valeur au nombre d’heures (24) et les minutes (60). Nous allez lire les heures de broches A0 et les minutes de broche A1.
Comportement des potentiomètres (c’est à dire, à cône)
La relation entre l’angle de la poignée et le montant de la résistance est connue comme le cône. Boutons de volume ont souvent une conicité non linéaire, où elle nécessite plus de tour vers la fin pour faire une différence. Puisque toutes les valeurs d’heure et des minutes sont égaux, il semble logique d’avoir un défilement linéaire.
Le Code
Tout ce qui est nécessaire est de mettre le m_inTimeSetMode pour cette étape, et ajouter la mise en œuvre de la méthode getTimeFromPots() tester notre réglage de l’heure :
Boolean m_inTimeSetMode = true ;
int HOUR_INPUT_PIN = A0 ;
int MIN_INPUT_PIN = A1 ;
/**
* Cette méthode lit les valeurs de 2 potentiomètres, convertit à
* les minutes et heures et séries m_minute et m_hour pour les valeurs associées.
*/
Sub getTimeFromPots()
{
lire les potentiomètres
int hourSensor = analogRead(HOUR_INPUT_PIN) ;
int minuteSensor = analogRead(MIN_INPUT_PIN) ;
mettre à l’échelle les valeurs (de 0 à 1023) à l’échelle appropriée (0 à 23 heures, 0 à 59 minutes)
setTime (carte (hourSensor, 0, 1023, 0, 23), carte (minuteSensor, 0, 1023, 0, 59), 0) ;
Nous avons mis le dernier battement maintenant, parce que quand nous avons mis m_inTimeSetMode false,
nombre de secondes pourrait se sont écoulés depuis le dernier d'entre eux, et le temps serait avancer
m_lastTick = millis() ;
}