home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc


capire librerie di Arduino
     
Autore Messaggio opzioni
still



[pagine pubblicate]

postato il:
28.05.2020, alle ore 13:05
caccamo2:
still:
c'è un modo per sapere quali sono le funzioni contenute in una libreria?

usare ambienti di sviluppo ufficiali messi a disposizione o promossi dai produttori del silicio.
I compilatori seri quando chiami una funzione esce un popup con la lista delle opzioni, tanto per fare un esempio, e le librerie sono documentate su manuali, cose che nel mondo arduino sono solo sogni.



Beh, quello si ma in questo thread l'argomento tratta le librerie di arduino



Chi ha argomenti discute serenamente e rispetta le opinioni altrui, chi non ne ha insulta e basta.
Non ti curar di lor, ma guarda e passa
lorebaro





postato il:
28.05.2020, alle ore 15:09
Ciao,

MB54:
double_wrap:
...


Si. Girando attorno ad alcune librerie semplici, ho visto che nel nomelibreria.h sono definite quali funzioni sono pubbliche e quali private. Ho provato anche a rendere pubbliche funzioni private (laddove abbia un senso) e pare funzionare.
Ad esempio in questo file WinsenZE03.h dove viene definita la classe WinsenZE03 si ha:

 class WinsenZE03
{
  public:
    WinsenZE03();
    void begin(Stream *ser, int type);
    void setAs(bool active);
    float readManual();
    float readContinuous();
  private:
    void debugPrint(byte arr[]);
    Stream *_s; //Serial1 - Serial3 are USARTClass objects.
    int _type;
};


Le funzioni pubbliche sono richiamabili con nomeclasse.nomefunzione() es.
WinsenZE03.readManual()

Se rendo pubblica la funzione debugPrint(byte arr[]) poi la posso usare come le altre.
O almeno questo mi é parso di capire (ma che fatica)


Si MB54la logica è quella che hai già capito, ed è la logica di una dichiarazione di una classe, generalmente una libreria di arduino è una o più classi interagenti.
Poi una libreria ben fatta è composta da:
1) un sito, un repositori github dove puoi trovare le informazioni ufficiali, la risoluzione dei bug e la documentazione.
Trovi questo sito o repository dal gestore delle librerie di arduino, More info sotto la libreria.
Solitamente trovi un readme su come usare la libreria e cosa fa.
Per esempio la prima libreria che il gestore mi propone è questa: https://github.com/ademuri/smart-input-filter

2) Il c++ funziona a classi ed una classe ben fatta è composta da una parte di header i .h
Qui ci sono le informazioni della classe e ti nasconde la classe vera e propria, questo comportamento è parte della sicurezza del sistema. Un solo punto di interfaccia.
Se una funzione è definita privata, quindi visibile solo all'interno della classe ci sarà un motivo, per cui se non si sa cosa si sta facendo non è il caso di rendere una cosa privata pubblica.
Certo si può fare semplicemente spostando la dichiarazione nel file .h
3) In una classe ben fatta esiste un file .cpp con la classe vera e propria, con la definizione delle funzioni membro (le funzioni della classe), etc...
4) le classe si proprio come hai visto
una definizione di un oggetto, con il suo costruttore.
String pippo = "lillo e greg";
i costruttori sono delle funzioni speciali che vengono eseguiti quando viene creato l'oggetto.
5) le funzioni membro si chiamano nome_oggetto.funzione();
nel caso di int x = pippo.toInt();
6 Caccamo dice che l'IDE di arduino è povera, ha ragione!
Per fortuna in motore sotto è molto potente ed è basato con GCC.
Io uso visual studio con VisualMicro, ma ci sono altre soluzioni che come visual code che ti permettono di avere tutte le informazioni su un classe semplicemente digitando il nome di un oggetto mentre programmi.

Se posso permettermi di darti un cosiglio, cambia l'IDE e sarà tutto più semplice.
Avrai un piccolo scotto da pagare per capire come funziona il nuovo ambiente, ma poi sarà tutto più semplice.
Lorenzo

MB54




una ogni 100 livelli


postato il:
28.05.2020, alle ore 17:04
Grazie. Risposta da leggere con attenzione questa sera dopo cena.
Per rimanere su un argomento di pronta beva, avevo installato l' altra settimana Visual Studio code + platformio; l' ho tirato via perchè gli avevo attribuito la colpa di un problema sulle seriali, al quale era invece totalmente estraneo.
Nell' oretta scarsa in cui l' ho provato è stato tutto un chiamare i Santi a raccolta, perchè non ci capivo nulla, non sapevo come muovermi con i menu ecc. Ovviamente non avevo letto un manuale, una help o una demo... così è un poco difficile.

Lo installerò nuovamente nei prossimi giorni, ma vedo un percorso di apprendimento lungo e tormentato.

Ricorda che la quasi totalità degli utenti di questo forum fanno altri mestieri ed il tempo da dedicarci è sempre poco; poi le troppe primavere hanno rallentato i processi di apprendimento (parlo per me, over 65), se mai sono stati veloci.
Con i PIC uso microbasik, di M.E., ma volendo fare delle cose basate su WiFi, LORA ecc. devo per forza ricorrere ad Arduino, la cui ricchezza di librerie riduce enormemente i tempi.

MB54




una ogni 100 livelli


postato il:
28.05.2020, alle ore 19:14
lorebaro:

Poi una libreria ben fatta è composta da:
1) un sito, un repositori github dove puoi trovare le informazioni ufficiali, la risoluzione dei bug e la documentazione.


Provando a guardare il mondo GitHub con occhi inesperti, a me (e direi anche a Still) le librerie di Arduino non appaiono così chiare e granché documentate; personalmente le trovo molto carenti di documentazione. Forse occhi esperti riescono a vedere chiaramente tutti gli elementi, ma io mi devo sbattere assai. Forse perché sono abituato a mikroBAsic, che di ogni libreria ti descrive le singole funzioni, quali parametri e ti da un esempio; poi i dubbi restano lo stesso, ma è un altro discorso. Questo anche perché mikroBasic non fornisce i sorgenti delle proprie librerie (come per mikroC e tutti gli altri linguaggi).
Essendo il sw Arduino gratuito non posso chiaramente lamentarmi, ma andare molto oltre gli esempi forniti e gli sketc pubblici diventa un bel problema (per me). Comunque mi ci vanno tempi opportuni per imparare.


lorebaro





postato il:
28.05.2020, alle ore 19:45
Ciao MB54,
capisco bene il problema del tempo.
Rispetto alle librerie, sinceramente io passo più tempo a scegliere quale NON usare, piuttosto che imparare come è fatta una libreria.

Il processo è inverso, se non è documentata e chiara si passa ad un altra, se ovviamente si può fare.
Tanto se ha un'interfaccia cervellotica lo sarà anche dentro, quindi sarà difficile da usare e che creerà comportamenti non chiari.

Meglio perdere un po' di tempo per trovarne un altra.

Dal tuo post mi sembra di capire che sia un problema di c++, magari possiamo fare qualcosa per questo aspetto, come per l'IDE.

Lorenzo


still



[pagine pubblicate]

postato il:
28.05.2020, alle ore 22:07
Io sono l'ultimo, per carità ho iniziato l'elettronica costruendo radio con triodi e pentodi, oscilloscopio monotraccia di mio buonanima papà, crt verde rotondo di scuola radio Elettra, e ICE 680G.
Negli anni sono passato anche ai micro, qualche prova con msp430 ma poi il vero incontro è stato con il pic 16f84 e i corsi di Tanzilli in assembler. Quando passai a picbasic pro fu un salto di qualità con micro code studio +.
Adesso mi arrabatto con Arduino però trovo il sistema librerie quanto meno strano. Basterebbe che allegato ci fosse un file di testo con i vari comandi e la loro descrizione, si renderebbe più facile la vita a tutti



Chi ha argomenti discute serenamente e rispetta le opinioni altrui, chi non ne ha insulta e basta.
Non ti curar di lor, ma guarda e passa
MB54




una ogni 100 livelli


postato il:
29.05.2020, alle ore 07:13
Con fatica sto inquadrando i vari aspetti.
Se puoi, una tua gentilezza sarebbe veramente utile. Mi puoi dare un link ad una libreria pubblica ben fatta, che possa prendere come riferimento per come è organizzata? Se è possibile, sarebbe meglio qualche cosa di semplice e possibilmente con qualche attinenza ad Arduino o ESP (giusto per ritrovare almeno qualche cosa di famigliare)


lorebaro:

Dal tuo post mi sembra di capire che sia un problema di c++, magari possiamo fare qualcosa per questo aspetto, come per l'IDE.


E' un problema con il C, con il C++ e con qualsiasi altro linguaggio (spesso anche con l' italiano) .
Fin dagli anni 70 ho sempre programmato, ma con linguaggi semplici e mirati al risultato. Fortran, basic e derivati, clipper, e poi un poco di VBA con excel. Adesso un poco di mikroBasic. Con il C faccio fatica a scrivere due righe due per Arduino.
Cosa possiamo fare per il C++ ?

PS: ho reinstallato Visual Studio code. Hai un link ad un tutorial per absolute beginner?
MB54




una ogni 100 livelli


postato il:
29.05.2020, alle ore 07:22
still:
..ho iniziato l'elettronica costruendo radio con triodi e pentodi, ..


Anche io, primissime edizioni dei vari Ravalico della biblioteca Comunale. Poi CQ elettronica attesa con ansia in edicola... Avevo 13-14 anni.. Il primo transistor un 2N914 pagato quasi 1000 lire, a quei tempi moltissimo.
lorebaro





postato il:
29.05.2020, alle ore 15:50
Ciao Forum,

di solito le librerie di Adafruit sono fatte bene, incapsulate nel modo giusto.


Di seguito un esempio ( l'organizzazione dei file e delle directory non è quella standard di arduino, ma tant'è):

https://github.com/adafruit/Adafruit_SHT31
Il file readme che ti cosa si parla e cosa fa.

Apri il file nomelibreria.h di seguito trovi i miei commenti in italiano:

dopo una serie di #define riguardanti lo stato del sensore trovi la dichiarazione della classe:

class Adafruit_SHT31 {
public:
Adafruit_SHT31(TwoWire *theWire = &Wire); // Costruttore della classe, per dichiarare un oggetto serve dargli l'indirizzo di una classe Wire, il gestore del bus i2C


bool begin(uint8_t i2caddr = SHT31_DEFAULT_ADDR); // prima di usare l'oggetto va inizializzato. E' una prasse comune che gli oggetti Arduino da inizializzare abbiano una funzione begin. Tipo Serial.begin(9600);
float readTemperature(void); // legge la temperatura e ti restituisce un Float, per cui devi mettere il risultato in un float.
float readHumidity(void); // legge umidità
uint16_t readStatus(void); //legge lo stato si può andare nel file cpp per vedere che restituisce le define presenti su questo file si riferiscono ai possibili stati
void reset(void); // fa il reset del sensore
void heater(bool h); // qui non so cosa fa di preciso, credo riscaldi il sensore di umidità calibrarlo, qui va letto che fa l'hardware
bool isHeaterEnabled(); il riscaldatore è attivato?



Da qui in poi non ci interessa, per gestire il sensore non ci è messo a disposizione altro. Quello che c'è nella sezione private serve solo internamente alla classe, non andrebbe usato.
private:
/**
* Placeholder to track humidity internally.
*/
float humidity;

/**
* Placeholder to track temperature internally.
*/
float temp;

bool readTempHum(void);
bool writeCommand(uint16_t cmd);

TwoWire *_wire; /**< Wire object */
Adafruit_I2CDevice *i2c_dev = NULL; ///< Pointer to I2C bus interface
};


Un buon Ide ti mette a disposizione queste informazioni mentre programmi, senza andare a guardare i vari file.

Io uso visualmicro https://www.visualmicro.com/ nella home c'è un get started.
Prova.
Lorenzo
lorebaro





postato il:
29.05.2020, alle ore 16:02
Ciao Forum,

aggiungo questo documento, che descrive come devono essere fatte le API (librerie) per arduino.
https://www.arduino.cc/en/Reference/APIStyleGuide
Lorenzo
segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 







 
 
indietro | homepage | torna su copyright © 2004/2024 GRIX.IT - La community dell'elettronica Amatoriale