test con MCP9700A (temperatura) & matematica.. risultati anomali? [RISOLTO]

Ciao a tutti,
oggi ho fatto qualche test con un sensore MCP9700A e mi sono trovatocon dei risultati anomali peri quali vi chiedo spiegazione.

In particolare ho un sensore collegato pin 1 alla 3,3 v di arduino uno, pin 2 A0, pin 3 GND

Ho un display lcd parallelo 4 bit collegato.

int pintemp = 0
int readtemp = 0;
int t2 = 0;
Vorrei capire perchè se scrivo:
_lcd.print(((5*(analogRead(pintemp)*100)/1023)-50)); _
display scrive -37
mentre se scrivo:
lcd.print(((analogRead(pintemp)0.48875)-50)); _
display scrive 27.71
_(NB 5
100/1023=0.488758......)

readtemp = analogRead(pintemp);
t2 = ((5 * readtemp * 100.0 ) / 1023) - 50;
lcd.print(t2);
display scrive 23

Ho avuto anche altre anomalie che non riesco a replicare ma in pratica ho risultati diversi se memorizzo analogRead in una variabile e poi l'elaboro invece che scrivere direttamente la formula.
Io credo che la memorizzazione in variabile imposta dei limiti, tipo la variabile è solo "intera" quindi perdo la componente dietro la virgola ?
Inoltre la formula che si troa su internet x usare questo sensore ho l'impressione che possa "sforare" il numero massimo 32767 (per esempio a temperatura ambiente A0=150 per cui 1505100=75000)... potrebbe essere questo il problema ? come gestire allora numeri maggiori?

Ho fatto in verità anche dei test con il formato float ma non ho visto grandi variazioni, inoltre nella reference c'è un passaggio in cui afferma:
"Floating point numbers are not exact, and may yield strange results when compared. For example 6.0 / 3.0 may not equal 2.0. "
che non ho capito proprio.....
C'è qualcuno che mi può spiegare cosa mi sfugge?

Marco

ma io non vedo floats vedo solo int :roll_eyes:

Si ho fatto anche prove con floats ma non cambiava pressoché nulla...

ho fatto altri test e sono un po’ smarrito…

Con questo sketch:

/*
Parte LCD:
 
  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
 
 
 */

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);




// parte buzzer
#include "pitches.h"

// NB  deve essere presente il file pichtes.h

// notes della melodia e durata
int melody[] = {
  NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};

// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {4, 8, 8, 4,4,4,4,4 };

// FINE parte buzzer

//parte temperatura

int pintemp = 0;
int readtemp = 0;
int temp = 20;
float v=0;


//fine parte temperatura






// inizia parte programmazione:


void setup() {

  
  
  analogReference(DEFAULT);
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  String keytext = "iniz. rev 1.3";


  // parte sensore ir
 
  // inizializza seriale, per scopi testing
  Serial.begin(9600);

  lcd.setCursor(0, 0);
  lcd.print(keytext);  
  delay (3000);
   
}

void loop() 
{

lcd.setCursor(0, 0);
lcd.clear();




readtemp = analogRead(pintemp);

lcd.print("Temp:"); 
lcd.print(((readtemp*0.48828)-50));  

lcd.setCursor(0, 1);
lcd.print("V:");

v = readtemp*4,9;

lcd.print(v);

lcd.print(" pin:");
lcd.print(readtemp);


if (((readtemp*0.48828)-50) > 30)  musichetta();
delay (10000);
  
}  //fine void loop FINE PROGRAMMA




void musichetta ()
{
  for (int thisNote = 0; thisNote < 8; thisNote++) {

    // to calculate the note duration, take one second 
    // divided by the note type.
    //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
    int noteDuration = 1000/noteDurations[thisNote];
    tone(8, melody[thisNote],noteDuration);

    // to distinguish the notes, set a minimum time between them.
    // the note's duration + 30% seems to work well:
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    // stop the tone playing:
    noTone(8);
  }

In questo momento leggo sul display:

Temp:24.22 (che ci può stare ma è un paio di gradi di troppo… boh)
V:608.00 pin:152

ma se v è readtemp4,9, 1524.9 fa 744,8 !!! Arduino sbaglia a fare le moltiplicazioni ? non credo ma non capisco…
help…

risolto..... che pirla...

con arduino 104,9 = 40...... 104.9 = 49, la notazione dei decimale è il punto non la virgola....