arduino due: risolti i blocchi?

ciao,

con arduino due si è' risolto il problema del 'blocco' che impedisce di caricare gli sketch perchè si blocca la seriale?

e ci sono nuovi problemi?

E' uscito il nuovo IDE 1.5.2 beta, ma sinceramente non so se i problemi di cui parli siano stati risolti.
Controlla nel changelog.

willy12:
ciao,

con arduino due si è' risolto il problema del 'blocco' che impedisce di caricare gli sketch perchè si blocca la seriale?

e ci sono nuovi problemi?

Spiegati meglio. Che problema sarebbe?
Non uso molto la DUE ma in quei pochi test che ho fatto non ho avuto questo problema.

leo72:
Spiegati meglio. Che problema sarebbe?
Non uso molto la DUE ma in quei pochi test che ho fatto non ho avuto questo problema.

spesso, anzi quasi sempre, quando provo a caricare un nuovo sketch mentre arduino sta funzionando, ricevo un errore di sincronozzazione della seriale;
è un errore conosciuto e si risolve premendo il tasto di reset poco prima di caricare il nuovo prg ma è richiesta una precisa tempistica. in questa operazione. che ancora non sono riuscito a trovare;
e questo mi condiziona moltissimo nell'uso di arduino (lo sto usando per controllare dei relay e ad ogni modifica perdo moltissimo tempo per caricarla);

spero abbiano risolto altrimenti per me arduino non vale tanto sbattimento;

[off topic on ]
ho trovato una scheda della velleman/ipetronic che mi fa controllare da usb 5 input e 8 output, qualcuno ne sa qualcosa? è la vm110)
[off topic off]

Non ti sei spiegato molto bene:
spesso, anzi quasi sempre, quando provo a caricare un nuovo sketch mentre arduino sta funzionando, ricevo un errore di sincronozzazione della seriale;
è un errore conosciuto e si risolve premendo il tasto di reset poco prima di caricare il nuovo prg ma è richiesta una precisa tempistica. in questa operazione. che ancora non sono riuscito a trovare;
Non starai forse menzionando il problema di caricare uno sketch mentre l'Arduino sulla seriale spedisce dati?

Inoltre, che porta usi per programmare l'Arduino DUE?
Ci sono 2 porte: quella marchiata "native usb" è da usare per la normale comunicazione Arduino/PC mentre quella marchiato "programming" è da usare per l'invio di nuovi sketch. Nonostante la programmazione possa essere fatta da entrambe le porte, è consigliato farla sempre tramite la porta "programming".

Inoltre, in base alla porta collegata devi selezionare il programmatore nell'IDE.

leo72:
Non ti sei spiegato molto bene:

ho spiegatoquello che mi succede

Non starai forse menzionando il problema di caricare uno sketch mentre l'Arduino sulla seriale spedisce dati?

forse è quello, comunque non riesco a caricare lo sketch e questo non mi permette di usare arduino;

Inoltre, che porta usi per programmare l'Arduino DUE?

nessuna! nel senso che ancora non l'ho preso e chiedo se esiste ancora il problema prima di ricadere nella stessa situazione;

willy12:
nessuna! nel senso che ancora non l'ho preso e chiedo se esiste ancora il problema prima di ricadere nella stessa situazione;

Nel senso che stai sollevando un problema che non esiste sulla DUE senza nemmeno averla in mano, il problema che citi può capitare in casi limite sulla UNO.

willy12:

leo72:
Non ti sei spiegato molto bene:

ho spiegatoquello che mi succede

Hai per caso inserito il codice che ti stando problemi? Hai per caso pubblicato i messaggi di errore che ricevi? Hai per caso detto che versione dell'IDE usi? Hai per caso specificato che S.O. utilizzi?
No a tutte le domande, quindi non ti sei spiegato molto bene.

Non starai forse menzionando il problema di caricare uno sketch mentre l'Arduino sulla seriale spedisce dati?

forse è quello, comunque non riesco a caricare lo sketch e questo non mi permette di usare arduino;

QUando "non riesci a caricare lo sketch" l'Arduino che sta facendo? Sta spedendo dei dati al computer?
I led RX/TX sono accesi fissi o lampeggiano? Che sketch c'è sopra?

Non voglio passare da saccente o da scassaballe ma scrivere genericamente "non mi funziona", non "riesco a fare questo" non è di aiuto né a te che non ricevi l'aiuto né a noi che non siamo in grado di dartelo.

Inoltre, che porta usi per programmare l'Arduino DUE?

nessuna! nel senso che ancora non l'ho preso e chiedo se esiste ancora il problema prima di ricadere nella stessa situazione;

Ottimo... :sweat_smile:

leo72:
Non voglio passare da saccente o da scassaballe ma scrivere genericamente "non mi funziona", non "riesco a fare questo" non è di aiuto né a te che non ricevi l'aiuto né a noi che non siamo in grado di dartelo.

+1 :grin:

Nel passaggio da "ho spiegato quello che mi succede" a "non ce l'ho ancora" mi sono perso... :grin:

leo72:
Hai per caso inserito il codice che ti stando problemi? Hai per caso pubblicato i messaggi di errore che ricevi? Hai per caso detto che versione dell'IDE usi? Hai per caso specificato che S.O. utilizzi?
No a tutte le domande, quindi non ti sei spiegato molto bene.

ok, il codice è questo

#include <Wire.h>
#include <DS1307new.h>

int const PlafoBianco1 = 11;   
int const PlafoBianco2 = 10; 
int const PlafoBlu =      9; 
int const Pompa1 =        4;
int const Pompa2 =        5;
int const Livello =       7; 
int const Vuoto  =        6;
int const PompaCalcio =   8;
int const EchoPIN =       2;
int const TrigPIN =       3; 

int const PlafoBianco1_Ora_Inizio =  9,  PlafoBianco1_Min_Inizio = 30;
int const PlafoBianco1_Ora_Fine   = 19,  PlafoBianco1_Min_Fine   = 00;

int const PlafoBianco1_Inizio = (PlafoBianco1_Ora_Inizio * 60) + PlafoBianco1_Min_Inizio;
int const PlafoBianco1_Fine   = (PlafoBianco1_Ora_Fine   * 60) + PlafoBianco1_Min_Fine;

int const PlafoBianco2_Ora_Inizio =  9,  PlafoBianco2_Min_Inizio = 00;
int const PlafoBianco2_Ora_Fine   = 19,  PlafoBianco2_Min_Fine   = 00;

int const PlafoBianco2_Inizio = (PlafoBianco2_Ora_Inizio * 60) + PlafoBianco2_Min_Inizio;
int const PlafoBianco2_Fine   = (PlafoBianco2_Ora_Fine   * 60) + PlafoBianco2_Min_Fine;

int const PlafoBlu_Ora_Inizio =  9,  PlafoBlu_Min_Inizio = 0;
int const PlafoBlu_Ora_Fine   = 20,  PlafoBlu_Min_Fine   = 0;

int const PlafoBlu_Inizio = (PlafoBlu_Ora_Inizio * 60) + PlafoBlu_Min_Inizio;
int const PlafoBlu_Fine   = (PlafoBlu_Ora_Fine   * 60) + PlafoBlu_Min_Fine;

boolean PlafoBianco1_ON, PlafoBianco1_OLD = false;
boolean PlafoBianco2_ON, PlafoBianco2_OLD = false;
boolean PlafoBlu_ON, PlafoBlu_OLD = false;

//  movimento alternato
int const Pompa_Lim1a = 0,  Pompa_Lim1b = 0, Pompa_Lim1c = 5,  Pompa_Lim1d = 59; 
int const Pompa_Inizio1 = (Pompa_Lim1a * 60) + Pompa_Lim1b;
int const Pompa_Fine1   = (Pompa_Lim1c * 60) + Pompa_Lim1d;
    
int const Pompa_Lim2a = 6,  Pompa_Lim2b = 0, Pompa_Lim2c = 11, Pompa_Lim2d = 59; 
int const Pompa_Inizio2 = (Pompa_Lim2a * 60) + Pompa_Lim2b;
int const Pompa_Fine2   = (Pompa_Lim2c * 60) + Pompa_Lim2d;
    
int const Pompa_Lim3a = 12, Pompa_Lim3b = 0, Pompa_Lim3c = 17, Pompa_Lim3d = 59; 
int const Pompa_Inizio3 = (Pompa_Lim3a * 60) + Pompa_Lim3b;
int const Pompa_Fine3   = (Pompa_Lim3c * 60) + Pompa_Lim3d;
    
int const Pompa_Lim4a = 18, Pompa_Lim4b = 0, Pompa_Lim4c = 23, Pompa_Lim4d = 59; 
int const Pompa_Inizio4 = (Pompa_Lim4a * 60) + Pompa_Lim4b;
int const Pompa_Fine4   = (Pompa_Lim4c * 60) + Pompa_Lim4d;
    
//  movimento accoppiato
int const Pompa_Lim5a =  0, Pompa_Lim5b = 0,  Pompa_Lim5c =  0, Pompa_Lim5d = 15; 
int const Pompa_Inizio5 = (Pompa_Lim5a * 60) + Pompa_Lim5b;
int const Pompa_Fine5   = (Pompa_Lim5c * 60) + Pompa_Lim5d;
    
int const Pompa_Lim6a = 12, Pompa_Lim6b = 00, Pompa_Lim6c = 12, Pompa_Lim6d = 15; 
int const Pompa_Inizio6 = (Pompa_Lim6a * 60) + Pompa_Lim6b;
int const Pompa_Fine6   = (Pompa_Lim6c * 60) + Pompa_Lim6d;

boolean Pompa1_ON, Pompa1_OLD = false;
boolean Pompa2_ON, Pompa2_OLD = false;

boolean PompaCalcio_ON, PompaCalcio_OLD = false;
    
int const LivelloAcqua = 3.00;
int const TempoLivello = 300;
    
int ora, minuti, secondi, orario, orario_livello, orario_old;
float valori [10] ;
float distanza, totale, media;

void setup () {
  pinMode(PlafoBianco1, OUTPUT);    
  pinMode(PlafoBianco2, OUTPUT);    
  pinMode(PlafoBlu    , OUTPUT);    
  pinMode(Pompa1,       OUTPUT);    
  pinMode(Pompa2,       OUTPUT);    
  pinMode(Livello,      OUTPUT);    
  pinMode(PompaCalcio,  OUTPUT);    
  pinMode(EchoPIN,      INPUT);
  pinMode(TrigPIN,      OUTPUT);
  pinMode(Vuoto,        OUTPUT);    
  
  digitalWrite(PlafoBianco1, HIGH); 
  digitalWrite(PlafoBianco2, HIGH); 
  digitalWrite(PlafoBlu,     HIGH); 
  digitalWrite(Pompa1,       HIGH); 
  digitalWrite(Pompa2,       HIGH); 
  digitalWrite(Livello,      HIGH); 
  digitalWrite(PompaCalcio,  HIGH); 
  digitalWrite(Vuoto,        HIGH); 
 

  for (int x = 0; x < 10; x++) { valori[x] = LivelloAcqua; }
  orario_old = 0;  
}

void MovimentoPompe() {

  Pompa1_ON, Pompa2_ON = false;

  if ((orario >= Pompa_Inizio1) && (orario < Pompa_Fine1)) { Pompa1_ON = true; };
  if ((orario >= Pompa_Inizio2) && (orario < Pompa_Fine2)) { Pompa2_ON = true; };
  if ((orario >= Pompa_Inizio3) && (orario < Pompa_Fine3)) { Pompa1_ON = true; };
  if ((orario >= Pompa_Inizio4) && (orario < Pompa_Fine4)) { Pompa2_ON = true; };
  
  if ((orario >= Pompa_Inizio5) && (orario < Pompa_Fine5)) { Pompa1_ON = true; Pompa2_ON = true; };
  if ((orario >= Pompa_Inizio6) && (orario < Pompa_Fine6)) { Pompa1_ON = true; Pompa2_ON = true; };
} 


void loop () {

  delay(5000);            // RIPETERE OGNI 5 SECONDI

  RTC.getTime();
  ora = (RTC.hour);
  minuti = (RTC.minute);
  secondi = (RTC.second);
  orario = (ora * 60) + minuti;
  orario_livello = (ora * 3600) + (minuti * 60) + secondi;

//  Gestione PLAFONIERA
 
  if ((orario >=PlafoBianco1_Inizio) && (orario < PlafoBianco1_Fine)) { PlafoBianco1_ON = true; }
  else { PlafoBianco1_ON = false; }
  if ( PlafoBianco1_OLD != PlafoBianco1_ON ) {
    PlafoBianco1_OLD = PlafoBianco1_ON;
    if ( PlafoBianco1_ON ) { digitalWrite(PlafoBianco1, LOW); } else { digitalWrite(PlafoBianco1, HIGH); }
  }    
         
  if ((orario >=PlafoBianco2_Inizio) && (orario < PlafoBianco2_Fine)) { PlafoBianco2_ON = true; }
  else { PlafoBianco2_ON = false; }
  if ( PlafoBianco2_OLD != PlafoBianco2_ON ) {
    PlafoBianco2_OLD = PlafoBianco2_ON;
    if ( PlafoBianco2_ON ) { digitalWrite(PlafoBianco2, LOW); } else { digitalWrite(PlafoBianco2, HIGH); }
  }    
         
  if ((orario >=PlafoBlu_Inizio) && (orario < PlafoBlu_Fine)) { PlafoBlu_ON = true; }
  else { PlafoBlu_ON = false; }
  if ( PlafoBlu_OLD != PlafoBlu_ON ) {
    PlafoBlu_OLD = PlafoBlu_ON;
    if ( PlafoBlu_ON ) { digitalWrite(PlafoBlu, LOW); } else { digitalWrite(PlafoBlu, HIGH); }
  }    
  
//  Gestione POMPE

  MovimentoPompe();

  if ( Pompa1_OLD != Pompa1_ON ) {
    Pompa1_OLD = Pompa1_ON;
    if ( Pompa1_ON ) { digitalWrite(Pompa1, LOW); } 
    else { digitalWrite(Pompa1, HIGH); }
  }
   
  if ( Pompa2_OLD != Pompa2_ON ) {
    Pompa2_OLD = Pompa2_ON;
    if ( Pompa2_ON ) { digitalWrite(Pompa2, LOW); } 
    else { digitalWrite(Pompa2, HIGH); }
  }
   
// gestione pompa calcio

  int xmod = (ora % 2);
  if ( (xmod == 1) && (minuti > 0) && (minuti < 6) )  { PompaCalcio_ON = true; } else { PompaCalcio_ON = false; }
  
  if ( PompaCalcio_OLD != PompaCalcio_ON ) {
    PompaCalcio_OLD = PompaCalcio_ON;
    if ( PompaCalcio_ON ) { digitalWrite(PompaCalcio, LOW); }
    else { digitalWrite(PompaCalcio, HIGH); }
  }  


// Gestione LIVELLO

  // Start Ranging
  digitalWrite(TrigPIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TrigPIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TrigPIN, LOW);
  // Compute distance
  distanza = pulseIn(EchoPIN, HIGH);
  distanza= distanza / 58;
//  Serial.print(" rilevati "); Serial.print(distanza);
  
  for (int x = 0; x < 9; x++) { valori[x] = valori[x+1]; }
  valori [9] = distanza;
  totale = 0;
  for (int x = 0; x < 10; x++) { totale = totale + valori[x]; }  
  media = totale / 10.0;
    
  if (media > LivelloAcqua) 
  { 
    if ( ((orario_livello - orario_old) > TempoLivello) || (orario_livello < orario_old)) 
    {
      orario_old = orario_livello;
      digitalWrite(Livello,LOW);           
      delay(15000);                    // compresi 7 sec per avvio pompa      
      digitalWrite(Livello,HIGH);           
    }
  }

}

il codice di errore è: avrdude: stk500_getsync(): not in sync: resp=0x00

l'ide è la 1.0.2

il s.o è windows 7 64bit

QUando "non riesci a caricare lo sketch" l'Arduino che sta facendo? Sta spedendo dei dati al computer?
I led RX/TX sono accesi fissi o lampeggiano? Che sketch c'è sopra?

sta eseguendo la precedente versione dello stesso sketch (nel senso che ho fatto qualche modifica o corretto un errore)
non sta spedendo dati perché ho eliminato tutte le 'chiamate' alla seriale;

spero di aver risposto a tutto, non avevo capito cosa intendevi con 'non spiegato';

Per la DUE devi usare gli IDE della serie 1.5.x --> http://arduino.cc/en/Main/Software

PaoloP:
Per la DUE devi usare gli IDE della serie 1.5.x --> http://arduino.cc/en/Main/Software

credevo di essermi spiegato: l'arduino due NON CE L'HO!

ho chiesto se era risolto io problema PRIMA di comprarlo per evitare un acquisto inutile.

@Willy:

  1. se stacchi tutto quello che c'è attaccato all'Arduino (che Arduino usi, visto che il DUE non ce l'hai?), hai sempre l'errore di "not in synch" oppure no?
  2. se carichi uno sketch base (tipo il Blink), hai sempre "not in synch" se cerchi di riprogrammarlo?

leo72:
@Willy:

  1. se stacchi tutto quello che c'è attaccato all'Arduino (che Arduino usi, visto che il DUE non ce l'hai?), hai sempre l'errore di "not in synch" oppure no?

ho arduino uno rev.3 e arduino mega 2560 e hanno lo stesso problema.

ho appena provato e staccando tutto il caricamento sembra andare a buon fine;
ma così è impossibile creare una ciabatta programmata con l'rduino chiuso dentro e ben collegato, se devo staccare tutto ogmi volta...

  1. se carichi uno sketch base (tipo il Blink), hai sempre "not in synch" se cerchi di riprogrammarlo?

se non stacco i collegamenti non carica quasi mai, è un po' random ma sono più le volte che dà errore.

Prova collegando tutto tranne ai pin 0 e 1 (tx e rx) usati dalla seriale.

PaoloP:
Prova collegando tutto tranne ai pin 0 e 1 (tx e rx) usati dalla seriale.

quelli non li uso proprio

astrobeed:
Nel senso che stai sollevando un problema che non esiste sulla DUE senza nemmeno averla in mano, il problema che citi può capitare in casi limite sulla UNO.

proprio così!!
mi sto informando prima di acquistare la due su un problema della ver.uno tanto noto che viene descritto tra i problemi noti, ti sembra strano?

Ok. Ci sono Arrivato.
Hai un Arduino UNO che ti da problemi perché a causa delle scritture sulla seriale non lo riesci a flashare e stai chiedendo se il problema è risolto sulla DUE.
Credo di si perchè ci sono due porte per la programmazione. Quindi se una è impegnata, flashi con l'altra.

Comunque nel tuo sketch, come prima istruzione del setup() piazza un bel

delay(2000);