Go Down

Topic: dividere in 2 parti il numero 99999 e regolare 3 cifre, poi 2 cifre per volta (Read 1 time) previous topic - next topic

nikone

Occhio che k poi diventa una variabile long o unsigned long Econ questa riga di codice
Code: [Select]
if (pin 1  ==  HIGH ) millimetri = AnalogRead (A0) *100  //  tengo premuto il pulsante 1 e col pot. metto 123
Anche millimetri diventa una variabile long
Se vuoi risparmiare spazio di conviene leggerla singolarmente all'inizio e poi moltiplicarla per cento quando la sommi con centimetri , il risultato è lo stesso ma risparmi memoria
Ciao Niko
Non possiamo pretendere che le cose cambino, se continuiamo a fare le stesse cose(albert Einstein )

gingardu

k lho dichiarata come float
ma effettivamente  se moltiplico AnalogRead (A0) *100   a volte mi da un numero grande negativo  :smiley-eek-blue:  e mi sballa tutto

MA PERCHE ? ....  
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

leo72

Perché i float sono numeri particolari, memorizzati in forma di una mantissa ed un esponente. Alle volte gli arrotondamenti nei calcoli portano poi a dei decimali che compaiono dal nulla.

Domanda. Leggendo un numero intero (il valore di una porta analogica), a che ti serve memorizzare il suo valore in un float?

gingardu

all'inizio avevo messo int  ma era una "tragedia"  uscivano quasi sempre numeri col meno iniziale  :smiley-eek-blue:

quasi sicuramente era perche l'int non puo essere usato per un numero troppo alto

qui c'è la prima parte del codice

se si puo usare qualcos'altro al posto di float (int proprio non va) lo provo

Code: [Select]
int A = 0;     // mappa per regolare le prime 3 cifre
int B = 1023 ; // mappa per regolare le prime 3 cifre
int C = 0 ;    // mappa per regolare le prime 3 cifre
int D = 180 ;    // mappa per regolare le prime 3 cifre

int E = 0;    // mappa per regolare le ultime   2 cifre
int F = 1023; // mappa per regolare le ultime   2 cifre
int G = 0;    // mappa per regolare le ultime   2 cifre
int H = 99;   // mappa per regolare le ultime   2 cifre



float millimetri ;
float centesimi ;

float CFR1;  //display 7 seg  per visualizzare il trattino se necessario
float CFR2;  //display 7 seg
float CFR3;  //display 7 seg



float sfarfallio = 3900;  //serve per aggistare lo sfarfallio se cè

float CFR4;  //display 7 seg
float CFR5;  //display 7 seg
float CFR6;  //display 7 seg

float K = 0;


                               

void setup () { 
   

     
// Serial.begin(9600);
//pinMode (0, OUTPUT);   
//pinMode (1, INPUT);   
pinMode (2, OUTPUT);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT); 
pinMode (5, OUTPUT); 
pinMode (6, OUTPUT); 
pinMode (7, OUTPUT);
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
pinMode (10, OUTPUT); 
pinMode (11, OUTPUT);
pinMode (12, OUTPUT); 
pinMode (13, OUTPUT);
//pinMode (14, OUTPUT);
//pinMode (15, OUTPUT);
pinMode (16, INPUT);
pinMode (17, INPUT);
pinMode (18, OUTPUT);
pinMode (19, OUTPUT);

digitalWrite (16, HIGH);  //seconda cifra
digitalWrite (17, HIGH);  //prima cifra

digitalWrite (3, HIGH);  //seconda cifra
digitalWrite (4, HIGH);  //prima cifra
digitalWrite (2, HIGH);  //segmento  f  sinistra,alto
digitalWrite (5, HIGH);  //segmento  e  sinistra,basso
digitalWrite (6, HIGH);  //segmento  d  basso
digitalWrite (7, HIGH);  //segmento  c  destra,basso
digitalWrite (8, HIGH);  //segmento  b  destra,alto
digitalWrite (9, HIGH);  //segmento  a  alto
digitalWrite (10, HIGH); //segmento  g centrale
digitalWrite (11, HIGH); //terza cifra
digitalWrite (12, HIGH); //quarta cifra
digitalWrite (18, HIGH); // quinta cifra
digitalWrite (19, HIGH); // sesta cifra




}

void loop ()

{
   
if ( digitalRead (16) == HIGH )  millimetri = map(analogRead(A0), A, B, C, D);
if ( digitalRead (17) == HIGH )  centesimi= map(analogRead(A0), E, F, G, H);
millimetri = millimetri*100;

if ( digitalRead (16) == HIGH ) K = millimetri + centesimi ;
if ( digitalRead (17) == HIGH ) K = millimetri + centesimi ;
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

leo72

Un "int" contiene un numero il cui valore oscilla da -32768 a +32767. Se dentro ad un int ci infili un valore superiore a $7FFF (32767) il numero cambia di segno. Per contenere un numero più grande usa un "unsigned int", che contiene un intero senza segno da 0 a 65535.
Altrimenti usa l'unsigned long, che va da 0 a 2^32-1

Go Up