Problema con scrittura codice per sensore temperatura

Salve a tutti…ho 14 anni e sono un appassionato di elettronica…grazie a un po di tempo per mettere da parte un po di soldi sono riuscito a comprare lo starter kit da Arduino…cosi nel tempo libero mi dedico a lui…grazie allo starter kit sto imparando piano piano il linguaggio di programmazione di Arduino…che da quanto ho capito è un miscuglio tra C e C++…sono diverse settimane che sto provando a realizzare progetti. Ora sto provando con un sensore di temperatura…ho realizzato un codice molto simile a quello sul libro…(l’ho fatto diverso perche non copio mai i codici come sono…ma cerco di costrirmeli da solo per capire meglio)…alla fine del codice…però mi da un errore che proprio non capisco e non riesco a risolvere…chiedo aiuto a voi perche proprio non mi va di copiare il codice della guida…voglio provare a realizzarlo io…ma non ci riesco…questo è il codice:

const float temperaturaBase = 20.0;
int sensore = A0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
for(int pin = 2; pin<5; pin++){
pinMode(pin,OUTPUT);
digitalWrite(pin, LOW);
}

}

void loop() {
// put your main code here, to run repeatedly:
int tensione = analogRead(sensore);
Serial.print(" Valore Tensione: ");
Serial.print(tensione);
float voltaggio = (tensione/1024.0) * 5.0;
Serial.print("Voltaggio: ");
Serial.print(voltaggio);
float temperatura = (voltaggio - 0.5) * 100;
Serial.print("Temperatura in C: ");
Serial.println(temperatura);
if(temperatura < temperaturaBase){
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
else if(temperatura > temperaturaBase & temperatura < temperaturaBase+2){
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
else if(temperatura >= temperaturaBase+2 & < temperaturaBase+4){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}
else if(temperatura >= temperaturaBase+4 & < temperaturaBase+6){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
delay(1);
}

non ho aggiunto commenti perche pensavo di non averne bisogno…ma tanto è di facile comprensione…quello che volevo realizzare…è che impostando una temperatura di base…ogni due gradi in più si accendeva un led…in tutto erano 3 led…ma mi da un errore e mi dice tipo che…"&&" è sbagliato…ora vi riporto proprio quello che mi dice…non vorrei sbagliarmi per questo vi scrivo quello che mi dice…"expected primary-expression before ‘<’ token…perfavore aiutatemi… :frowning:

Benvenuto, per prima cosa la prossima volta che posti un codice racchiudilo negli appositi tag code, per evitare errori di interpretazione da parte del forum.
Un errore sicuramente sta nel uso di & quello è l’and bit a bit a te serve l’and logico cioè &&. La condizione temperatura >= temperaturaBase+4 & < temperaturaBase+6 non ha senso.
Quando usi l’and devi riproporre la condizione per intero temperatura >= temperaturaBase+4 && temperatura < temperaturaBase+6

no aspetta..io li ho messo "&" perche ho provato in varie forme ma anche quando prima avevo messo "&&" mi dava errore

ah aspetta credo di aver capito…devo mettere la condizione in completo…ora provo

Si okay funziona grazie mille!

Conosci la differenza tra & e &&, e tra | e ||?

Veramente no…li sto imparando solo ora questi termini…per ora conosco solo && che significa “and”…gli altri non li conosco…

Scusa e allora perché usare & nel tuo sketch se non sai a cosa serve Bitwise operations in C - Wikipedia

no io usavo && che significa "and"

Io mi riferisco al codice che ci hai mostrato nel primo post.

in quel post ho messo & perche siccome davvero non trovavo l’errore stavo andando a tentativi inserendo…“and”…o “&”…perche non riuscivo a capire dove sbagliavo.

Ok ora che ti è chiaro il problema evita di andare a tentativi, rischi di trovare casi in cui funziona e altri che misteriosamente non funzionano. E soprattutto rischi di imparare concetti errati. Ragiona e rifatti alle guide in C e se proprio non ne vieni a capo chiedi sul forum, ci saranno sempre persone pronte a risponderti tempestivamente.

ok grazie mille

RobertoBochet:
Conosci la differenza tra & e &&, e tra | e ||?

& e | sono operqatori che fanno and e or a livello del singoli bit di un byte

&& e || sono operatori che fanno and e or logico a livello condizioni per esempio all interno di un IF.

Ciao Uwe

non credo di aver capito comunque okkey...senti visto che ho poca pratica e so ancora poco di questo mondo..mi potresti consigliare da dove partire e cosa fare?

Per ora lascia stare & e | da soli visto che fanno un lavoro diverso da quelli doppi.
Per ora impara quelli doppi da usare nei test degli if e while. Gli altri c'e' tempo, sono più delle operazioni, "tipo" quelle matematiche.

okay grazie.

Ciao,

&& (AND LOGICO) e || (OR LOGICO) sono operazioni booleane:

A OR B, risulta vera se A o B sono vere
A AND B, risulta vera se A e B sono vere

& operazione di and binario, bit a bit:

ipotizando (in binario) A = 1100 e B = 1010, abbiamo:

A & B
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0

A & B = 1000

Ok alla spiegazione, un po’ coincisa ma va bene. Ma se vuoi spiegare il funzionamento degli operatori bitwise spiega almeno qualche applicazione, perché sono cosi importanti, una persona che si affaccia per la prima volta al mondo della programmazione non ne coglierà sicuramente il senso. Su Arduino ci si può dimenticare anche che esistano visto che non bisogna perdersi nella gestione dei registri a livello di bit, ci ha già pensato qualcun altro all’interno delle librerie e del core.

Hai ragione, ho preferito dare solo una idea sulla differenza che sull’uso. Sicuramente all’inizio avrà necessità di capire solo l’uso della logica booleana per le condizioni all’interno del programma.
I bitwise che vengono utilizzati nei bit-flag mi sembrava prematuro introdurli.
Quando inizierà ad adentrarsi nei registri o a cercare di ottimizzare le variabili si chiederà come settare o resettare un bit. Sai quanto me che le operazioni sui bit sono un mondo.