Creare Librerie

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

Ciao Uwe

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

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

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.

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

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?

#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

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).

normalmente le "librerie" arduino non sono altro che delle classi C++

mastraa:
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.

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

Nel Reference ci sono anche delle guida utili
--> Arduino - Home
--> http://arduino.cc/en/Reference/APIStyleGuide

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

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à

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.

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.

lesto:

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.

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 :slight_smile:

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.

Ma diamine! Siamo nel 2014 e ancora di questi post?

Digita su Google: "Creare librerie per arduino", ti escono 50 link solo in italiano!

BaBBuino:
Ma diamine! Siamo nel 2014 e ancora di questi post?

Digita su Google: "Creare librerie per arduino", ti escono 50 link solo in italiano!

Che a seguirli tutti è una perdita di tempo dove non impari quasi nulla.

Chi riesce a condensare in 10 pagine l'argomento partendo da zero? Risposta: nessuno

Ciao.

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

Mauro, rileggi bene la richiesta. Non deve diventare un professionista del C, ma creare librerie per Arduino.

E se ci sono riuscito io (che sono una pigna) con quegli articoli , ci può riuscire chiunque. E questo senza leggere libri esoterici o diventare un Guru del C++

BaBBuino:
Ma diamine! Siamo nel 2014 e ancora di questi post?

Digita su Google: "xxxxxxxxxx", ti escono yyy link solo in italiano!

Ecco, messo così lo si potrebbe applicare al 70% dei post che vengono pubblicati. :roll_eyes:

però poi lui ha postato il codice chiedendo una valutazione e consiglio sull'organizzazione del codice.. cosa che solo noi poveri umani possiamo fare.

Certo, avesse conosciuto il linguaggio a fondo avrebbe visto subilto la soluzione, ma inzomma siam stati tutti nabbi.