Go Down

Topic: Creare Librerie (Read 3 times) previous topic - next topic

zinim

Salve,
qualcuno sa indicarmi una guida per creare librerie per arduino, ho comprato quattro libri sulla programmazione di arduino e nessuno di questi spiega come creare le librerire.
grazie

uwefed

http://arduino.cc/en/Hacking/LibraryTutorial
Ciao Uwe

zinim

Non esiste un'altra guida che spiega come creare librerie, perchè quella riportata da arduino non spiega molto bene e vedendo librerie create da altri, mi sembra non spieghi nemmeno tutto.

Grazie

leo72


Non esiste un'altra guida che spiega come creare librerie, perchè quella riportata da arduino non spiega molto bene e vedendo librerie create da altri, mi sembra non spieghi nemmeno tutto.

Grazie

Allora ti devi prendere un manuale di C++ e lì imparare tutto quello che ti serve sulla suddivisione dei programmi in file .h e .cpp.

zinim

Sapete indicarmi una buona guida per il c++?
Grazie

mastraa

#5
Jan 16, 2014, 03:23 pm Last Edit: Jan 16, 2014, 04:23 pm by mastraa Reason: 1
Sfrutto questo vecchio topic per non aprirne di nuovi inutilmente.

Volevo un paio di chiarimenti per quanto riguarda le librerie:

innanzitutto volevo sapere se nel file.h dove indichiamo le istanze è possibile inserire più di un'istanza un costruttore (ad esempio voglio settare un pin diverso per tre o quattro cose che può fare la libreria, anche contemporaneamente).

Inoltre è corretta il seguente schema come 'base' per tutte le librerie per il file *.c?

Code: [Select]
#ifndef Mille_h
#define Mille_h
#if ARDUINO >=100
#include "Arduino.h"
#else
#include "WProgramm.h"
#include "pins_arduino.h"
#endif


class Mille{

public:
Costruttore_1(int pin);
       Costruttore_2(int pin); //Intendo questo, è possibile?
void securOff();

private:
int _pin;
};

#endif

PaoloP

#6
Jan 16, 2014, 04:36 pm Last Edit: Jan 16, 2014, 04:38 pm by PaoloP Reason: 1
Puoi sfruttare l'overload del C++
Nomini la funzione con lo stesso nome ma passandogli numero o tipi di dati diversi.
Il compilatore seleziona la funzione che corrisponde alla chiamata.

Esempio la libreria Ethernet.h (https://github.com/arduino/Arduino/blob/master/libraries/Ethernet/Ethernet.h)
Tutte le funzioni si chiamano begin ma hanno un numero diverso di parametri.
Oppure la Print.h dove le funzioni print o println che hanno un solo parametro (a volte due) ma cambia il tipo passato (https://github.com/arduino/Arduino/blob/master/hardware/arduino/cores/arduino/Print.h).
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

lesto

normalmente le "librerie" arduino non sono altro che delle classi C++
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

nid69ita


Inoltre è corretta il seguente schema come 'base' per tutte le librerie per il file *.c?


Non vorrei dire una cavolata, ma se il file contiene delle classi, deve essere .cpp e non .c
Mi sembra che il compilatore faccia questa differenziazione.
my name is IGOR, not AIGOR

lesto

anche se non la facesse è sarebbe comunque uno standard de faco da rispettare.

ps. la mia risposta di prima era basata sulla pagina 1 del topic, non avevo notato la 2

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

PaoloP

Nel Reference ci sono anche delle guida utili
--> http://arduino.cc/en/Reference/StyleGuide
--> http://arduino.cc/en/Reference/APIStyleGuide
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

mastraa

si scusa, ho scritto c perchè pensavo a un file c, chiaramente mi riferisco al cpp ;)

Quindi se non ho capito male conviene spostarsi alla funzione (come dice PaoloP) e quindi dichiarare x funzioni con ugual nome, ma diversi parametri

Oppure dichiarare più classi, ognuna con il suo costruttore (come dice lesto)

Capisco bene?

Quello che servirebbe a me è di fatto riunire in un unico codice alcuni funzioni matematiche, altre più 'personali' che mi servono per un progetto abbastanza pesante. In questo modo evito di inserire decine di funzioni che poi non mi servono, non scrivo tutto nel file ino che poi diverrebbe un casino e raccolgo tutto nello stesso posto.

Faccio un esempio: per una questione di sicurezza volevo fare in modo che il sistema fosse alimentato da un relay tenuto chiuso da Arduino stesso durante il lavoro, e si aprisse in caso un sensore mi desse un valore allarmante.
Ad esempio la classe Off viene inizializzata sul pin 13 che comanda il relay. la funzione Off.securOff(); sa che spegne il relay indicato prima.

Nella stessa libreria però volevo inserire anche altre funzioni, che lavorano con pin differenti...

Quindi conviene fare una seconda classe e inizializzarla su un altro pin?


Scusate le domande idiote, ma conosco C++ solo lato Arduino in quanto ho avuto a che fare con altri linguaggi, seppur simili, all'università

lesto


Oppure dichiarare più classi, ognuna con il suo costruttore (come dice lesto)

eh? dove? comunque no, anche il costuttore può essere sovracaricato, esattamente comne una normale funzione.

Quote
Nella stessa libreria però volevo inserire anche altre funzioni, che lavorano con pin differenti

SE vuoi usare le stesse funzioni ma su pin differenti, allora conviene istanziare un secondo oggetto passando come parametro il pin. Se le funzioni sono differenti, il problema non si pone, se non che teoricamente il codice va diviso in classi secondo logica, ovvero una classe che gestisce il relè di sicurezza non fa cose di matematica, ma ci sarà un altra classe che fa la matematica.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

mastraa



Oppure dichiarare più classi, ognuna con il suo costruttore (come dice lesto)

eh? dove? comunque no, anche il costuttore può essere sovracaricato, esattamente comne una normale funzione.

Quote
Nella stessa libreria però volevo inserire anche altre funzioni, che lavorano con pin differenti

SE vuoi usare le stesse funzioni ma su pin differenti, allora conviene istanziare un secondo oggetto passando come parametro il pin. Se le funzioni sono differenti, il problema non si pone, se non che teoricamente il codice va diviso in classi secondo logica, ovvero una classe che gestisce il relè di sicurezza non fa cose di matematica, ma ci sarà un altra classe che fa la matematica.


Avevo interpretato la tua risposta data ad un altro, ma l'ho letto in seguito questo.
Ok grazie mille a tutti :)

PaoloP

Altrimenti prendi il tuo sketch, tagli le funzioni dal file .ino e le incolli in un file funzioni.h e lo #includi nello sketch.
Più semplice ancora, apri una nuova tab nell'IDE (pulsantino sotto quello del Serial Monitor) e sposti le funzioni che non ti interessano nel corpo principale.
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Go Up