Salut j'ai fait un programme dans mon TP de lycée mais je souhaite l'améliorer en augmentent la fréquence de rafraichissement de l'écran LCD du shield sur ma carte arduino Uno.
mon programme consiste à afficher la valeur du potentiomètre sur mon écran LCD ainsi que d'allumer un LED plus ou moins puissamment en fonction de la valeur de l'écran LCD. mon prof me conseille d'utiliser la fonction millice() mais je ne trouve pas des information claire sur la toile
Voici mon code :
int ledPin = 6;
int sensorValue = analogRead(A0);
int val;
void setup() {
// set up the LCD's number of columns and rows:
Serial.begin(9600);
lcd.clear();
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Potentiometre");
lcd.setCursor(0,1);
Ceci dit une petite temporisation de duréee 1ms est présente dans la boucle et il n'est pas certain qu'il soit possible d'augmenter la fréquence de rafraichissement .
mon prof me conseille d'utiliser la fonction millice() mais je ne trouve pas des information claire sur la toile
Normal: voir millis() - Arduino Reference pour la doc officielle (pas la peine de se disperser avec un mot clef aberrant)
et regarder dans les exemples d'arduino (je ne sais pas très bien naviguer dans l'IDE) l'exemple blinkWithoutDelays
Ensuite, je vous conseillerais, une fois la fonction millis() bien gérée, de regarder ce qui se passe si on affiche la même chose: normalement, l'écran doit clignoter un peu, ce qui est désagréable.
Pour lutter contre ce desagremant, il faut garder un mémoire la valeur précédente -i.e la valeur du dernier rafraichissement, initialisée à une valeur improbable- et {n'afficher et ne mettre à jour} la valeur precedente que si la valeur précedente diffère de la valeur suivante.
Nota; afficher toutes les millisecondes doit être très fatiguant pour les yeux et baisser le temps de rafraichissement doirt augmenter ce phénomène; par contre, il ne fait pas de mal pour la commande d'un servo. Vous pouvez aller voir du côté de [/b]micros[/b] comment augmenter la fréquence de mise à jour du servo (l'utilisation de fonctions non bloquantes permet de gérer des tas de delays efficacement).
Ce code clignotera de façon insupportable pour un oeil normal: le suivant y remediera:
#include <LiquidCrystal.h>
uint16_t previousValue=5555; // aucun CAN ne peut sortir cette valeur
const uint16_t EPS = 3; // bruit du CAN
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int ledPin = 6;
int sensorValue = 0;
int val;
void setup() {
lcd.begin(16, 2);
lcd.print("Potentiometre");
pinMode(ledPin,OUTPUT);digitalWrite(ledPin,LOW);
}
void loop() {
sensorValue = analogRead(A0);
if (abs(previousValue - sensorValue) > EPS)
lcd.setCursor(0,1);
lcd.print(" "); // met des blancs: cas où on passe de 100 à 98; sinon, on voit 980
lcd.setCursor(0,1); // on revient à gauche
lcd.print(sensorValue);
previousValue = sensorValue;
}
val=map(sensorValue,0,1023,0,255);
analogWrite(ledPin,val);
// regarder du côte de delayMicroseconds() ou micros()
}