Perchè Arduino è di così semplice utilizzo ?

Cito da Wikipedia:

"Con Arduino si possono realizzare in maniera relativamente rapida e semplice piccoli dispositivi come controllori di luci, di velocità per motori, sensori di luce[...]"

Mi chiedevo, che cos'è che rende Arduino così semplice e intuitivo ?
Il suo IDE forse ?

Perchè in fin dei conti si tratta di c++ (se non vado errato) e non dovrebbe essere poi così intuitivo

"così semplice e intuitivo" in realtà è ingannevole, perchè non è proprio vero e lo vedi dall'80% dei post.
E' semplice perchè è ben documentato, trovi praticamente tutto e se non sai fare una cosa e ti va bene quello che trovi in rete è fatta, ma se non sai nulla modificarlo per adattarlo alle proprie esigienze divento un po' meno intuitivo. C'è da studiare molto.
La condivisione e il forum lo rendono più semplice, il progresso è molto più rapido, ma a parer mio non intuitivo.

Ciao Pablos !

Rispetto al c++ è più semplice imparare il linguaggio Arduino ?

Ti sto parlando da neofita che ha, davvero da pochissimo, cominciato a usare Arduino e sinceramente penso che la semplicità di arduino stia nel suo "tutto in uno" ovvero si ha un ambiente di sviluppo con un suo ecosistema.

Domanda magari stupida, ma è possibile rogrammare arduino con un qualsiasi IDE per c++ ?

Non sono mai uscito dall'ambiente IDE arduino visto che fornisce già l'occorrente con le sue lib, so che ci sono altre piattaforme di programmazione, insomma conoscendo il datasheet del micro, il suo bootloader puoi programmarlo anche in assembler e linguaggio macchina, però qui si parla di "chirurgia" ad alti livelli che ti consente di sfruttare al massimo e nei minimi particolari l'oggetto.
Il c++ qui è un po' più semplificato però preferisco che i dettagli te li dia qualche utente che usa il C da molto tempo più di me.

Io non sono d'accordo con il fatto che Arduino sia "semplice" in maniera assoluta. Anzi, questa pubblicità che spesso gli viene fatta è ingannevole, a mio avviso, ed è la causa principale per cui un sacco di gente viene qua quotidianamente con la famosa Sindrome di Gundam. Gente che senza avere la benché minima conoscenza di informatica, né di elettronica, pensa di poter costruire un robot che gioca a pallone mentre suona la chitarra in quattro e quattr'otto. Di per sé non sarebbe nemmeno un problema, sono del parere che, studiando e applicandosi, chiunque possa raggiungere qualunque risultato, ma purtroppo un sacco di gente si fa un'idea sbagliata e nonappena gli si suggerisce di impiegare un po' di tempo a fare proprie le nozioni basilari, sbotta e continua ad essere convinta di poter ottenere quanto desiderato copiando e incollando assolutamente a caso cose di cui non ha la benché minima comprensione.

Morale: come dice pablos, l'80% dei thread qua sono tutti uguali, trattano di quelle che alla fine sono baggianate (qualcuno ha detto millis()?) ma dopo pochi post cadono nel dimenticatoio, senza che nessuno concluda alcunché. Certo, ci sarebbe da studiare un po' di più questo fenomeno, perché io non mi sono mai sognato di poter fare bene qualcosa senza la dovuta applicazione, costanza e pazienza, ma vabbeh, poi diventiamo OT.

Trovo piuttosto che Arduino eccella nel permettere a chi ha una mente "matematica" e un minimo di conoscenze di programmazione software di passare facilmente e rapidamente a programmare hardware e a fare cose anche abbastanza complesse. Tutto questo è permesso da quanto già detto da pablos, ovvero ampia documentazione, strumenti semplici ma potenti al punto giusto, enorme numero di librerie, ma anche il fatto di rendere la gestione dell'hardware più simile a quanto si farebbe in un'applicazione di alto livello, invece che a quanto è solito fare chi smanetta quotidianamente con firmware e hardware. Intendo che:

pinMode (2, OUTPUT);
digitalWrite (2, LOW);

è immediatamente comprensibile ed intuitivo per chiunque abbia visto un minimo di C, sicuramente più di:

DDRD |= (1 << PD2);
PORTD &= ~(1 << PD2);

Mi spiego? E se dovessimo darci a cose più complesse come la lettura dell'ADC o la trasmissione SPI/i2c il paragone sarebbe ancora più sbilanciato. Ma il bello è che, una volta che ci si è avvicinati all'hardware tramite questa semplificazione, chi vuole è libero di scavare in profondità e arrivare alla forma più complessa, facendo il tutto in maniera graduale e intuitiva, invece che trovandosi fin dall'inizio di fronte a una montagna da scalare.

A riprova di questo, posso dire che, pur essendo ingegnere informatico con spiccate propensioni al basso livello, nonché programmatore "senior" di lavoro e, ormai, smaliziato arduinista, pur conoscendo diversi linguaggi di alto e medio livello, oltre che diversi assembly, ancora non sono riuscito a scrivere un programma stupido come il Blink per PIC, sebbene ci abbia provato più volte. Lì è tutto dannatamente complicato e prima di arrivare a fare anche le cose più semplici occorrono settimane di studio e tentativi. Quando ho iniziato con Arduino, in 2 settimane avevo scritto un webserver.

Vabbeh, forse ho divagato un po'...

Puoi usare l'IDE che vuoi, ma alla fine devi dare i sorgenti in pasto al compilatore di Arduino.

giopere:
Perchè in fin dei conti si tratta di c++

Arduino usa un subset del C++
distillato per supportare gli oggetti
e poco altro, allo scopo
di essere il + semplice possibile
e di impattare il meno possibile
sulle poche risorse hw

Questo non è strettamente vero, il compilatore supporta l'intero C/C++, e ci sono anche alcuni port della STL, per cui di per sé si potrebbe fare qualunque cosa prevista dal linguaggio, niente obbliga a fermarsi al "subset" che dici.

Ovviamente, se poi vuoi che il tuo programma giri, e bene, in un ambiente in cui le risorse sono estremamente ristrette, allora sei tu programmatore che ti devi autolimitare, usando la tua esperienza e conoscenza, soppesando accuratamente ogni decisione progettuale per scegliere le soluzioni migliori per l'implementazione del software nello specifico ambiente target, resistendo alla tentazione di usare strumenti magari più comodi, ma per questo anche più pesanti. Ma questo è un principio assoluto di software engineering, che in ambito MCU trova forse la sua applicazione più esasperata, di cui gli unici che non si rendono conto sono i programmatori Java, che se non si tirano dietro qualche dozzina di framework e se non fanno partire almeno 25 thread per ordinare 4 numeri non sono contenti :D.

SukkoPera:
niente obbliga a fermarsi al "subset" che dici

non consideri una cosa importante: se lo fai
rischi di rompere la compattibilita' verso il codice esistente
oltre che alle varie guide, che poi e' alla fin fine
il vero vantaggio di usare Arduino

cioe', se vuoi il C++ full feature nulla ti vieta di farlo
il compilatore sotto e' gia' C++ full features di suo
a mio parere si pone pero' un problema diverso: di convenienza

ti conviene farlo? secondo me di fatto … ha piu' senso
uscire del tutto dall'ecosistema Arduino e usare AVRStudio
oppure gestire i sorgenti (e le dipenze infra modulo)
da Makefile, senza il syntactic sugar e le varie carinerie
gentilmente offerte della retrovie dell'IDE Arduino

le exception invece sono proprio un tabù per l'embedded
su quello poco ci si puo' fare, se non … passare
addiritittura al C++11/14 (almeno sono nothrow)

Francamente non capisco il tuo discorso: come può un mio sketch diventare incompatibile con una libreria esistente solo perché decido di usare una particolare feature del C++ che solitamente non viene usata?

Ovviamente se solitamente non viene usata ci saranno delle buone ragioni e sarebbe bene seguirle, ma perché dovrebbero esserci addirittura problemi di compatibilità?

Non capisco nemmeno il discorso sulla convenienza, boh. Anche sto syntactic sugar alla fine non è che sia granché: a parte la generazione automatica dei prototipi, che comunque non sono abituato ad usare (anzi, personalmente la odio, crea più problemi che altro, vedi tutti i casini con gli #include che c'erano fino all'introduzione del nuovo builder), cos'altro c'è?

Infine non sono un particolare fan delle eccezioni e tendo a non usarle in generale, se posso farne a meno (non in Java, eh eh eh), ma anche qua non vedo quali enormi problemi potrebbe causare il loro utilizzo nell'embedded. In ogni caso il compilatore le supporta, se anche poi fosse davvero bene evitarle si tratta di una delle "autolimitazioni" a cui accennavo prima.

Arduino viene programmato tramite un framework che si chiama wiring, è questo a rendere relativamente semplice l'impatto col C++, wiring crea un'interfaccia amichevole grazie ad una serie di funzioni e oggetti pronti all'uso, sommando a questo l'enorme quantità di librerie esistenti per Arduino ecco che la creazione di una vasta gamma di eseguibile diventa veloce anche per chi non ha molta dimestichezza con le mcu.
Arduino si può programmare anche in C puro, soluzione migliore possibile per le piccole mcu 8 bit, tramite l'IDE ufficiale di Atmel, ovvero Atmel Studio, cosa che permette di ottenere il massimo possibile come prestazioni, per contro diventa tutto più complesso e ci vuole più tempo per scrivere il codice.

Riassumendo si potrebbe dire che il progetto Arduino più che semplice è estremamente comodo nel suo insieme hardware e software, un po' come un ambiente RAD in programmazione.

Abbiamo una scheda già pronta alimentabile/gestibile da comune USB, una MCU con bootloader già a bordo, un IDE che fa anche da editor e loader, e wiring che permette semplificazioni immediate come digitalWrite(m, n) senza "esporre" l'utente a nessuna complessità sottostante.

Ma se uno non sa programmare (sia lato MCU che lato PC) non è affatto semplice da usare (a meno di non copiare qualcosa di già fatto e stop).

SukkoPera:
non sono un particolare fan delle eccezioni

nemmeno io sono fan dei "goto" che trovo
non mi piacciono perche' sono inclini a errori

del resto in C non esiste alcuna espressione
linguistica migliore a gestirli, si fa quel che si puo'

mentre in C++ le exception ci sono, pero' …
… hanno stack unrolling vero e proprio,
cosa per altro non deterministica, e che richiede
runtime support (non basta che il compilatore
li supopporti, serve un po' di glue melt)

due motivi per cui nell'embedded sono disabilitate

e segno che serve un nuovo linguaggio, o una revisione
massiccia del C++, speranza verso C++11/14/17

Benissimo, sto cominciando ad assorbire il concetto.
Non ho basi di programmazione alle spalle, ma con un filo di ragionamento riesco a comprendere qualche riga di codice.

Una cosa che non sapevo era il fatto del wiring, infatti fino ad ora pensavo esistesse solo IDE e compilatore. E pensavo anche che quello che ora ho scoperto essere il wiring fosse compito dell'IDE.

Infatti ciò che credevo era
"Arduino è più semplice rispetto ad altri sistemi perchè oltre ad essere un ecosistema completo con tanto di interfacce pronte all'uso, gli sviluppatori hanno anche scritto un ottimo IDE per semplificare le funzioni"

Non dovrei essere andato tanto distante dalla forma corretta, o sbaglio ?
Ora posso dire che è più semplice grazie alle librerie + wiring che tutti insieme forniscono l'IDE Arduino

Correggetemi se necessario

Ricordati del forum...
Senza questo forum, tanti resterebbero fermi alle prime difficoltà.

Aggiungo anche una considerazione. Immagina di dover costruire qualcosa basato su un Atmel ATMEGA328 senza che esista Genuino, dovresti essere esperto sia di informatica per programmarti il fw che esperto di elettronica per costruire tutto il circuito. Grazie a tutto l'ecosistema Genuino (comunità, IDE, librerie per qualsiasi cosa, shield per tutto, gli schemi di Pighi, ...), riesci ad ottenere buoni risultati anche se sei esperto soltanto di informatica o soltanto di elettronica e riesci ad ottenere comunque qualcosa di decente anche se sei un principiante in entrambi i settori.

Ovviamente poi ci sono anche quelli che appena riescono a fare lampeggiare il LED iniziano a preparare il progetto per l'ultradomotica con lo sciacquone del cesso comandato via app per smartphone, ma si rendono presto conto del fatto che è necessario passare per le altre tappe intermedie!

paulus1969:
Ricordati del forum... Senza questo forum, tanti resterebbero fermi alle prime difficoltà.

Quando non c'erano i forum, internet era ancora un segretissimo progetto militare, e i comuni mortali più fortunati si collegavano a 1200 bit al secondo, c'erano le riviste a "diffondere il verbo" :wink:

Aggiungo anche una considerazione. Immagina di dover costruire qualcosa basato su un Atmel ATMEGA328 senza che esista Genuino, dovresti essere esperto sia di informatica per programmarti il fw che esperto di elettronica per costruire tutto il circuito.

Vero, una volta era la norma acquisire prima buone competenze in elettronica per arrivare poi alla microinformatica. C'è da dire che il passaggio dall' Altair al "PC windows" è stato relativamente breve rispetto alla durata delle generazioni umane, per cui solo che è nato prima degli anni 70 ha potuto conoscere la rivoluzione informatica e il "vecchio modo di procedere/studiare"...

Il rovescio della medaglia è che con le board attuali "assiemate" con le informazioni carpite dai tutorial e progetti in rete, non si ha più la percezione di "cosa gira sotto" e quindi non se ne ha il totale controllo...

Claudio_F:
si collegavano a 1200 bit al secondo,
c'erano le riviste a "diffondere il verbo" :wink:

e le testate erano ottime!

ricordo Dr. Dobb's ed Electronics World
ma anche Byte Magazine ci dava dentro

oggi hanno perso smalto proprio per via
di internet ed annessi, perche' nessuno
o cmq pochi, sono disposti a pagare per
poche pagine quando a gratis hanno Mb
di roba da "tirare giu' dalla rete"

Anche io sono un nostalgico delle vecchie care riviste.
Il forum ovviamente ha il vantaggio della immediata interazione, ai tempi delle riviste c'era la rubrica della posta ma spedivi la lettera (via posta appunto) e dopo tre mesi leggevi la risposta. Però la risposta era (nelle riviste serie) quasi sempre autorevole e rimaneva valida per anni. Ricordo che la prima cosa che leggevo era proprio la rubrica della posta. L'ideale sarebbe rivista autorevole (trovi di tutto in rete ma trovi molte bestialità) + forum associato. Esistono ancora, comunque, le riviste.

Claudio_F:
Il rovescio della medaglia è che con le board attuali "assiemate" con le informazioni carpite dai tutorial e progetti in rete, non si ha più la percezione di "cosa gira sotto" e quindi non se ne ha il totale controllo...

Dipende da quanto ti interessa sapere cosa gira sotto.
Se usi l'automobile per andare a fare la spesa, puoi ignorare del tutto come funziona la centralina. Se vuoi farti una elaborazione, allora dovrai per forza saperlo.
Prendi un appassionato di elettronica che se la cava così così con la programmazione. Potrà ampliare di molto le proprie possibilità senza per forza dover sapere come si scrive la libreria per il touchscreen.
Ma prendi anche un esperto che vuole realizzare rapidamente un prototipo, sarà in grado di realizzare e progettare tutto per la successiva eventuale fase di pre-serie e serie, ma prototiperà molto rapidamente grazie alle semplificazioni di cui abbiamo parlato, infatti troverà molte schedine a basso costo già pronte che esistono solo grazie al fatto che la semplificazione ha favorito la diffusione presso un più ampio pubblico.