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.
  • examples - cartella con esempi.
  • testColors.h - file di intestazione.
  • testColors.cpp - file di implementazione.
  • keywords.txt - mappa di evidenziazione della sintassi.
A volte i file .h e .cpp possono essere trovati nella cartella src. Tutti i file e le cartelle, ad eccezione dell'intestazione .h, sono facoltativi e potrebbero mancare, ad es. una libreria può consistere solo in un file di intestazione. In questa forma, la libreria si trova nella cartella con tutte le altre librerie e può essere inclusa nello schizzo utilizzando il comando #include. In generale, ci sono due posti in cui il programma cercherà la libreria:
  • Cartella degli schizzi.
  • Cartella con le librerie.
Di conseguenza, il comando #include ha due opzioni per trovare un file, il nome è racchiuso tra <> o "":
  • #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.
Le basi della biblioteca.
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#
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.

Scrivere una classe.
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>
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>
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

File testColors.cpp
#include <testColors.h> // include l'intestazione richiesta
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.
Ecco come apparirà il file keywords.txt per la libreria testColors:
##################################
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.

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.
Crea il tuo sito web gratis! Questo sito è stato creato con Webnode. Crea il tuo sito gratuito oggi stesso! Inizia