Pages: [1] 2 3 4   Go Down
Author Topic: Creare Librerie  (Read 3508 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21871
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22973
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Full Member
***
Karma: 3
Posts: 195
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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
« Last Edit: January 16, 2014, 10:23:19 am by mastraa » Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 114
Posts: 7201
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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).
« Last Edit: January 16, 2014, 10:38:42 am by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10501
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 87
Posts: 5017
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

my name is IGOR, not AIGOR

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10501
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

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

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 114
Posts: 7201
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Full Member
***
Karma: 3
Posts: 195
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si scusa, ho scritto c perchè pensavo a un file c, chiaramente mi riferisco al cpp smiley-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à
Logged

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10501
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Offline Offline
Full Member
***
Karma: 3
Posts: 195
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 114
Posts: 7201
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Pages: [1] 2 3 4   Go Up
Jump to: