salve vorrei visualizzare un valore che mi viene da un potenziometro solo quando il potenziometro varia....
es. if (potenziometro diverso dal valore precedente)
{
lcd.print("hello");
delay(2000);
}
Grazie........
Devi leggere il valore e memorizzarlo in una variabile, ad esempio vecchiovalore.
La prima lettura la puoi fare nel setup().
Poi ogni volta che leggi confronti la lettura con vecchiovalore e nel caso esegui una azione.
Infine aggiorni il valore di vecchia lettura con l'ultimo valore letto.
L'argomento è da sezione Software.
scusami PaoloP ma dici qualcosa del genere......
int vecchio_val;
int pin_pot = A1;
int valore;
setup();{
vecchio_val=analogRead(pin_pot);
}
loop();{
valore=analogRead(pin_pot);
if (valore!=vecchio_val){///////
}
valore=vecchio_valore;
}
Si però essendo un valore analogico metti un intervallo.
Ad esempio:
int vecchio_val;
int pin_pot = A1;
int valore;
void setup()
{
vecchio_val = analogRead(pin_pot);
}
void loop()
{
valore = analogRead(pin_pot);
if ((valore < vecchio_val - 1) || (valore > vecchio_val + 1))
{
//
}
valore = vecchio_val;
}
PaoloP è una bella idea ma provando non funziona...
purtroppo una volta che si verifica la condizione mi visualizza il valore ma poi non ne esce più fuori, ho provato a fare in modo che si verificasse un altra situazione ma il valore resta sul display.....
per adesso non mi viene niente.......
se hai qualche soluzione postamela te ne sono grato...
grazie..... per il consiglio di prima a presto.........
Se è un LCD è normale. Lo devi sovrascrivere o cancellare.
Mi sono accorto di questi due problemi il primo: il range di valore del potenziometro era ampio ed avevo delle piccole variazioni anche senza toccarlo, il secondo pare non mi eguagliasse il valore... adesso funziona!!!!!!!!!!
Grazie milleeeeeeeee PaoloP solo una domanda secondo me a volte non mi prende le doppie condizioni tipo:
if((stato<2)&&(statob==4); è possibile oppure sbaglio qualcosa....
Grazie di nuovo a presto..........
int vecchio_val;
int pin_pot = A1;
int valore;
int val;
int vecchiopot;
int statosec = 0;
#include<LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);
void setup()
{
vecchio_val = analogRead(pin_pot);
vecchiopot=(vecchio_val/25.5);//Divido il valore del potenziometro
               //di 1023 a soli 40
lcd.begin(16,2);Â
}
void loop(){Â
    if (statosec==1){
    lcd.clear();
    statosec=0;}Â
  lcd.setCursor(0,0);Â
  lcd.print("Hello");
valore = analogRead(pin_pot);
val=(valore/25.5);Â Â Â Â Â //divido 1023 a 40
 if ((val < vecchiopot - 1) || (val > vecchiopot + 1)){
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(val);
  delay(2000);
  vecchiopot=val; //val=vecchiopot non mi eguagliava il valore
          //vecchiopot
  statosec=1;
  if(val==vecchiopot){
   lcd.clear();
   lcd.print("tempo impostato");
   delay(1000);}
   }
}
if((stato<2)&&(statob==4);
Se metti il ; subito dopo l'IF lui esegue nel caso l'IF sia vero una istruzione vuota.
A parte che mancherebbe una parentesi, devi scrivere così
if( (stato<2) && (statob==4) )
{
 // codice da eseguire se entrambe le condizioni sono vere
}
Dai una lettura a questa guida --> http://blacklight.gotdns.org/guidac.pdf
Non è applicabile ad Arduino al 100% poichè l'IDE nasconde molte cose, ma è un buon punto di partenza.