Go Down

Topic: Errore nella compilazione con TMP36 (Read 3810 times) previous topic - next topic

antoniocnn

Jun 12, 2016, 08:56 am Last Edit: Jun 12, 2016, 03:36 pm by antoniocnn
Ciao tutti,
sto iniziando un nuovo progetto e utilizzo la sonda TMP36GZ per monitorare la temperatura.
Ho trovato questo codice
Code: [Select]
/*
 * FILE:    TMP36.11GIU16
 * PURPOSE:
 * PROBE:   TMP36
 * AUTHOR:  Antonio Cannavale
 * COMFORT:
 */

int val_ADC = 0;
float temp = 0;

void setup() { // Start setup
 Serial.begin(9600); // Start the serial connection with the computer
 delay(500); // Delay to let system boot
 while (!Serial) {
    ; // Wait for serial port to connect. Needed for native USB port only
 }
 delay(1000); // Wait before accessing sensor
} // End setup

void loop() { // Start loop
 val_ADC = analogRead(0); //Getting voltage from sensor at Analog PIN A0
 temp = ((val_ADC * 0.00488) - 0.5)/0.01; // Convert voltage in Celsius
 Serial.print(val_ADC); // Print
 Serial.println(" mV");
 Serial.print(temp);
 Serial.println (" C");
 delay(120000);
} // End loop

Ma il programma mi da questo errore.
Quote
Arduino:1.6.5 (Windows 8.1), Scheda:"Arduino Uno"

TMP36.11GIU16:23: error: stray '\' in program
TMP36.11GIU16.ino: In function 'void loop()':
TMP36.11GIU16:23: error: expected ')' before 'u2013'
stray '\' in program

  Questo report potrebbe essere più ricco
di informazioni con
  "Mostra un output dettagliato durante la compilazione"
  abilitato in "File > Impostazioni"
Come mai?

Grazie
Antonio

gpb01

Con cosa hai fatto il copia/incolla nel tuo IDE? Perché ti sei portato dietro dei caratteri speciali (... per di più invisibili) tipici della formattazione del testo ...

Prova a fare una cosa ...
... cancella il tuo programma nell'IDE, prendi quello che hai incollato qui (usa il tastino [Select], copia e incolla nell'IDE) e vedrai che l'errore scompare.

Guglielmo
Search is Your friend ... or I am Your enemy !

cyberhs

L'errore indica la presenza alla riga 23 di un carattere "randagio", per l'esattezza un "\" che, peraltro, non vedo in nessuna parte del listato..

Prova a riscriverla: alle volte, copiandola da un sito, possono essere presenti caratteri invisibili.

uwefed

Lo sketch non corrisponde allo sketch che ha prodotto gli errori.
Cosí non riusciamo ad aiutarti.
Ciao Uwe

nid69ita

Inoltre quel pezzo nella setup:

Code: [Select]
while (!Serial) {
    ; // Wait for serial port to connect. Needed for native USB port only

serve di solito solo per Arduino Leonardo.  Quel pezzo ferma il programma in attesa che da serial monitor premi qualcosa. Secondo me... levalo.
my name is IGOR, not AIGOR

antoniocnn

Inoltre quel pezzo nella setup:

Code: [Select]
while (!Serial) {
    ; // Wait for serial port to connect. Needed for native USB port only

serve di solito solo per Arduino Leonardo.  Quel pezzo ferma il programma in attesa che da serial monitor premi qualcosa. Secondo me... levalo.
Daccordo.
Uso Arduino UNO
Antonio

antoniocnn

#6
Jun 12, 2016, 03:30 pm Last Edit: Jun 12, 2016, 03:41 pm by antoniocnn
L'errore indica la presenza alla riga 23 di un carattere "randagio", per l'esattezza un "\" che, peraltro, non vedo in nessuna parte del listato..

Prova a riscriverla: alle volte, copiandola da un sito, possono essere presenti caratteri invisibili.
Funziona. :D
Ho cancellato e riscritto a mano la riga 23.
Vi chiedo un'altra cosa.
La formula è corretta?
Antonio

cyberhs

La formula è corretta, anche se io preferisco questa forma:

temp = (val_ADC * 5.0 / 1023 - 0.5) / 0.01;  // 5.0 = tensione ADC, 0.5 = tensione offset, 0.01 = 10mV/°C

antoniocnn

#8
Jun 12, 2016, 09:49 pm Last Edit: Jun 12, 2016, 10:34 pm by antoniocnn
La formula è corretta, anche se io preferisco questa forma:

temp = (val_ADC * 5.0 / 1023 - 0.5) / 0.01;  // 5.0 = tensione ADC, 0.5 = tensione offset, 0.01 = 10mV/°C
Perfetto.
l'ho sostituita con la mia, mi sembra commentata meglio.
Inoltre ho anche inserito il condensatore da 0.1uF di tipo poliestere tra Vs e GND, come consiglato dal data sheet. Ma ho una domanda. Dove lo devo mettere, vicino al TMP36?

Grazie
Antonio

Maurotec

Quote
Dove lo devo mettere, vicino al TMP36?
Se il TMP36 è saldato su PCB lo saldi vicino, se c'è un cavo che collega TMP36 al PCB allora il condensatore va saldato sui pin del TMP36.

PS: Occhio che con alimentazione da USB avrai una lettura ADC poco affidabile, molto meglio alimentare arduino da jack o da VIN fornendo a questo 5.0Vdc

Ciao.

antoniocnn

#10
Jun 13, 2016, 07:09 am Last Edit: Jun 14, 2016, 07:27 am by antoniocnn
Se il TMP36 è saldato su PCB lo saldi vicino, se c'è un cavo che collega TMP36 al PCB allora il condensatore va saldato sui pin del TMP36.
Il TMP36 è libero, nel senso che ho ascquistato solo il transistor. Comunque sia va saldato vicino al TMP36.

PS: Occhio che con alimentazione da USB avrai una lettura ADC poco affidabile, molto meglio alimentare arduino da jack o da VIN fornendo a questo 5.0Vdc
Alimento arduino solo con USB perche non dispongo di un lcd per vedere i valori di temperatura. Posso utilizzare anche l'alimentazione a jack pur collegando arduino a USB?

Grazie

Ciao
Antonio

Maurotec

Quote
Alimento arduino solo con USB perche non dispongo di un lcd. Posso utilizzare anche l'alimentazione a jack pur collegando arduino a USB?
Si, con jack e USB connessi assieme, l'alimentazione viene presa dal jack.
La tensione presa dal jack viene stabilizzata a 5Vdc ad opera di un LDO.
Mentre l'alimentazione da USB vale sempre 5Vdc, ma la stabilizzazione è affidata ai circuiti si alimentazione interni al PC.
La 5Vdc proveniente da USB può fluttuare rapidamente passando da 4.9Vdc a 4.6Vdc per poi risalire al valore iniziale.

Ciao.

antoniocnn

Mi scappa un'altra domanda.
Quando arduino legge si accende per pochi millesimi di secondi il led TX, come posso fare accendere un led esterno con la stessa funzione del led TX?

Grazie
Antonio

Maurotec

Fai un esempio di led connesso ad un pin e che vuoi che lampeggi a condizione che; devi formulare una espressione condizionale.

Esempio:
Code: [Select]
// al posto di ? scrivi il numero del pin
// const byte button  = ?;
// const byte led0     = ?;   
// booleane led0State = false;
// ovviamente nella funzione setup() (qui mancante) devi configurare i pin con pinMode() ecc.

void loop() {
    //  questa è la condizione
    if (digitalRead(button) == HIGH) {
       // qui l'azione legata alla condizione
       led0State ^= 1;   // (1 xor 1 = 0), (0 xor 1 = 1)
       digitalWrite(led0, led0State); 
    } else {
       digitalWrite(led0, LOW);   
    }
}


led0State ^= 1 usa lo xor per invertire lo stato di led0State.

Chiedevi questo o altro?

Ciao.

antoniocnn

Chiedevi questo o altro?

Penso di si.
Mi sembrava più semplice.

Grazie
Antonio

Go Up