Salve alla community tutta di arduino. Mi presento, sono nuovo del forum arduino. Spero possiate darmi assieme al benvevuto anche un supporto ad un problema che mi tormenta. Ed è il seguente. Vorrei programmare la scheda arduino nel linguaggio C++, che nel mio caso è il mega2560. Quindi poter comunicare e anche solo accendere il led del pin 13. Ho già programmato arduino con IDE-arduino, labview, e matlab. tuttavia è davvero importante farlo anche in C++ per il mio lavoro. Ho installato Visual studio 2019, visual C++, visual mcro e vorrei usare questi ambienti per controllare l'arduino in C++. Sarei grato a tutti se mi poteste scrivere il più semplice codice in C++ per far accendere un led di arduino. Forse devo scrivere un file in C++ e poi importare la libreria arduino, ma come si fa? Suggeritemi in modo semplice e chiaro come riuscire in questo
Per favore a tutti aiutatemi con un semplicissimo esempio...
Grazie a tutti
Ho già provato a sviluppare un file.cpp e poi inserire il file header #include"Arduino.h", ma mi da errori, tipo :
Gravità Codice Descrizione Progetto File Riga Stato eliminazione
Errore (attivo) E1696 impossibile aprire il codice errore "WProgram.h" del file origine ConsoleApplication1 C:\Users\Asus-pc\source\repos\Sketch2\Sketch2.h 9
Errore (attivo) E1696 impossibile aprire il codice errore "util/delay.h" del file origine ConsoleApplication1 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\USBAPI.h 27
Errore (attivo) E1696 impossibile aprire il codice errore "pins_arduino.h" del file origine ConsoleApplication1 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\Arduino.h 258
Errore (attivo) E1696 impossibile aprire il codice errore "avr/pgmspace.h" del file origine ConsoleApplication1 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\Arduino.h 28
Errore (attivo) E1696 impossibile aprire il codice errore "avr/pgmspace.h" del file origine ConsoleApplication1 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\USBAPI.h 24
Errore (attivo) E1696 impossibile aprire il codice errore "avr/pgmspace.h" del file origine ConsoleApplication1 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\WString.h 29
Errore (attivo) E1696 impossibile aprire il codice errore "avr/io.h" del file origine ConsoleApplication1 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\Arduino.h 29
Errore (attivo) E1696 impossibile aprire il codice errore "avr/interrupt.h" del file origine ConsoleApplication1 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\Arduino.h 30
Errore (attivo) E1696 impossibile aprire il codice errore "avr/interrupt.h" del file origine ConsoleApplication1 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\USBAPI.h 26
Errore (attivo) E1696 impossibile aprire il codice errore "avr/eeprom.h" del file origine ConsoleApplication1 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\USBAPI.h 25
Buongiorno e benvenuto,
prima di tutto ti segnalo che, in conformità al REGOLAMENTO, punto 13, il cross-posting è proibito (anche tra lingue diverse) per cui, il tuo post duplicato nella sezione Inglese del forum (post per di più con una frase finale scritta in Italiano, cosa NON permessa) è stato cancellato.
Detto questo, NON avendolo tu ancora fatto, ti chiedo cortesemente di presentartiIN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto ) e di leggere con MOLTA attenzione il REGOLAMENTO. Grazie
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto.
claudioc65:
... Vorrei programmare la scheda arduino nel linguaggio C++, che nel mio caso è il mega2560. Quindi poter comunicare e anche solo accendere il led del pin 13. Ho già programmato arduino con IDE-arduino ...
Perdona, ma ... vedo un controsenso ...:
Se, come scrivi, hai già programmato Arduino con il suo IDE, beh ... allora hai già programmato Arduino in C++ dato l'IDE è solo un ambiente di lavoro come ce ne sono tanti, mentre il linguaggio che si usa è il C++
Programmando nellambiente nativo di Arduino, viene messo a disposizione un "framework" chiamato wiring, le cui funzioni trovi nel reference ed una seri di librerie native, al 95% scritte in C++, quindi ? ? ?
Se tu invece vuoi solo usare un altro ambiente di sviluppo, sempre in C++, dovrai studiarti l'ambiente e, se intendi fare uso dello stesso framework wiring (e quindi usare le funzioni che ti facilitano la vita), vedere di capire come importare il "core" Arduino che le contiene. Però se poi parli di VisualMicro ... evidentemente NON lo hai configurato bene perché, a queste cose, pensa appunto l'add-on VisualMicro.
Buongiorno innanzitutto Guglielmo, ti ringrazio della tua cortesia. Da tempo cercavo un esperto come te.
Evedentemente nell’esporre le mie preoccupazioni, sono stato incerto nelle mie richieste di supporto.
Cercherò di essere più esauriente.
Si ho programmato Arduino bene anche con Matlab con successo. Il problema è stato quando ho cercato di implementarlo in C++ in ambiente Visual C++ con l’Add-on Visual Micro.
Sostanzialmente il mio obbiettivo è scrivere un normalissimo programma in C++, quindi con tutte le funzioni e librerie di cui dispone il C++ e in aggiunta usare le funzioni prettamente di Arduino all’occorrenza. E alla fine compilare il tutto generando un file.cpp funzionante.
Per esempio scrivere:
Un codice in C++ di questo tipo:
“ #include #define namespace std;
int main()
{
Int x,y,z;
z=x+y;
cin>>x,y;
If(z>3)
digitalWrite(13,HIGH);
std::cout << z;
.
.
.return 0;
”
L’ IDE di Arduino come anche Visual Micro mi creano un file.ino, lo sketch, che non mi è utile per il mio obbiettivo.
In matlab sono risucito a “mescolare”, passami questo termine, sia le funzioni matlab che quelle di Arduino. Ciò mi ha consentito di sviluppare un script tale che potessi comunicare contemporaneamente sia con Arduino che con l’analizzatore vettoriale di rete; stesso ho ottenuto in LabVIEW. Questo è il motivo per cui ho necessità di programmare solo in C++. Quando ho provato a compilare in C++ con visual C++, inserendo la libreria #include <Arduino.h> o anche inserendo il percorso dove sono locate le librerie arduino #include “C:\...\Arduino.h”
mi segnala la mancanza di altre librerie:
Gravità Codice Descrizione Progetto File Riga Stato eliminazione
Errore (attivo) E1696 impossibile aprire il codice errore "avr/pgmspace.h" del file origine ConsoleApplication2 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\Arduino.h 28
Errore (attivo) E1696 impossibile aprire il codice errore "avr/io.h" del file origine ConsoleApplication2 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\Arduino.h 29
Errore (attivo) E1696 impossibile aprire il codice errore "avr/interrupt.h" del file origine ConsoleApplication2 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\Arduino.h 30
Errore (attivo) E1696 impossibile aprire il codice errore "pins_arduino.h" del file origine ConsoleApplication2 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\Arduino.h 258
Errore (attivo) E1696 impossibile aprire il codice errore "avr/pgmspace.h" del file origine ConsoleApplication2 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\USBAPI.h 24
Errore (attivo) E1696 impossibile aprire il codice errore "avr/eeprom.h" del file origine ConsoleApplication2 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\USBAPI.h 25
Errore (attivo) E1696 impossibile aprire il codice errore "avr/interrupt.h" del file origine ConsoleApplication2 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\USBAPI.h 26
Errore (attivo) E1696 impossibile aprire il codice errore "util/delay.h" del file origine ConsoleApplication2 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\USBAPI.h 27
Errore (attivo) E1696 impossibile aprire il codice errore "avr/pgmspace.h" del file origine ConsoleApplication2 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\WString.h 29
Quindi, come suggerisci, l’obbiettivo è capire come importare il "core" Arduino che le contiene.
Magari, se tu potessi offrirmi una semplice soluzione
Grazie
Claudio
Avevo già capito il problema che incontri, ma quello che NON capisco è perché non ti va bene VisualMicro ... :
Se è per integrarti con MathLab o LabView, ci sono un'infinità di esempi di come farlo anche solo dall'IDE di Arduino, altrimenti chiariscimi perché non vuoi usare un qualche cosa che ti aggiusta automaticamente le cose andando incontro a svariate difficoltà e, di sicuro, ad un codice decisamente peggio ottimizzato.
cosa ti aspetti che faccia un programma compilato in Visual C++ messo poi su un Arduino che non ha tastiera/monitor ?
cin e cout NON hanno senso per un programma che gira su Arduino, mica è un pc
Arduino IDE e VisualMicro sanno analizzare il file ino e poi vanno a cercare il core (che è tutto in sorgente NON compilato) anche in base alla board. Sono automatismi fatti da quei IDE/Plugin.
Con il Visual C++ crei un progetto e TU devi indicargli tutte le librerie che ti servono. Lui non analizza nulla.
Arduino IDE e VisualMicro in base alla board compilano usando il giusto compilatore e linker per ottenere NON un .EXE o .DLL ma un file eseguibile per la giusta Board. Il Visual C++ da solo che ne sa ?
se invece da un programma che gira su PC vuoi comunicare con una scheda Arduino Mega allora è tutta un'altra questione.
Un PC mica vede l'Arduino collegato come se fosse una sua periferica. Al massimo vede la usb/seriale e tramite quella comunichi (comunicazione seriale) mettendo su Arduino uno sketch che risponde ai comandi che riceve da seriale (creando un tuo protocollo/comandi).
Eventualmente un protocollo esiste già e si chiama Firmata.
gpb01:
Avevo già capito il problema che incontri, ma quello che NON capisco è perché non ti va bene VisualMicro ... :
Se è per integrarti con MathLab o LabView, ci sono un'infinità di esempi di come farlo anche solo dall'IDE di Arduino, altrimenti chiariscimi perché non vuoi usare un qualche cosa che ti aggiusta automaticamente le cose andando incontro a svariate difficoltà e, di sicuro, ad un codice decisamente peggio ottimizzato.
Guglielmo
Ciao Gugliemo, grazie del tuo support. Spero di poter in qualche modo spiegare meglio la mia situazione.
Mi sono dilungato nell’esporre il mio problema per essere sicuro di non dare niente di scontato. In merito al VisualMicro chiarisco che per programmare l’arduino, va benissimo. Ma, se così posso dire, è un clone dell’IDE Arduino all’interno di Visual Studio, inoltre il file che produce è dello stesso tipo di quello che genera l’IDE Arduino, cioè un file.ino. Ma non è quello che mi serve per il mio lavoro. Intanto, lo sviluppo del codice in C++ per comandare l’ardunio nell’ambito della mia richiesta non è connesso nè a MatLab nè a LabView. Quello che ho descritto nel contesto di Matlab era solo per far comprendere, dato l’esempio, come si potesse integrare lo script di Matlab con i comandi arduino. Per essere ancora più esplicativo, dopo aver installato in Matlab il supporto per Arduino, con questo semplice script riesco a inserire sia comandi matlab sia funzioni di arduino, magari per attivare un led a seguito di un’istruzione di controllo.
Un semplice esempio: “x=3; y=5; z=x+y; writeDigitalPin(a, 'D13', 1); “
Quindi cercando di sviluppare in C++ un codice equivalente a quello prodotto in matlab, vorrei sapere come sia possibile produrre un semplicissimo programma in C++ che sia costituito sia da semplici funzioni in C++ sia da quelle prettamente di arduino. Magari con un esempio spiego meglio. Si supponga di creare un programma che mi accenda il led del pin 13 di arduino se l’istruzione di controllo desse esito true:
“ #include #include
using namespace std;
int main()
{
Int x,y,z; z=x+y;
cin>>x,y; If(z>3) // ß istruzione di controllo dà esito positivo
digitalWrite(13,HIGH); // ß allora il led del pin 13 si illumina
std::cout << z; // ß stampa sul prompt dei comandi il risultato
return 0;
}
”
Questo esempio rende l’idea di quello di cui ho necessità di sapere.
Quindi non chiedo qualche cosa (VisualMicro) che mi aggiusta automaticamente le cose se poi si limita solo a generare uno sketch, un file.ino che va bene solo per Arduino.
Vorrei sapere come sviluppare un programma in C++ e prendere a prestito una delle funzioni di Arduino da inserire all’interno delle righe di codice C++ per attivare alcuni pin. Quindi non dovrebbe essere un programma ad uso esclusivo di Arduino ma con Arduino. Tutto qui.
Se non sono stato esauriente ti chiedo di non esimerti dal farmi altre domande.
Probabilmente non ti è per nulla chiaro qual'è la catena di operazioni che consentono di generare un codice compilato per qualsiasi tipo di piattaforma a partire da un codice sorgente.
Confondi l'ambiente di sviluppo (Arduino IDE e Visual Studio) con quella che viene definita "toolchain" e che si compone di diversi step.
In Arduino IDE cosi come in VisualMicro, o ancora con Platformio questa toolchain viene "configurata" dall'installer che mette tutti i pezzi al posto giusto.
Farlo con un tool di sviluppo "generico" come Visual Studio 2019, implica che devi fare tutte le configurazioni manualmente (che poi non capisco proprio perché questo "obbligo" di usare Visual Studio).
cotestatnt:
... Farlo con un tool di sviluppo "generico" come Visual Studio 2019, implica che devi fare tutte le configurazioni manualmente (che poi non capisco proprio perché questo "obbligo" di usare Visual Studio).
Concordo al 100% ... anche perché non è che basta mettere assieme i vari pezzi di sorgente (che, essendo open source, sono tutti disponibili ... li trovi dentro alle varie cartelle all'interno di Arduino IDE), ma occorre metterli assieme in un certo modo, passando i dovuti parametri che ogni cosa si aspetta, usando il compilatore adatto alla MCU usata (il compilatore che compila per Arduino UNO NON è lo stesso che compila per Arduino DUE) e così via.
Io ho fatto questa cosa con MPLAB X di Microchip, ma l'ho potuto fare per una serie limitata di MCU AVR perché, per quelle, rendono dispoonibili, oltre i loro (vd. XC 8 ), gli stessi strumenti che usa Arduino IDE (la toolchain Atmel, gcc, ecc), senza i quali NON si va da nessuna parte.
cosa ti aspetti che faccia un programma compilato in Visual C++ messo poi su un Arduino che non ha tastiera/monitor ?
cin e cout NON hanno senso per un programma che gira su Arduino, mica è un pc
Arduino IDE e VisualMicro sanno analizzare il file ino e poi vanno a cercare il core (che è tutto in sorgente NON compilato) anche in base alla board. Sono automatismi fatti da quei IDE/Plugin.
Con il Visual C++ crei un progetto e TU devi indicargli tutte le librerie che ti servono. Lui non analizza nulla.
Arduino IDE e VisualMicro in base alla board compilano usando il giusto compilatore e linker per ottenere NON un .EXE o .DLL ma un file eseguibile per la giusta Board. Il Visual C++ da solo che ne sa ?
se invece da un programma che gira su PC vuoi comunicare con una scheda Arduino Mega allora è tutta un'altra questione.
Un PC mica vede l'Arduino collegato come se fosse una sua periferica. Al massimo vede la usb/seriale e tramite quella comunichi (comunicazione seriale) mettendo su Arduino uno sketch che risponde ai comandi che riceve da seriale (creando un tuo protocollo/comandi).
Eventualmente un protocollo esiste già e si chiama Firmata.
Ciao nid69ita, ti ringrazio di partecipare alla discussione di fornire il tuo aiuto.
Certamente sono consapevole che Arduino non è un PC, tant’è che desidero solo saper come attivare un pin a seguito di un’istruzione di controllo in C++. cin e cout sono per il prompt di comando. Per questo ti riporto a quanto ho risposto a Gugliemo.
È vero, analizzano il file.ino ma non mi è utile a risolvere il mio problema. A proposito delle librerie, mi stai dicendo che è possible far girare un programma in C++ e controllando anche Arduino, inserendo un file header tipo #include<Arduino.h> per risolvere il problema? Ho già provato e richiede altre librerie che non so dove reperire e che ho anche indicato all’inizio del post.
Il problema è proprio questo, cioè si limitano solo a compilare un file.ino che è ad uso esclusivo di arduino.
Si infatti, da un programma in C++, magari un file.exe, vorrei comunicare con la scheda per accendere un led. Sostanzialmente, vorrei sapere come sviluppare un programma in C++ e prendere a prestito una delle funzioni di Arduino da inserire all’interno delle righe di codice C++ per attivare alcuni pin. Quindi non dovrebbe essere un programma ad uso esclusivo di Arduino ma con Arduino. Tutto qui.
Comunque, pare che tu abbia centrato il problema: saper creare una (comunicazione seriale) con Arduino (creando un tuo protocollo/comandi).
Riprendendo l’esempio precedente, dovrebbe essere di questo tipo
“ #include #include
using namespace std;
int main()
{
Int x,y,z; z=x+y;
cin>>x,y; If(z>3) // ß istruzione di controllo dà esito positivo
// (comunicazione seriale) con Arduino (protocollo/comandi). //Serial.begin()……
digitalWrite(13,HIGH); // ß allora il led del pin 13 si illumina
std::cout << z; // ß stampa sul prompt dei comandi il risultato
return 0;
}
”
Un esempio semplice sarebbe gradito.
Grazie
... devi usare DUE programmi, un interprete di comandi che scrivi TU su Arduino e che comunica con il PC ed un programma su PC, che scrivi sempre TU e che manda dei comandi ad Arduino.
Che poi è quanto ti era stato già indicato da nid69it ... già pronto si chiama "Firmata".
Confermo e sottoscrivo quanto detto da cotestatnt e gpb01. Aggiungo che riuscendo a configurare VS in modo da usare la toolchain (compilatore incluso) giusta per l'architettura hardware non è detto che questa supporti cin e cout ecc. Per certezza con il cross compiler avr-gcc e la toolchain avr puoi scrivere codice c++ ma non puoi usare la libreria standard c++.
Qui puoi trovare info per configurare VS con la toolchain avr, tuttavia io non ho VS o VM e neanche windows.
Per quanto invece riguarda le librerie arduino da usare con VS una volta configurato (sempre che sia fattibile e ti soddisfi), serve creare un progetto libreria statica e tentare di compilare tutte le librerie, se questo processo termina con successo verrà prodotto un file libname.a che poi potrai usare, ma è proprio impossibile usare cin cout ecc.
Questo mi sembra un classico caso di "x y", misto a "ufficio complicazioni affari semplici".
Vediamo se ho capito, per comunicare da pc ad una generica scheda arduino, vorresti comandare da programma c++, attraverso la usb, i pin con la stessa sintassi di arduino?
speedyant:
Questo mi sembra un classico caso di "x y", misto a "ufficio complicazioni affari semplici".
Vediamo se ho capito, per comunicare da pc ad una generica scheda arduino, vorresti comandare da programma c++, attraverso la usb, i pin con la stessa sintassi di arduino?
Si esattamente, scrivere un classico programma in C++, quindi file.cpp, e inserire tra le righe di codice un comando di arduino. Per esempio dopo un if far accendere un led. Il motivo per cui ho bisogno di questo e di poter con un unico programma in C++ comandare varie periferiche
Quindi due programmi, uno lato PC e uno lato Arduino, che condividono un protocollo o fatto da te o (come detto prima) ne esiste uno già fatto per Arduino e si chiama Firmata. Se cerchi in rete trovi esempi. Bisogna vedere se è abbastanza flessibile per le tue esigenze. E te lo devi studiare.
Di base Firmata ti permette di accendere un led mandando un comando dal programma PC verso Arduino (usando i suoi comandi/protocolli)
nid69ita:
Quindi due programmi, uno lato PC e uno lato Arduino, che condividono un protocollo o fatto da te o come detto ne esiste uno già fatto per Arduino e si chiama Firmata. Se cerchi in rete trovi esempi. Bisogne vedere se è abbastanza flessibile per le tue esigenze. E te lo devi studiare.
Ciao IGOR, grazie al tuo supporto e a quello degli altri so cosa cercare: un protocollo di comunicazione condiviso in ambiente Visul C++ o altro ambiente con il linguaggio C++. Quello che chiedo è molto importante per l’azienda per cui lavoro. L’obbiettivo è sviluppare un eseguibile in C++ che mi consenta di controllare Arduino contemporaneamente all’acquisizione di dati di monitoraggio dall’analizzatore vettoriale di reti. Fra l’altro sarà un altro paio di maniche far comunicare il VNA con il file.exe in C++. È un progetto un po’ ambizioso, lo so ma troppo interssante. Ho dato un’occhiata alla libreria Firmata di Arduino e le info pare siano confortanti.
Certamente c’è da studiare come dici tu ma non è un problema, l’importante è sapere che la strada è tracciata.
Appena ci sarò riuscito condividerò I miei risultati con tutti.
A presto