Problema di comunicazione pc --> arduino

Buongiorno, mi scuso in anticipo perchè non so se sono nella pagina giusta essendomi iscritto da pochissimo, avrei bisogno per cortesia di risolvere questo proplema:
Comando un led tramite pc con Excel , una volta acceso il led mi invia la risposta nel foglio Excel , e fino qui tutto bene.
Il problema nasce quando spengo e riaccendo il pc, non mi funziona piu finche non ricarico lo sketc in arduino.
La comunicazione è con cavo usb .
Mi potete aiutare ?

Buongiorno e benvenuto nella sezione Italiana del forum,
cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE
(... quello che vedi in blu è un link, fai click su di esso per raggiungere la discussione) spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie, Igor

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. :wink:

Inoltre, dopo la presentazione, dai più info. Arduino quale ?? Quale sketch usi ? Come hai collegato il led ? etc. Senza info... che possiamo dirti ?

Grazie Igor per la tua risposta, ho provato ha presentarmi ma non riesco, non trovo nessuna casella di testo.
Puoi per cortesia dirmi come devo fare?

Grazie
Simone

Nel REGOLAMENTO (che dovresti aver letto) al punto 16.7 c'è spiegato come fare. E come rispondere a qualsiasi discussione ... solo che la risposta deve essere la tua presentazione (quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati).

Guglielmo

Benvenuto, pierost :slightly_smiling_face:
Fai la tua presentazione IN CODA ALL'APPOSITA DISCUSSIONE:
Presentazioni nuovi iscritti: fatevi conoscere da tutti! (Part 2)

IN CODA alla discussione, premendo Reply!
Dov'è la difficoltà?...
Che cosa non è chiaro?...

Salve , mi chiamo Simone, 58 anni, sono un nuovo iscritto,
ho sempre lavorato nel settore automazione industriale,
non sono molto pratico di arduino.
ho fatto qualche progettino con Arduino Uno e Mega e Sim800l seguendo qualche tutorial di Paolo Aliverti e qualche spunto altrove.
Ringrazio.

Avrei bisogno per cortesia di risolvere questo proplema:
Comando un led tramite pc con Excel , una volta acceso il led mi invia la risposta nel foglio Excel , e fino qui tutto bene.
Il problema nasce quando spengo e riaccendo il pc, non mi funziona piu finche non ricarico lo sketc in arduino.
Questo mi succede sia con arduino Mega e arduino Uno.
La comunicazione è con cavo usb .

Sistema operativo pc : Win 7
Sul pc comunico con arduino tramite porta seriale virtuale : usb-serial CH40 (com3).
IDE : arduino 1.8.19
Tipo di scheda: Arduino mega2560 (ATmega2560 16AU).
Led rosso collegato al Pin50 con resistenza 390 ohm.

Mi potete aiutare ?
Grazie

Sketch:

#define led 50  // Il Pin 50 è quello connesso al LED
char rx = 0;    // variabile per contenere il carattere ricevuto
 
 

 
void setup()
{

 Serial.begin(9600);   // imposto la seriale per lavorare a 9600 baud
  pinMode(led, OUTPUT); // imposta il pin 13 come pin di OUTPUT.
  Serial.flush();       // Svuoto il buffer di ricezione seriale
  Serial.println("Comandi disponibili:\nA -> accendi\nS -> Spegni\nM -> Stato LED");
  
}
 
void loop(){
   
  if (Serial.available() >0) // Controllo se il buffer di ricezione contiene qualcosa 
  {
    rx = Serial.read();      // leggo il carattere ricevuto e lo memorizzo in rx
   Serial.flush();          // svuoto il buffer di ricezione seriale
    if (rx=='A' || rx=='a')  // ho ricevuto la A maiuscola o minuscola
    {
  if (digitalRead(led) == LOW) // il led e' spento
  {
          digitalWrite(led,HIGH);    // lo accendo
          Serial.println("Comando \"A\" -> Ho acceso il LED");
  }
        else
          Serial.println("Comando \"A\" -> Ignorato! Il LED e' acceso!");
    }
    else if (rx=='S' || rx=='s') // ho ricevuto la S maiuscola o minuscola
    {
  if (digitalRead(led) == HIGH) // il led è acceso
  {
          digitalWrite(led,LOW);      // lo spengo
          Serial.println("Comando \"S\" -> Ho spento il LED");
  }
        else
          Serial.println("Comando \"S\" -> Ignorato! Il LED e' spento!");
    }
    else if (rx=='M' || rx=='m') // ho ricevuto la M maiuscola o minuscola
    {
  if (digitalRead(led) == HIGH) // il led era acceso?
          Serial.println("Comando \"M\" -> Stato LED: acceso");
        else
          Serial.println("Comando \"M\" -> Stato LED: spento");
    }
    else // Ho ricevuto un altro carattere
    {
      Serial.print("Comando \"");
      Serial.print((char)rx);
      Serial.println("\" -> Non riconosciuto!");
    }
  }
}

file Excel:
Arduino excel ACCENDE LED.zip (42,7 KB)

@pierost:

... allora, ti è stato detto e ripetuto 100 volte DOVE fare la tua presentazione e di leggere attentamente tutto il REGOLAMENTO (ed in particolare il punto 16.7 che spiega come farla) ... ora, visto che NON vuoi seguire le indicazioni, questa tua discussione (e ogni altra fino a quando non avrai effettuato ciò che ti è stato più volte chiesto) viene chiusa.

Attendiamo che tu faccia quanto richiesto.

Guglielmo

1 Like

@pierost:

Bene, ora che hai fatto la tua presentazione, la discussione è di nuovo aperta ....
... ti prego di NON aprire altre discussioni sullo stesso argomento, ma di continuare in questa.

Grazie,

Guglielmo

Certo

Ma spiega un po' come funzionerebbe lato excel, per adesso solo a parole, che non ho excel a casa
Come direbbe uno che va sui mari del polo sud e a volte torna (e qui qualcuno capirà) io non ho ancora aperto finestre

Quando apri il file ti chiede di attivare una macro , all' intero della macro in VB c' è tutto il codice che apre la seriale e permette di inviare e ricenere i comanti.
Nel foglio Excel a dx della cella " comando" digitare A per accendere led, S per spegnere led, e nella cella sotto ti risponde .....

Mi ero fatto l'idea

Sono in ferie e ho solo il tablet
Ma controllo una cosa e dopo cena ti aggiorno, anche sa scopro di aver sbagliato, da cosa nasce cosa

Grazie Guglielmo, è stata dura ma ... ci vuol pazienzaa.

1 Like

Grazie , gentilissimo!
Fai con comodo.

Allora

Io penso che la cosa sia lato convertitore USB Seriale, pero' certamente bisogna essere sicuri che non sia proprio l'arduino che non si impalla
Io e mio fratello usiamo una funzione chiamata lampex(piedino, tempo) per far lampeggiare autonomamente un led, se smette di lampeggiare sappiamo che Arduino sio e' incatastato

La puoi vedere qui:

Al post 38

Tu basta che la citi dentro nella loop, la metti ad esempio come prima riga

lampex(13,500);

E il led 13 sulla UNO lampeggia ogni mezzo secondo, se smette abbiamo una indicazione per andare avanti

Comunque secondo me il problema e' sul convertitore USB Seriale

Potresti provare a vedere come si comporta senza usare excel, ma spedendo i comandi attraverso il monitor seriale

Ma cosa ha scritto il fratello, ai tempi?

La ho letta bene solo adesso e mi sono reso conto che lampeggia solo ogni 200mS e che il parametro tempo e' praticamente inutile
Fai cosi' che e' meglio:

// per far lampeggiare un led, estemporaneo e senza preventive dichiarazioni di tempi o piedini

void lampex (byte pin, unsigned long int tempo){
   static unsigned long int mytime = tempo;

   if (millis() - mytime >= tempo)
   {
      pinMode(pin, OUTPUT);
      mytime = millis();
      digitalWrite(pin, !digitalRead(pin));
   }
}

Adesso lo dileggio fino a Santo Stefano, lui e tutta la sua sapienza

Ho provato , il led pin 13 lampeggia in tutti i casi e va bene , ma il problema con Excel rimane, dopo lo spegnimento del pc devo scaricare ogni volta lo sketch per mettere in comunicazione Excel e Arduino.

Quindi è un problema a livello di usb

L'unica prova che mi viene in mente è di aprire la seriale invece che nella setup() all'inizio della loop()
E naturalmente chiuderla alla fine con una serial.end()
Sperando che le successive riaperture resettino la usb e non incasinino su tutto

Inoltre prova, invece di ricaricare il programma a fare solo un reset HW dal pulsante
Tutto fa imparare