Algorithmes variés
Algorithme pour trouver la valeur minimal et maximal d'un capteur
Voici un algorithme pour trouver la valeur minimal et maximal d'un capteur sur A0.
| // Déclaration des variables
int valeur = 0;
int valeurMax = 0; // Initialisation à 0 pour la valeur maximale
int valeurMin = 1023; // Initialisation à 1023 pour la valeur minimale
void setup() {
Serial.begin(9600);
}
// Boucle infinie
void loop() {
// Lecture de la valeur du capteur
valeur = analogRead(A0);
// Si la valeur est plus grande que la valeur maximale
if (valeur > valeurMax) {
// La valeur maximale devient la valeur
valeurMax = valeur;
}
// Si la valeur est plus petite que la valeur minimale
if (valeur < valeurMin) {
// La valeur minimale devient la valeur
valeurMin = valeur;
}
// Affichage des valeurs
Serial.print("Valeur: ");
Serial.print(valeur);
Serial.print(" Valeur maximale: ");
Serial.print(valeurMax);
Serial.print(" Valeur minimale: ");
Serial.println(valeurMin);
// Attendre 100ms
delay(100);
}
|
Version avec fonction
Voici une version de l'algorithme pour trouver la valeur minimal et maximal d'un capteur sur A0 avec une fonction.
| // Remplacer le nom de la fonction par le nom du capteur
int getCapteurXMin(int valeur) {
static int valMin = 1023; // Initialisation à 1023 pour la valeur minimale
// Si la valeur est plus petite que la valeur minimale
if (valeur < valMin) {
// La valeur minimale devient la valeur
valMin = valeur;
}
// Retourner la valeur lue
return valMin;
}
int getCapteurXMax(int valeur) {
static int valMax = 0; // Initialisation à 0 pour la valeur maximale
// Si la valeur est plus grande que la valeur maximale
if (valeur > valMax) {
// La valeur maximale devient la valeur
valMax = valeur;
}
// Retourner la valeur lue
return valMax;
}
|
Utiliser un tableau de caractères pour écrire sur le LCD
Voici un exemple de bout de code pour écrire sur le LCD avec un tableau de caractères.
| // Tampon pour écrire les strings
char lcdBuff[2][16] = {
" ",
" "
};
// Tampon pour écrire un float
char szFloat[6];
float valeur = 0.0;
void loop() {
// …
// Convertir un float en char[]
dtostrf(valeur, 4, 1, szFloat);
// Écriture à la ligne 1
// Utilisation de snprintf pour éviter un dépassement de buffer
snprintf(lcdBuff[0], sizeof(lcdBuff[0]), "valeur=%s", szFloat);
// Écriture à la ligne 2
// now est une variable de type DateTime
snprintf(lcdBuff[1], sizeof(lcdBuff[1]), "%02d:%02d:%02d",
now.hour(), now.minute(), now.second());
lcd.setCursor(0, 0);
lcd.print(lcdBuff[0]);
lcd.setCursor(0, 1);
lcd.print(lcdBuff[1]);
// Attendre 100ms
delay(100);
// Effacer le texte
lcd.clear();
// …
}
|
La fonction snprintf permet d'écrire dans un tableau de caractères.
- Elle prend 4 paramètres:
- Le tableau de caractères à remplir
- La taille du tableau
- Le format de la string
- Les valeurs à écrire. Optionnelles si le format ne contient pas de %.
La fonction dtostrf permet de convertir un float en char[].
- Elle prend 4 paramètres:
- Le float à convertir
- Le nombre de caractères à écrire
- Le nombre de décimales
- Le tableau de caractères à remplir
Le format de la string est le suivant:
- % indique que l'on va écrire une valeur
- Les valeurs peuvent être:
- d pour un entier
- s pour une string
- Pour les entiers, on peut ajouter un nombre pour indiquer le nombre de caractères à écrire. Dans l'exemple, on utilise %02d pour écrire un entier sur 2 caractères. Si le nombre est plus petit, on ajoute des zéros devant.
Les float ne sont pas supportés par la fonction sprintf avec Arduino. Il faut donc convertir le float en char[] avec la fonction dtostrf avant de l'écrire.