Bonjour .
j'ai enfin trouvé un petit programme qui me permettrait de lire en degres la valeur d'un potar
de recopie.
Il fonctionne bien si je lis sur println , mais c'est sur afficheur que ça m'intéresserait.
j'ai donc ajouté ce qui est nécessaire à l'affichage. Résultat : je lis bien un angle qui correspond a ce que
je vois sur l'écran de l'ordinateur mais pas bon. Par exemple : 36 degrès écran ordinateur
s'affiche sur deux lignes comme ceci : 36.0736.0736.0736.
j'ai essayé de modifier ce qui se rapporte a l'afficheur, mais c'est toujours pareil.
Pouvez vous m'aider ? Voici le programme :
#define ROTARY_ANGLE_SENSOR A0 //Use analog pin A0 for the Rotary Angle Sensor #define ADC_REF 3.3 //Reference voltage of ADC is 3.3v #define FULL_ANGLE 300.0 //Full value of the rotary angle is 300 degrees
// include the library code: #include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup ()
{
//Start the serial connection
Serial . begin (9600);
lcd.begin (16,2);
}
void loop ()
{
//Read the value of the rotary angle sensor in degrees
int degrees = getDegrees();
//Output it to the serial monitor
Serial . print ( "position angle deges: " );
Serial . println ( degrees );
//The delay between readings
delay (500);
}
int getDegrees()
{
//Read the raw sensor value
int sensor_value = analogRead (ROTARY_ANGLE_SENSOR);
//Convert the sensor reading to degrees and return that value
float voltage = ( float )sensor_value * ADC_REF / 1023;
float degrees = (voltage * FULL_ANGLE) / ADC_REF;
lcd.print (degrees);
return degrees ;
corrigez votre post ci dessus et rajoutez les code tags autour du code: [code]`` [color=blue]// votre code ici[/color] ``[/code].
ça doit ressembler à cela:// votre code ici
(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement)
pour votre question, sur un LCD il faut positionner le curseur avec setCursor() pour dire où vous voulez écrire (et effacer l'ancien affichage éventuellement si le nouvel affichage ne va pas recouvrir entièrement l'ancien)
Bonjour J - M -L Merci de te porter à mon secours rapidement.
Mais le lien que tu m'as donné n'ouvre sur rien . C'est pas grave. entre temps, j'ai continué a chercher
et en comparant d'autres programmes, j'ai vu qu'il y avait un clear avant l'affichage. j'ai essayé et ça été
magique . Les 2 lignes de texte ne sont pas centrées, mais ça me gène pas.
Par contre , j'ai quand même un doute sur le fonctionnement de ce programme avec la réalité du montage
complet : arduino + vérin . Le vérin est linéaire dans son déplacement et le potar aussi.
Ce qui me fait douter, c'est la formule mathématique employée. ( je suis pas un matheux )
//#define ROTARY_ANGLE_SENSOR A0 //Use analog pin A0 for the Rotary Angle Sensor #define ADC_REF 3.3 //Reference voltage of ADC is 3.3v #define FULL_ANGLE 100.0 //Full value of the rotary angle is 300 degrees
// include the library code: #include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup ()
{
//Start the serial connection
Serial . begin (9600);
lcd.begin (16,2);
}
void loop ()
{
//Read the value of the rotary angle sensor in degrees
int degrees = getDegrees();
//Output it to the serial monitor
Serial . print ( "position angle deges: " );
Serial . println ( degrees );
//The delay between readings
delay (500);
}
int getDegrees()
{
//Read the raw sensor value
int sensor_value = analogRead (ROTARY_ANGLE_SENSOR);
//Convert the sensor reading to degrees and return that value
float voltage = ( float )sensor_value * ADC_REF / 1023;
float degrees = (voltage * FULL_ANGLE) / ADC_REF;
lcd.clear ();
lcd.print ("Position : ");
lcd.setCursor(0, 1);
lcd.print (degrees);
return degrees ;
delay (5000);