Scrivi le tue librerie.
File.
Una libreria può avere diversi file o anche cartelle con file, ma solo uno è sempre connesso: il file di intestazione principale con estensione .h e a sua volta, richiama il resto dei file necessari. In generale, la libreria ha la seguente struttura (ad esempio, il nome della libreria - testColors):testColors - la cartella della libreria.
Riempiamo il file testColors.h (la libreria di test) con il codice minimo indispensabile con cui lavorare:
#ifndef testColors_h
Una libreria può avere diversi file o anche cartelle con file, ma solo uno è sempre connesso: il file di intestazione principale con estensione .h e a sua volta, richiama il resto dei file necessari. In generale, la libreria ha la seguente struttura (ad esempio, il nome della libreria - testColors):testColors - la cartella della libreria.
- examples - cartella con esempi.
- testColors.h - file di intestazione.
- testColors.cpp - file di implementazione.
- keywords.txt - mappa di evidenziazione della sintassi.
- Cartella degli schizzi.
- Cartella con le librerie.
- #include <testColors.h> - cercherà un file nella cartella delle librerie.
- #include "testColors.h" - proverà a trovare il file nella cartella con lo schizzo, se non lo trova andrà nella cartella con le librerie.
Riempiamo il file testColors.h (la libreria di test) con il codice minimo indispensabile con cui lavorare:
#ifndef testColors_h
#define testColors_h
#include <Arduino.h>
// codice della libreria
#endif
La costruzione delle direttive del preprocessore vieta di ricollegare la libreria, in genere è facoltativa, ma è meglio scrivere così. Il file della libreria testColors.h si trova nella cartella testColors nella cartella con tutte le altre librerie. Includiamo anche il file Arduino.h principale per utilizzare le funzioni Arduino nel nostro codice. Troverai la costruzione con #ifndef-define in quasi tutte le librerie. Nelle versioni attuali dell'IDE (e di conseguenza nella versione del compilatore) si può fare così:
#pragma once#
La costruzione delle direttive del preprocessore vieta di ricollegare la libreria, in genere è facoltativa, ma è meglio scrivere così. Il file della libreria testColors.h si trova nella cartella testColors nella cartella con tutte le altre librerie. Includiamo anche il file Arduino.h principale per utilizzare le funzioni Arduino nel nostro codice. Troverai la costruzione con #ifndef-define in quasi tutte le librerie. Nelle versioni attuali dell'IDE (e di conseguenza nella versione del compilatore) si può fare così:
#pragma once#
include <Arduino.h>
// codice della libreria
Il costrutto #pragma once dice al compilatore che il file specificato deve essere incluso solo una volta, è solo una breve alternativa a #ifndef-define.
Il costrutto #pragma once dice al compilatore che il file specificato deve essere incluso solo una volta, è solo una breve alternativa a #ifndef-define.
Scrivere una classe.
Prendiamo l'esempio da Oggetti e classi (Scrivere una classe) e incolliamo la versione finale della classe Colors in testColors.h.
Prendiamo l'esempio da Oggetti e classi (Scrivere una classe) e incolliamo la versione finale della classe Colors in testColors.h.
#ifndef testColors_h
#define testColors_h
#include <Arduino.h>
#include <Arduino.h>
class Colors
{
public:
Colors(byte color = 5, byte bright = 30);
void setColor(byte color);
void setBright(byte bright);
byte getColor();
byte getBright();
private:
byte _color;
byte _bright;
};
Colors::Colors(byte color, byte bright)
{
_color = color;
_bright = bright;
}
void Colors::setColor(byte color)
{
_color = color;
}
void Colors::setBright(byte bright)
{
_bright = bright;
}
byte Colors::getColor()
{
return _color;
}
byte Colors::getBright()
{
return _bright;
}
#endif
In realtà, è così che abbiamo inserito la nostra classe in un file separato, l'abbiamo collegata al programma principale e utilizzato il codice: abbiamo semplicemente creato diversi oggetti.
Il codice deduce i valori da una classe. In realtà, qui abbiamo scritto la nostra libreria.
Dividi in file.
Inoltre puoi separare la descrizione e l'implementazione creando file testColors.h e testColors.cpp.
File testColors.h:
#ifndef testColors_h
#define testColors_h
#include <Arduino.h>
#include <Arduino.h>
class Colors
{
public:
Colors(byte color = 5, byte bright = 30);
void setColor(byte color);
void setBright(byte bright);
byte getColor();
byte getBright();
private:
byte _color;
byte _bright;
};
#endif
#endif
File testColors.cpp:
#include <testColors.h> // include l'intestazione richiesta
Colors::Colors(byte color, byte bright)
Colors::Colors(byte color, byte bright)
{
_color = color;
_bright = bright;
}
void Colors::setColor(byte color)
{
_color = color;
}
void Colors::setBright(byte bright)
{
_bright = bright;
}
byte Colors::getColor()
{
return _color;
}
byte Colors::getBright()
{
return _bright;
}
Un punto importante: se la libreria ha un file nomelibreria.cpp, allora l'implementazione dei metodi e delle funzioni deve trovarsi lì. Non è possibile specificare un'implementazione nel file nomelibreria.h, si verificherà un errore. Se la libreria è composta solo dal file di intestazione nomelibreria.h, è possibile scrivere l'implementazione al suo interno.
File keywords.txt:
keywords.txt: è un file che contiene una "mappa" di evidenziazione della sintassi, ovvero di che colore evidenziare quali parole. La sintassi per costruire questo file è molto semplice: i nomi delle funzioni/metodi sono elencati su una nuova riga e, tramite la tabulazione (premendo il tasto TAB) - il tipo della parola chiave:
###################################
- KEYWORD1 - grassetto arancione, evidenziazione per tipi di dati e nomi di classi.
- KEYWORD2 - colore arancione, per metodi e funzioni.
- LITERAL1 - colore blu, per le costanti.
###################################
Syntax testColors
###################################
Class (KEYWORD1)
###################################
###################################
testColors KEYWORD1
Colors KEYWORD1
###################################
Methods and Functions (KEYWORD2)
###################################
setColor KEYWORD2
setBright KEYWORD2
getColor KEYWORD2
getBright KEYWORD2
Puoi lasciare commenti, qui iniziano con #. Non abbiamo costanti, quindi non ho usato LITERAL1. Vediamo come appare il codice con l'evidenziazione dei nostri comandi dalla libreria. Un punto importante: affinché le modifiche abbiano effetto, è necessario chiudere tutte le finestre dell'IDE di Arduino e riaprire lo sketch.
E ora abbiamo una libreria a tutti gli effetti, divisa in file.
E ora abbiamo una libreria a tutti gli effetti, divisa in file.
File testColors.ino:
#include <testColors.h>
Colors myColor(10); // crea l'oggetto myColor specificando _color (otteniamo 10, 30)
Colors myColor2(10, 20); // specificare il colore e la luminosità (otteniamo 10, 20)
Colors myColor3; // senza inizializzazione (otteniamo 5, 30)
void setup()
{
Serial.begin(9600);
Serial.println(myColor.getColor()); // 10
Serial.println(myColor.getBright()); // 30
Serial.println(myColor2.getColor()); // 10
Serial.println(myColor2.getBright()); // 20
Serial.println(myColor3.getColor()); // 5
Serial.println(myColor3.getBright()); // 30
}
void loop()
{
}
File testColors.