Arduino Yun sparisce la porta usb nel IDE dopo caricamento sketch stati finiti

Ciao Ragazzi,

Mi succede una cosa stranissima :
Sto provando di programmare stati finiti per una lettura più facile del mio sketch.
Lo sketch originale è perfettamente funzionante, però appena carico quello con la prova per stati finiti mi sparisce l’arduino yun dalle connessioni!
Quando mi succede devo collegarmi tramite wifi alla scheda, caricare un’altro sketch e allora la scheda torna visibile nelle connessioni usb…

Mi chiedo se non c’è qualcosa di strano nel mio sketch, qualcuno mi può aiutare?

Sketch principale :

#include <DHT.h>                           //For DHT22 & AM2302 library
#include <OneWire.h>                       //For DS18B20
#include <LiquidCrystal.h>

#define DHTPIN 3                           //DHT22
#define DHTTYPE DHT22
const byte DS18B20_Pin = 4;                //DS18B20 Signal pin on digital 4

DHT dht(DHTPIN, DHTTYPE);
OneWire ds(DS18B20_Pin);                  // on digital pin 4
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float temperature = getTemp();

void setup()
{
  Serial.begin(9600); 
  //Serial.println("DHT TEST PROGRAM ");   //DHT11
  //Serial.print("LIBRARY VERSION: ");
  //Serial.println(DHT11LIB_VERSION);
  Serial.println();
  //Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
  dht.begin();                            //DHT22
  lcd.begin(16, 2);
}

void loop()
{
sensoredht22();
sensoreDS18B20();
scrivilcd();
}

scrivilcd

void scrivilcd()
{
  Serial.print("Temp. acqua :            ");
  Serial.print(temperature);
  Serial.println(" c");
  Serial.println(" ");
  //lcd.setCursor(0,1);
  //lcd.print("Temp acq  ");
  //lcd.print(temperature);
  //lcd.println("c");
  lcd.print("Home  Hum  Tank");
  lcd.setCursor(0,1);
  lcd.print(t);
  lcd.print("c ");
  lcd.print(h);
  lcd.print("% ");
  lcd.print(temperature);
  lcd.println("c");

  delay(1000);                                       //just to slow down the output it's easier to read

}

sensoreDS18B20

void sensoreDS18B20()
{
  //float temperature = getTemp();     //Start DS18B20
  
}


float getTemp()
{
  //returns the temperature from one DS18S20 in DEG Celsius
  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) 
  {
    //no more sensors on chain, reset search
    ds.reset_search();
    return -1000;
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) 
  {
    Serial.println("CRC is not valid!");
    return -1000;
  }

  if ( addr[0] != 0x10 && addr[0] != 0x28) 
  {
    Serial.print("Device is not recognized");
    return -1000;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);                           // start conversion, with parasite power on at the end

  byte present = ds.reset();
  ds.select(addr);  
  ds.write(0xBE); // Read Scratchpad


  for (int i = 0; i < 9; i++)                  // we need 9 bytes
  {
    data[i] = ds.read();
  }

  ds.reset_search();

  byte MSB = data[1];
  byte LSB = data[0];

  float tempRead = ((MSB << 8) | LSB);         //using two's compliment
  float TemperatureSum = tempRead / 16;

  return TemperatureSum;                       //End DS18B20
}

sensoredht22

void sensoredht22()
{
  //start DHT22
  //float h = dht.readHumidity();
  //float t = dht.readTemperature();
  /* check if returns are valid, if they are NaN (not a number) then something went wrong!
   if (isnan(t) || isnan(h)) 
   {
   Serial.println(F("Failed to read from DHT"));
   }
   else 
   {
   Serial.print(F("Humidity: "));     //DHT22
   Serial.print(h);
   Serial.print(F(" %\t"));
   Serial.print(F("Temperature: ")); 
   Serial.print(t);
   Serial.println(F(" C"));
   }*/  //End DHT22


  Serial.print("Umidita dentro casa : \t ");
  Serial.print(h);
  Serial.println(" % ");
  Serial.print("Temp. dentro casa : \t ");
  Serial.print(t);
  Serial.println(" c ");              //DHT22
}

Possibile che sia un problema dell'IDE 1.5.8?!

Ho provato lo sketch stati finiti con arduino Uno e non funziona, ma non spiega perché sparisce dell'elenco delle connessione nell'IDE!!

La YUN ha lo stesso comportamento della Leonardo.
Non viene resettata dalla semplice apertura della porta ma dall’apertura e chiusura della porta a 1200baud.
Il reset sulla Leo e sulla YUN provoca il distacco e il riattacco della USB. Spesso su Windows questo provoca il cambio della porta COM e poi il ripristino successivo.
La mia ad esempio passa sulla COM5 all’accensione, va in COM6 per la programmazione, poi al reset torna alla 5 e poi subito dopo alla 6.
Non so se questo comportamento viene osservato anche su Linuxo MacOS.