Problemi con Arduino Micro

Ciao a tutti,
da due mesi ho cominciato a lavorare con Arduino Uno.
Non ho mai incontrato grandi difficoltà e tutto è filato quasi sempre liscio.
Per problemi di consumi ho deciso di acquistare un Arduino Micro e qui sono cominciati i primi problemi.
Ho caricato il seguente sketch:

void setup() { 
 //Initialize serial and wait for port to open:
  Serial.begin(9600); 
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  
  // prints title with ending line break 
  Serial.println("Setup"); 
} 
void loop()
{
  Serial.println("Loop");
  delay(500);
}

Ma controllando sia sul Monitor Seriale che sulla porta parallela associato al micro non vedevo niente.
Ecco la prima domanda:

  • lo stream di dati proveniente da Arduino lo posso vedere con il monitor seriale come con l'Uno o devo usare un programma tipo Hyper Terminal?
    Ho notato in "gestione dispositivi" che anche senza resettare il Micro la porta a esso associata continuava a refressharsi come se venisse continuamente tolta e rimessa.
    Dopo qualche tentativo adesso il computer in un primo momento me lo riconosce, ma dopo qualche secondo scompare diventando "dispositivo sconosciuto" e provando a riaggiornare il driver non lo trova dicendo:
    -Impossibile trovare software driver per il dispositivo.
    Dunque i problemi sono due:
  • come mai non avevo riscontro dei vari println
  • come mai adesso non lo riconosce più
    Grazie a tutti

Il codice mi sembra sbagliato, il problema potrebbe dipendere dal fatto che la seriale è impegnata quando tenti di scrivere un nuovo software e questo ipedisce al IDE di riconoscere.

L'oggetto Serial è presente sin dall'inizio e viene valutato come una condizione vera (true) nel ciclo while, pertanto quel ciclo lo ritengo superfluo.

Prima della abiilitazione della seriale con begin(9600) conviene sempre mettere un delay(1000) per avere un tempo di un secondo in cui la seriale può essere impegnata per la scrittura del bootloader.

Soluzione, prova a scrivere l'esempio blink, tenendo premuto il tasto reset di Arduino micro, clicca su scrivi software dall' IDE e rilascia il reset dopo 1 secondo.

Ciao.

Adesso il computer non mi riconosce più il Micro indipendentemente dall'IDE, anzi lo riconosce per qualche secondo e poi diventa "dispositivo sconosciuto". Il ciclo "while" l'ho preso direttamente da un esempio e se noti il "Needed for Leonardo only" è necessario dunque anche per il Micro. Il codice blink l'avevo provato precedentemente e funzionava.

Arduino Micro non viene riconosciuto nel momento esatto in cui finisce di caricare il bootloader.

Ho notato che nonostante non venga riconosciuto da Windows riesco a caricare lo sketch. Il problema è che se seleziono il monitor serial, compare il messaggio "Porta seriale non trovata", e anche Hyper Terminal non trova niente.

L'Arduino Micro monta l'ATmega32u4 come la Leonardo.
Per la soluzione dei problemi puoi cercare nel forum topic inerenti quella scheda.

rents85:
Ho notato che nonostante non venga riconosciuto da Windows riesco a caricare lo sketch. Il problema è che se seleziono il monitor serial, compare il messaggio "Porta seriale non trovata", e anche Hyper Terminal non trova niente.

Ricarica sopra al Micro un altro sketch che non faccia uso della seriale, ad esempio il Blink.
Collegandolo al PC, il sistema lo vede?

MauroTec:
L'oggetto Serial è presente sin dall'inizio e viene valutato come una condizione vera (true) nel ciclo while, pertanto quel ciclo lo ritengo superfluo.

E' una condizione nuova, introdotta per l'Atmega32U4, che ha la USB integrata.

leo72:

MauroTec:
L'oggetto Serial è presente sin dall'inizio e viene valutato come una condizione vera (true) nel ciclo while, pertanto quel ciclo lo ritengo superfluo.

E' una condizione nuova, introdotta per l'Atmega32U4, che ha la USB integrata.

Si lo avevo notato tempo a dietro, ma non mi sono mai soffermato a verificare anche perchè non ho quella board o simil Leonardo.
Continuo a non capirne il significato, come detto il C++ valuta una istanza di classe come verà nel senso esistente, testarne l'esistenza vuol dire prevedere la possibilità che quel oggetto a quel tempo potrebbe non essere ancora creato, ma se prima lo uso con Serial.begin() quello oggetto deve già esistere. Comunque mi tiro fuori per mancanza di esperienza diretta con la board.

Ciao.

Ecco il codice, estratto dal file CDC.cpp del core:

// This operator is a convenient way for a sketch to check whether the
// port has actually been configured and opened by the host (as opposed
// to just being connected to the host).  It can be used, for example, in 
// setup() before printing to ensure that an application on the host is
// actually ready to receive and display the data.
// We add a short delay before returning to fix a bug observed by Federico
// where the port is configured (lineState != 0) but not quite opened.
Serial_::operator bool() {
	bool result = false;
	if (_usbLineInfo.lineState > 0) 
		result = true;
	delay(10);
	return result;
}