Problema a leggere 2 ingressi analogici con arduino due

Ciao,

ho un problema;

mi spiego:

voglio leggere 2 ingressi analogici del mio arduino due A0 e A1, ma se li leggo nello stesso programma, uno dei due fa il master dell'altro, ovvero quando muovo il potenziometro di uno vedo variare entrambi gli analogici, mentre se muovo l'altro non varia nessuno dei due ingressi.

se commento la parte di programma di uno dei due (uno alla volta) li leggo entrambi

di seguito inserisco la parte di codice:

//let_analogici è il nome della variabile che ho usato per far leggere un solo analogico per ciclo di programma.

if (let_analogici == 0){ 

                        Pt1000_Mush=analogRead(A0); //imposto il valore dell'ingresso A0
                        float tmush=((tMushMax-tMushMin)/(AMushMax-AMushMin))*(Pt1000_Mush-AMushMin)-tMushMin;
                        lcd.setCursor(0, 1);
                        lcd.print("T M ");
                        lcd.print(tmush);
                        let_analogici = 1;
                       }
else
                        {
                        Pt1000_Sparge=analogRead(A2); //imposto il valore dell'ingresso A1
                        float tsparge=((tSpargeMax-tSpargeMin)/(ASpargeMax-ASpargeMin))*(Pt1000_Sparge-ASpargeMin)-tSpargeMin;
                        lcd.setCursor(0, 0);
                        lcd.print("T S ");
                        lcd.print(tsparge);
                        let_analogici = 0; 
                        }
                        
                        
                        delay (50);
                        

                      Serial.println (let_analogici);

edit by mod: per favore includi il codice usando gli appositi tag

aiuto non so dove sbaglio

Forse hai fatto male i collegamenti? Come sono collegati questi potenziometri?
E poi fai vedere solo una porzione di codice, hai controllato se nel tuo programma alteri quella variabile che usi per identificare l'ingresso analogico da leggere?

Ciao,
grazie per avermi risposto,

di seguito il codice completo

// modificato il 22/12/13 alle 22:11  ancora da provare, ma si compila
// modificato il 23/12/13 alle 22:39 ancora problema a leggere 2 analogici insieme


  #include <stdio.h>
  #include <LiquidCrystal.h>
  #include <TriggerButton.h>
  LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
  //set per timer
  long int millisecondi;
  static unsigned long Tmush=0;
  int timer1 = 0;
  int timer2 = 0;
  int timer3 = 0;
  int prova  = 0;
  
  int let_analogici = 0;
  
  //setup parametri
  
  //taratura PT1000 Mush
  float tMushMin=1;       //temperatura minima
  float tMushMax=100;     //temperatura massima
  int AMushMin=20;        //valore analogico minimo
  int AMushMax=1000;      //valore analogico massimo
  
  //taratura PT1000 Sparge
  float tSpargeMin=1;     //temperatura minima
  float tSpargeMax=100;   //temperatura massima
  int ASpargeMin=20;      //valore analogico minimo
  int ASpargeMax=1000;    //valore analogico massimo
  
  //taratura PT1000 Boil
  //float tBoilMin=1;      //temperatura minima
  //float tBoilMax=100;    //temperatura massima
  //int ABoilMin      =    20;       //valore analogico minimo
  //int ABoilMax      =   1000;     //valore analogico massimo
  
 //dati ricetta
 
 //temperature degli steps tutte le temperature sono in °C
 
  int tMush_IN       =  45;  //mpasto omogeneo a 40°C         //temperatura di mushIN
  int tAcid_Rest     =  40;  //Acid rest a 40°
  int tProtein_Rest  =  50;
  int tB_amilasi     =  60;
  int tA_amilasi     =  70;
  int tS_unica_AB    =  65; //la tempertura varia in base al fatto se si vuole preferire la fase a o b amilasi se si fa questa non si fanno le 2 precedenti
  int tMush_OUT      =  78; //si porta a 78°C per rendere l'impasto meno denso
  int tSpargeIN      =  80; 
  //decorazione attulmente non gestita
  
  // temperatura per sparge
  
  int tSparge        =  78;
  
  //Tempi
     
  static int TMush_IN       =  10000;  //durata TMush_IN in millisecondi
  static int TAcid_Rest     =  6000;
  static int TProtein_Rest  =  5000;
  static int TB_amilasi     =  4000;
  static int TA_amilasi     =  6000;
  static int TS_unica_AB    =  5000;
  static int TMush_OUT      =  4000;
   
  //variabili

  float      Pt1000_Mush   = 0; //riferita A0
  float      Pt1000_Sparge = 0; //riferita A1
  //float      Pt1000_Boil   = 0; //riferita A2
  
  //int iStato_puls          = 0; //stato plusante reset allarme
  int iStato_end_step      = 0; //stato dell'uscita che comanda il cicalino
  int iStato_V1_mixer      = 0;
  int iStato_V2_mixer      = 0;
  int stato_pulsante_reset = 0;
  boolean bStato_SpargeOK  = 0;
  
  float tmush              = 0;
  float tsparge            = 0;
  //float tboil              = 0;
  
  boolean bStato_all       = false;  // stato allarme suona o no
  boolean bStato_puls      = false;  

  
  TriggerButton Button1;
  TriggerButton Button2;
  
  
  //pin out
  
  int al_fine_step   = 10;  // cialino e led step raggiunto
  int al_tSpargeOK   =  9;  //spia temperatura Sparge raggiunta
  int Alim_retro_lcd =  8;   // Alimimentazione retroilluminazione lcd 
  int V1_mixer       =  7;    //uscita per velocità 1 mixer
  int V2_mixer       =  6;    //uscita per velocità 2 mixer
  
  // enumerazione macchina a stati
  
  typedef enum{
    sMush_IN=0,
    sAcid_Rest,
    sProtein_Rest,
    sB_amilasi,
    sA_amilasi,
    sS_unica_AB,
    sMush_OUT,
    SMfinito
  }stati;
  
  stati ricetta;
  
  //Pt1000_Mush   = A0;
  //Pt1000_Sparge = A2;
  
void setup() 
{
 
  pinMode (52, INPUT); //setto come ingressi i pin
  pinMode (53, INPUT); //setto come ingressi i pin
  Button1.setUp(52, HIGH); //setto pin 38 come pulsante attivo alto
  Button2.setUp(53, HIGH);
  
  //int preMushIN=(millis() - Tmush) >=Tmush_step1 && tmush>MushIN && stato == 1 );
  //ingressi analogici
  
  //uscite
  pinMode(30,INPUT);
  pinMode(al_fine_step, OUTPUT);  // cialino e led step raggiunto
  pinMode(13, OUTPUT);
  pinMode(Alim_retro_lcd, OUTPUT);
  pinMode(al_tSpargeOK, OUTPUT); // Alimimentazione retroilluminazione lcd
//comuniczione

//arrey


// setup seriale

  Serial.begin(57600);
  //digitalWrite(13,LOW)   

  
// setup display

  lcd.begin(16, 2); //setta la dimensione del display 16 colonne 2 righe nota: quì si parte a contare da 1
  //lcd.print("Volpara-HB"); // va sulla prima riga
  
}

void loop() 
{  

  //
  //lcd.setCursor(0, 0); //imposta 0 numero di colonna da dove cominciare a scrivere sulla riga 1 nota: qui si parte a contare da 0
  //lcd.print(millis()/1000); //esegue counter a video da quando il sistema è partito

digitalWrite(13,LOW);

if (bStato_all == false){digitalWrite (al_fine_step, LOW);}
if (bStato_all == true){digitalWrite (al_fine_step, HIGH);}

if (bStato_SpargeOK == false){digitalWrite (al_tSpargeOK, LOW);}
if (bStato_SpargeOK == true){digitalWrite (al_tSpargeOK, HIGH);}

if (let_analogici == 0){ 

                        Pt1000_Mush=analogRead(A0); //imposto il valore dell'ingresso A0
                        float tmush=((tMushMax-tMushMin)/(AMushMax-AMushMin))*(Pt1000_Mush-AMushMin)-tMushMin;
                        lcd.setCursor(0, 1);
                        lcd.print("T M ");
                        lcd.print(tmush);
                        //let_analogici = 1;
                       }
else
                        {
                        Pt1000_Sparge=analogRead(A2); //imposto il valore dell'ingresso A1
                        float tsparge=((tSpargeMax-tSpargeMin)/(ASpargeMax-ASpargeMin))*(Pt1000_Sparge-ASpargeMin)-tSpargeMin;
                        lcd.setCursor(0, 0);
                        lcd.print("T S ");
                        lcd.print(tsparge);
                        //let_analogici = 0; 
                        }
                        
                        
                        delay (50);
                        

                      Serial.println (let_analogici);
//Pt1000_Boil=analogRead(A10); //imposto il valore dell'ingresso A2
//float tboil=((tBoilMax-tBoilMin)/(ABoilMax-ABoilMin))*(Pt1000_Boil-ABoilMin)-tBoilMin;


  switch(ricetta){
     
                   case sMush_IN:
                  {
                                bStato_puls  = false;
                                bStato_all  = false;
                                //Pt1000_Mush=analogRead(A0); //imposto il valore dell'ingresso A0
                                //float tmush=((tMushMax-tMushMin)/(AMushMax-AMushMin))*(Pt1000_Mush-AMushMin)-tMushMin;

                                                                   
                                 if(tmush<tMush_IN) //se la temp attuale è minore di quella desiderata allora
                                 { 
                                   Tmush=millis();  //il timer non conta
                                 }
                                     if(timer3=((millis() - Tmush) >=TProtein_Rest) && (tmush>tMush_IN) && (bStato_puls == false) ) //se il (tempo trascorso - il tempo di prima) è maggiore o uguale al tempo impostato e la temperatura  attuale è maggiore di quella desiderata e il pulsante non è premuto 
                                     {
                                      bStato_all = true;
                                     }
                                      if(Button1.Click(10))
                                      {
                                      bStato_puls = !bStato_puls;
                                      }
                                       if (bStato_puls == true )//(bStato_all == false)
                                       {   
                                          ricetta=sB_amilasi; 
                                              //iStato_puls = 0;// sposta lo stato Switch
                                       }
                                     
                                             //funziona
                                             
                    //Serial.println(tsparge);
                   
                   
                                             //lcd.setCursor(0, 11);
                                             //lcd.print("T M ");
                                             //lcd.print(tmush);
                                             //lcd.print(" mush_in");
                                             //delay (500);
                  break;
                  
                  }

ora per i collegamenti ho messo il pin 1 di entrambi i potenziometri a +3.3v ho provato a metterli a +5v ma non cambia nulla,
il pin 3 di entrambi sono a gnd,
mentre il pin centrale dei potenziometri vanno sull'A0 per uno e A2 per l'alro.

non riesco a capire come mai ho questo problema.

grazie per l'aiuto e buon Natale

Il codice si include usando gli appositi tag. Te lo avevo scritto anche nel tuo precedente post, hai letto il mio edit?

Non dare MAI 5V ad un pin della DUE, lo bruci! Questa scheda è fatta per lavorare a 3V3.

Il codice è un pò arzigogolato, con un sacco di roba commentata e non si capisce bene cos'è che ti possa dare problemi così. Ma facendo un semplice programma che legge i due ingressi e stampa i dati sulla seriale, ti funziona?

Ciao Leo72,

scusa non avevo letto il tuo post, non mancherò di usare i tag la prossima volta, non li ho mai usati ma non sarà difficilissimo :slight_smile:

auguri di un buon Natale

grazie

Ciao,

ho provato a fare questo programmino, ma il risultato non cambia, aiuto

int let_analogici = 0;
float                  Pt1000_Mush   = 0; //riferita A0
float      Pt1000_Sparge = 0; //riferita A1

void setup() {
  // put your setup code here, to run once:
Serial.begin(57600);
}

void loop() {
  // put your main code here, to run repeatedly:
if (let_analogici==0){
                      Pt1000_Mush=analogRead(A0);
                      Serial.println("mush");
                      Serial.println(Pt1000_Mush);
                      let_analogici = 1;
                     }
else
    {
    Pt1000_Sparge=analogRead(A2);
    Serial.println("sparge");
    Serial.println(Pt1000_Sparge);
    let_analogici = 0;
    }

delay (50);

}

Ciao a tutti,

problema risolto, è la versione di compilatore 1.5.5 che ha problemi con analoread(), se uso la versione precedente 1.5.4r2 funziona tutto.

diffondete.

grazie per la collaborazione, alla prossima.
une sereno e felice Natale a tutti.

Ah però!
Dovresti aprire un issue e segnalare la cosa, almeno la sistemano. Se confermato, è un errore parecchio grave.

Ciao , scusa l'ignoranza come si apre una issue?

L'hanno già aperta 2 settimane fa. :roll_eyes:
--> Due analog read · Issue #1740 · arduino/Arduino · GitHub

Provate usando la "Nightly build" --> http://arduino.cc/en/Main/Software

PaoloP:
L'hanno già aperta 2 settimane fa. :roll_eyes:
--> Due analog read · Issue #1740 · arduino/Arduino · GitHub

Provate usando la "Nightly build" --> http://arduino.cc/en/Main/Software

Oppure sostituendo il file wiring_analog.c con questo.