Go Down

Topic: due condizione con un if (Read 7537 times) previous topic - next topic

ArduinoNovellino

salve a tutti , da pochi giorni ho iniziato un progetto con arduino : c'è un led RGB e un sensore di temperatura e in base alla temperatura "letta" il led cambia colore, solo che non so come si fa a mettere due condizione in un if.
vorrei fare una cosa del genere
                                  if(temperatura compresa tra x e y)
                                      .....



Grazie in anticipo delle risposte

doppiozero

Runtime Clock Manager -- https://github.com/duezero/RCM---Runtime-Clock-Manager
GPX datalogger -- https://github.com/duezero/GPX-datalogger
LiPo cycles counter -- https://github.com/duezero/LiPo-cycles-counter

ArduinoNovellino

mi da questo errore
Code: [Select]
ISO C++ forbids comparison between pointer and integer [-fpermissive]

cyberhs

#3
Jun 04, 2015, 07:40 pm Last Edit: Jun 04, 2015, 07:41 pm by cyberhs
Code: [Select]
  if (Temp >= 30 && Temp < 40)  {     // temperatura maggiore od uguale a 30°C e minore di 40°C
    digitalWrite(RossoPin, HIGH);         // LED rosso ON
  }
  else {
    digitalWrite(RossoPin, LOW);         // LED rosso OFF
  }

  if (Temp >= 20 && Temp < 30)  {     // temperatura maggiore od uguale a 20°C e minore di 30°C
    digitalWrite(VerdePin, HIGH);         // LED verde ON
  }
  else {
    digitalWrite(VerdePin, LOW);         // LED verde OFF
  }

ArduinoNovellino

#4
Jun 04, 2015, 07:54 pm Last Edit: Jun 04, 2015, 08:02 pm by ArduinoNovellino
io ho fatto cosi ma il colore rimane blu e anche se cambia la temperatura non succede nulla


Code: [Select]


float tempC;      //dichiarazione di variabile
int tempPin = 0;  //inizializzazione del pin di Arduino
const int VERDE = 9; 
const int BLU = 10; 
const int ROSSO = 11; 


void setup()
{
  pinMode(VERDE, OUTPUT); 
  pinMode(BLU, OUTPUT); 
  pinMode(ROSSO, OUTPUT); 
 
Serial.begin(9600);

  digitalWrite(VERDE, HIGH); 
  digitalWrite(BLU, HIGH); 
  digitalWrite(ROSSO, HIGH);
}

void loop()
{
tempC = analogRead(tempPin);           //lettura valore del sensore
tempC = (5.0 * tempC * 100.0)/1024.0;  //conversione del dato analogico in temperatura
Serial.print(" Celsius ");
Serial.println(tempC); 


if(tempC<18)
  {
    analogWrite( ROSSO, 30);
    analogWrite( VERDE, 144);
    analogWrite( BLU, 255);
  }
  else if(tempC >= 18 && tempC <= 22)
      {    analogWrite( ROSSO, 253);
           analogWrite( VERDE, 233);
           analogWrite( BLU, 16);
         }
  else {
    analogWrite( ROSSO, 210);
    analogWrite( VERDE, 31);
    analogWrite( BLU, 27);
  }
}

Vespucci

#5
Jun 04, 2015, 08:04 pm Last Edit: Jun 04, 2015, 08:05 pm by Vespucci
Scusa ma non ti da errore manca una parentesi graffa di apertura nell'ultimo else ?

edit: errore mio mi sembrava non ci fosse !!

ArduinoNovellino


doppiozero

il codice mi sembra corretto.. hai ricontrollato i collegamenti? la temperatura sulla seriale è corretta?
Runtime Clock Manager -- https://github.com/duezero/RCM---Runtime-Clock-Manager
GPX datalogger -- https://github.com/duezero/GPX-datalogger
LiPo cycles counter -- https://github.com/duezero/LiPo-cycles-counter

ArduinoNovellino

si i collegamenti sono giusti anche perchè vedo dal monitor seriale la temperatura (piu o meno) giusta

Vespucci

Prova cosi
Code: [Select]


float tempC;      //dichiarazione di variabile
int tempPin = 0;  //inizializzazione del pin di Arduino
const int VERDE = 9; 
const int BLU = 10; 
const int ROSSO = 11; 


void setup()
{
  pinMode(VERDE, OUTPUT); 
  pinMode(BLU, OUTPUT); 
  pinMode(ROSSO, OUTPUT); 
 
Serial.begin(9600);

  digitalWrite(VERDE, HIGH); 
  digitalWrite(BLU, HIGH); 
  digitalWrite(ROSSO, HIGH);
}

void loop()
{
tempC = analogRead(tempPin);           //lettura valore del sensore
tempC = (5.0 * tempC * 100.0)/1024.0;  //conversione del dato analogico in temperatura
Serial.print(" Celsius ");
Serial.println(tempC); 


if(tempC<18)
  {
    analogWrite( ROSSO, 30);
    analogWrite( VERDE, 144);
    analogWrite( BLU, 255);
  }
if(tempC >= 18 && tempC <= 22)
      {    analogWrite( ROSSO, 253);
           analogWrite( VERDE, 233);
           analogWrite( BLU, 16);
         }
  else {
    analogWrite( ROSSO, 210);
    analogWrite( VERDE, 31);
    analogWrite( BLU, 27);
  }
}

ArduinoNovellino

#10
Jun 04, 2015, 08:19 pm Last Edit: Jun 04, 2015, 08:22 pm by ArduinoNovellino
niente da fare .... penso che ci sia qualche problema con arduino ...
@Vespucci ma non è uguale a quello che ho scritto io -.-"

doppiozero

hai provato a cambiare pin al led?
Runtime Clock Manager -- https://github.com/duezero/RCM---Runtime-Clock-Manager
GPX datalogger -- https://github.com/duezero/GPX-datalogger
LiPo cycles counter -- https://github.com/duezero/LiPo-cycles-counter

ArduinoNovellino

hai provato a cambiare pin al led?
provato adesso ma nessun cambiamento...

Vespucci

Scusa rileggendo il codice nella dichiarazione del pin:

int tempPin = 0;

dovrebbe essere A0, perché penso il sensore sia analogico quindi lo avrai collegato ad A0 e non al pin 0, che fra l'altro è sconsigliato.

ArduinoNovellino

Scusa rileggendo il codice nella dichiarazione del pin:

int tempPin = 0;

dovrebbe essere A0, perché penso il sensore sia analogico quindi lo avrai collegato ad A0 e non al pin 0, che fra l'altro è sconsigliato.
cambiato da A0 a A1 e A2 ma niente da fare ....
comunque prima funzionava lo stesso il monitor seriale...

Go Up