Bonjour à tous, je rencontre un petit probleme avec l'arduino et j'espere que vous pourrez y répondre.
J'aimerais juste lire une tension que j'envoie sur le pin A1 ( ou autre pin analogique ) (petite partie d'un projet plus conséquent).
Par exemple, j'envoie 4.43 volt en entrée de l'arduino (vérifié au voltmètre) cependant je lis 4.50V (sur un écran LCD snootlab) avec l'aruino alimenté en USB et 4.45 avec une alimentation externe. (Il n'y a absolument rien entre la tension que j'applique et l'arduino).
Mes deux question sont : -Pourquoi est-ce que je lis une tension diférente (Sachant, après de nombreux test que cela ne viens pas de mon circuit ou autre mais bien de l'arduino)?
-Pourquoi la valeur change en fonction du mode d'alimentation de mon arduino ?
Pour tester, j'affiche meme le nombre de bit de la tension lue et c'est le meme dans les deux cas.
J'ai besoin de valeurs super précises.
Je vous link le programme aussi, mais il y a pas mal de lignes qui ne serviront pas pour ce problème là.
En espérant que quelqu'un ai déja rencotré ce probleme, je vous remercie et vous souhaite une bonne journée.
// include the library code:
#include "Wire.h"
#include <Deuligne.h>
// initialize the library with the numbers of the interface pins
Deuligne lcd;
// variables
int analogInput = 1;
int refresh = 1000;
float vout = 0.0;
float vin = 0.0;
float P = 0.0;
float R1 = 1000.0; // !! resistance of R1 !!
float R2 = 1000.0; // !! resistance of R2 !!
// variable to store the value
int value = 0;
// function to print float scientific version
char * float2s(float f)
{
return float2s(f, 2);
}
char * float2s(float f, unsigned int digits)
{
int index = 0;
static char s[16]; // buffer to build string representation
// handle sign
if (f < 0.0)
{
s[index++] = '-';
f = -f;
}
// handle infinite values
if (isinf(f))
{
strcpy(&s[index], "INF");
return s;
}
// handle Not a Number
if (isnan(f))
{
strcpy(&s[index], "NaN");
return s;
}
// max digits
if (digits > 6) digits = 6;
long multiplier = pow(10, digits); // fix int => long
int exponent = int(log10(f));
float g = f / pow(10, exponent);
if ((g < 1.0) && (g != 0.0))
{
g *= 10;
exponent--;
}
long whole = long(g); // single digit
long part = long((g-whole)*multiplier); // # digits
char format[16];
sprintf(format, "%%ld.%%0%dld E%%+d", digits);
sprintf(&s[index], format, whole, part, exponent);
return s;
}
void setup() {
// declaration of pin modes
pinMode(analogInput, INPUT);
Serial.begin(9600);
// set up the LCD's number of columns and rows:
lcd.init();
// Print a message to the LCD.
// lcd.print("PRESSION (mbar):");
}
void loop() {
// read the value on analog input
value = analogRead(analogInput);
lcd.print(value);
// print result over the serial port
vout = (value * 5.0) / 1024.0;
lcd.setCursor(10,0);
lcd.print(vout);
vin = vout / (R2/(R1+R2));
P = pow(10.0,(vin - 6.0));
// set the cursor to column 4, line 1
lcd.setCursor(4,1);
lcd.print(float2s(P, 1));
// sleep...
delay(refresh);
}