Go Down

Topic: Aiuto con il C (Read 1 time) previous topic - next topic

lesto

non sto mettendo in dubbio l'uso di parentesi, che ammetto che mi sia sfuggito, ma l'uso dei long.

e se l'ADC è a 12bit e SE vuole il valore in volt, allora il divisore dovrebbe essere 4096
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

astrobeed

#16
Nov 20, 2012, 06:25 am Last Edit: Nov 20, 2012, 06:38 am by astrobeed Reason: 1

ho visto dopo che val era dichiarata UINT, e bastava, però ci sono PIC dove l'ADC è a 12bit XD...


Forse è meglio che lo rileggi il K&R, in C le operazioni matematiche "+ - * /" sono eseguite da sinistra verso destra, da destra verso sinistra sono eseguite le assegnazioni con operazione come "+=".
Dato che non ha specificato il modello di PIC è possibile che ha un ADC a 12 bit, però 4096 * 5 = 20480 che entra senza problemi anche in un signed int, quindi non c'è nessun motivo per usare i long.
Giusto per togliere ogni dubbio questo è uno sketch per Arduino che fa la stessa cosa e funziona perfettamente senza usare le parentesi, che comunque è sempre bene mettere ai fini della leggibilità del programma e per eliminare eventuali ambiguità, oltre ad accendere il led sul pin 13, per 100 ms, se il valore è maggiore di 3 stampa sul monitor seriale i valori letti che variano tra 0 e 4 come previsto.
Da notare che con il calcolo proposto da Cece il valore massimo è 4 e non 5 come probabilmente pensa lui perché l'out del ADC è al massimo 1023 e 1023 * 5 / 1024 = 4.995 che viene troncato a 4.

Code: [Select]

int SV;

void setup() {
   pinMode(13, OUTPUT);  
 Serial.begin(19200);
}

void loop() {
 SV = analogRead(A0) * 5 / 1024;
 if(SV>3) digitalWrite(13,HIGH);
 Serial.println(SV,DEC);
 delay(100);  
 digitalWrite(13, LOW);    
}

Usare il GOTO in C è ammettere la propria sconfitta come programmatore

astrobeed

Giusto per troncare alla radice ogni discussione, K&R capitolo 2, paragrafo 12, tabella 2.1, precedenza degli operatori che è la stessa riportata qui.
Usare il GOTO in C è ammettere la propria sconfitta come programmatore

lesto

ah, questa è una tabella da tenere sotto mano, anche se abbondo di parentesi e non ci faccio caso (lavorando con più linguaggi al giorno è facile mischiare i concetti)

interessante anche la tabella a fine pagina per l'uso delle precedenze coi puntatori..
io di solito scrivo (*p)++ ma non mi piace avere mille parentesi in giro ogni volta che accedo al valore della varibaile.
magari potrei passare a ++*p che mi pare anche abbastanza intuitivo.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

astrobeed


ah, questa è una tabella da tenere sotto mano, anche se abbondo di parentesi e non ci faccio caso (lavorando con più linguaggi al giorno è facile mischiare i concetti)


Da notare che la tabella oltre a specificare il verso di lettura indica anche la priorità degli operatori, che poi è la stessa indicata dalle regole matematiche, p.e. * e / vengono eseguite prime di + e -, va da se che usare le parentesi anche se non realmente necessario è comunque utile per la leggibilità della riga.
Usare il GOTO in C è ammettere la propria sconfitta come programmatore

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy