[Risolto] Blinking LED impossibile sotto 1 secondo di delay

Salve a tutti sono nuovo, mi sono appena presentato e ho un piccolo problema/dubbio che sicuramente voi potete chiarirmi.

Mi sono avvicinato ad Arduino da zero ma con un background di C# .Net e vorrei crescere di pari passo sfruttando appunto il C# come mezzo per esercitarmi nella programmazione ma sfruttando Arduino come mezzo di interfaccia per attuatori e sensori.

Volendo partire da zero, per rispolverare anche le basi di elettronica di anni fa, mi sono lanciato nella primissima classica esercitazione del LED che blinka spostando però tutta la gestione nella Windows Form.

Lo sketch Arduino è solo in loop di ascolto sulla seriale e se riceve "on" come stringa accende il LED, se riceve "off" lo spegne. E fin qui tutto regolare, con i rispettivi bottoni sotto Windows funziona tutto.

Poi c'è il pulsante che manda il blink ... ovvero "on" e dopo un secondo "off" e dopo un secondo "on" ciclando n volte. E anche qui tutto sembra funzionare ... MA ...

Se scendo anche di un millisecondo trasmettendo sulla seriale ogni 999ms ... non funziona nulla.

Oltre un secondo (2,3,4,5, ... 100) tutto funziona regolarmente.

Ho provato anche ad aggiungere un delay di debounce come visto in giro anche di 200ms ... ovviamente nella parte Arduino ... ma niente, sotto 1 secondo non funziona.

Il delay sotto Arduino impostata anche a 200ms ovviamente non da problemi, ma comandato da PC non reagisce nonostante il led RX blinki ad ogni impulso come se effettivamente lo ricevesse ... mail led esterno o onboard non reagiscono.

Sapete dirmi se è normale, se ho sbagliato io qualcosa, o se c'è qualche accorgimento da utilizzare?!

Ho provato sia sul pin 13 che 12 per controllare anche il led onboard oltre a quello esterno, ma nulla ... sotto un secondo nulla.

Nel dubbio ho portato anche a 112500 il baud anche se mi sembrava azzardato, ma di nuovo nulla.

Se avete suggerimenti o soluzioni ve ne sarei grato, sto cercando di approfondire anche la parte elettronica dei componenti e probabilmente mi sfugge qualcosa di banale ...

Mi sembra che il problema si possa ricondurre alla trasmissione seriale, forse a lato PC occorre un tempo per la trasmissione.
Vorrei farti notare che inviare le stringhe "on" e "off" hanno un significato solo "umano", per arduino in questo caso sono solo due stati, sono solo due valori diversi, otterresti lo stesso risultato inviando due singoli caratteri, semplificando il codice, ma semplificare non significa inferiore se la complessità di un codice è assolutamente inutile.

ciao,

senza vedere il codice, lato arduino, si può solo teorizzare.

fai uso di delay?

in che formato passi "on" ed "off"...in Arduino gli Oggetti String sono da evitare...quindi od usi array di char o passi una stringa di comando formattata tipo byte inizio, byte data, byte fine...giusto per avere un controllo del flusso.

ciao

psydis:
Il delay sotto Arduino impostata anche a 200ms ovviamente non da problemi, ma comandato da PC non reagisce nonostante il led RX blinki ad ogni impulso come se effettivamente lo ricevesse ... mail led esterno o onboard non reagiscono.

A naso direi errore nel codice da qualche parte. Posta i codici, sia arduino che lato pc.

P.s. ma hai provato debug su arduino, stampare su serial monitor come viene tradotto il valore che spedisci ?

Rieccomi, grazie a tutti per la risposta ... alla fine ho risolto stamattina e ciò che mi scrivete è una riprova del perchè la soluzione sia corretta.

torn24:
otterresti lo stesso risultato inviando due singoli caratteri

ORSO2001:
String sono da evitare

nid69ita:
ma hai provato debug su arduino, stampare su serial monitor come viene tradotto il valore che spedisci ?

Lo sketch si riduceva grosso modo ad un operatore ternario per cui se riceveva "on" accendeva il led altrimenti lo spegneva. Quindi tutto il delay proveniva da un thread asyc in C# che a video funzionava bene, ed era ok anche a livello di "Serial Monitor" dell'APP per cui mi scriveva in una Textbox cosa inviavo e cosa riceveva e ritrasmetteva Arduino.

Tutto sembrava corretto, a parte il fatto che se davo al thread in C# meno di un secondo il led non blinkava.

A conti fatti era tutto un problema di gestione della modalità corretta di lettura della Serial da parte di Arduino in prima istanza e alla fine ho passato un solo carattere perchè, come mi avete sottolineato, la stringa è inutilmente pesante e gestita "peggio" da Arduino che viaggia con segnali veloci.

E nulla, ho fatto il grosso errore di non capire subito che lo sketch base da cui mi sono ispirato per il primo programma in C# era fallato in partenza nella parte Arduino, nonostante fosse di 10 righe!! Soltanto un metodo di Serial errato nella lettura mi ha fatto penare per la velocità di risposta!!

Comunque grazie davvero perchè ora mi sono chiare cose fondamentali per il futuro ... da un errore banale ho imparato tante piccole cose per sviluppare meglio l'intefacciamento!!!

-- Devo segnare il post corrente come risolto? Lo fa un admin? Scusate ... è il primo che apro e non so le consuetudini del posto!!!

Puoi modificare il tuo primo post, aggiungi tu [Risolto]

nid69ita:
Puoi modificare il tuo primo post, aggiungi tu [Risolto]

Ottimo!!! Fatto, grazie!!