Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
terza edizione
Di John Bach
mEmlnc.com
"La programmazione non riguarda ciò che sai, ma ciò
che puoi capire . " - Chris Pine
Questo libro ti aiuterà a sviluppare un codice sorgente funzionante per il
microcontrollore Arduino. In queste pagine, ci occuperemo principalmente
dell'aspetto software dell'informatica fisica, progettando codice per lavorare
con oggetti fisici che mostrano comportamento o interattività attraverso il
software. A partire dal contesto di base diPiattaforma Arduino per essere
operativi con il nostro primo codice, discuteremo la struttura e la sintassi del
linguaggio di programmazione basato su C di Arduino, esaminando variabili,
strutture di controllo, array e memoria. Questo libro esaminerà quindi molte
delle funzioni esclusive dello sviluppo di Arduino per il controllo di ingressi
e uscite digitali e analogici, temporizzazione, casualità, funzioni di scrittura e
utilizzo di molte delle librerie Arduino per lavorare con diversi tipi di
hardware e protocolli di comunicazione. Arduino, come Processing prima di
esso, adottò l'idea di uno sketchbook di codice. Continueremo questa
metafora mentre parliamo del processo di abbozzo nel codice come metodo
intuitivo per testare rapidamente nuove idee nel codice. La maggior parte di
questo libro è scritta intorno all'idea di sviluppare abilità di programmazione
attraverso lo sketch. Forniremo anche alcuni suggerimenti per nuovi progetti
e hardware, nuovi linguaggi da provare e modi per contribuire alla comunità.
Questo libro intenzionalmente non si sofferma troppo a lungo sulla teoria
dell'elettronica, sulla progettazione dei circuiti, sull'hacking o su altre pratiche
specificamente basate sull'hardware, anche se nel nostro ultimo capitolo
rivisiteremo il lato hardware delle cose per fornire una piccola base per il
calcolo fisico. Questo libro in molti modi riprende da dove si era interrotto il
Notebook di programmazione Arduino, con discussioni ancora più
approfondite sull'ambiente Arduino; esempi di codice semplici e senza
fronzoli; e schemi chiari e di facile lettura eIl Notebook, un piccolo opuscolo
in PDF, è stata la mia prima esperienza di scrittura su Arduino e non è mai
stato concepito come una breve guida per i miei studenti quando ho
introdotto per la prima volta su Arduino una classe di 15 studenti universitari
di arte e design nel 2007 I migliori progetti e tutto il resto, questo piccolo
libretto è stato ora tradotto in spagnolo, russo e olandese (che io sappia), è
ospitato in così tanti luoghi diversi di cui è impossibile tenerne traccia ed è
stato utilizzato nei laboratori e classi in tutto il mondo. Non ho aggiornato il
taccuino negli ultimi anni e, in tutta onestà, non sono del tutto sicuro di cosa
farne ora, quindi spero che questo nuovo libro riempirà un vuoto e troverà
un'adozione simile e diffusa che il piccolo opuscolo ha goduto tutti questi
anni.
introduzione
Ambiente di codifica Arduino e strumenti di base
Che lingua è Arduino?
IDE Arduino
Capitolo primo
Transazioni in linguaggio Arduino
Transazioni aritmetiche in Arduino
Bilancio delle transazioni in Arduino
Transazioni booleane in Arduino
Indice delle transazioni di accesso in Arduino
Coefficienti di numeri binari in Arduino
Transazioni composte in Arduino
Capitolo II
Tipi di dati
L'oggetto String in Arduino
Struttura generale
Valori restituiti
Minion
Transazioni
Array in Arduino
Crea un array
Accesso alla matrice
Digita bool in Arduino
byte in Arduino
Digita char in Arduino
Digita double in Arduino
Digita float in Arduino
Struttura generale
Digita int in Arduino
Stringhe in Arduino
Struttura generale
Carattere di terminazione nullo
Avvolgimento di stringhe lunghe
Matrici di stringhe di testo
Digita la parola in Arduino
La parola chiave void in Arduino
Capitolo III
Costanti e variabili
Sistema decimale (base 10)
Sistema binario (Base 2)
Note e avvertenze
Costanti in Arduino
Ambito e qualificazioni variabili
La parola chiave const in Arduino
Il campo delle variabili in Arduino
La parola chiave statica in Arduino
Esempi
Parola chiave volatile in Arduino
Interi volatili o lunghi volatili?
Capitolo IV
Strutture di controllo
Interruzione di parole chiave in Arduino
Continua la parola chiave in Arduino
Loop do ... mentre iterativo in Arduino
Altre parole chiave in Arduino
Vai alla parola chiave in arduino
Espressione se condizionale in Arduino
Note e avvertenze
Restituzione di parole chiave in Arduino
Esempi
Interruttore di espressione ... case in Arduino
Transazioni
Mentre l'episodio iterativo in Arduino
Capitolo V
Funzioni
La funzione digitalRead () in Arduino
digitalRead (pin)
La funzione digitalWrite () in Arduino
La funzione pinMode () in Arduino
Funzioni del tempo in Arduino
La funzione delay () in Arduino
Funzione Arduino delayMicroseconds ()
Funzione Arduino micros ()
Funzione Arduino millis ()
Funzioni matematiche in Arduino
Gestione e verifica dei caratteri tipografici in Arduino
Funzioni di conversione di Arduino
Funzioni di controllo provinciale in Arduino
introduzione
Dal lancio della piattaforma open source Arduino, il marchio si è affermato al
centro di un'ampia comunità open source. L'ecosistema Arduino è composto
da una diversa combinazione di hardware e software. La versatilità di
Arduino e la sua semplice interfaccia lo rendono una scelta leader per una
vasta gamma di utenti in tutto il mondo, da hobbisti, designer e artisti ai
prototipi di prodotti.
La scheda Arduino è collegata a un computer tramite USB, dove si connette
con l'ambiente di sviluppo Arduino (IDE). L'utente scrive il codice Arduino
nell'IDE, quindi lo carica sul microcontrollore che esegue il codice,
interagendo con ingressi e uscite come sensori, motori e luci.
Sia i principianti che gli esperti hanno accesso a una vasta gamma di risorse e
materiali gratuiti per supportarli. Gli utenti possono cercare informazioni su
come configurare la propria scheda o anche su come codificare su Arduino.
L'open source dietro Arduino lo ha reso particolarmente amichevole per gli
utenti nuovi ed esperti. Ci sono migliaia di esempi di codice Arduino
disponibili online. In questo libro, noi spiegheremo tutti i principi di base che
ha bisogno un programmatore alle prime armi per entrare nel mondo genio,
Arduino
Ambiente di codifica Arduino e strumenti di base
Capitolo primo
Transazioni in linguaggio Arduino
Laboratori *
Calcola il prodotto della moltiplicazione di due numeri insieme.
OPERAZIONE +
Calcola il risultato della somma di due numeri insieme.
-
Calcola il risultato della sottrazione di due numeri l'uno dall'altro.
Laboratori /
Calcola il risultato della divisione di due numeri per uno.
Parametro =
Il coefficiente di attribuzione dice al controller di valutare l'espressione o il
valore sul lato destro del coefficiente = qualunque e memorizzarlo nella
variabile sul lato sinistro di quel coefficiente.
parametro <
Bilanciare due valori o due variabili e restituire il valore vero se il
coefficiente sul lato sinistro è completamente minore del coefficiente sul lato
destro.
Parametro <=
Saldi due o due valori e ritorna vero se il coefficiente sul lato sinistro è
minore o uguale al coefficiente sul lato destro.
Parametro ==
Bilancia due o due variabili e restituisce vero se il coefficiente sul lato
sinistro è uguale al coefficiente sul lato destro.
Parametro>
Bilanciare due valori o due variabili e restituire il valore vero se il
coefficiente sul lato sinistro è esattamente maggiore del coefficiente sul lato
destro.
Parametro> =
Bilanciare due o due valori e restituisce true se il coefficiente sul lato sinistro
è maggiore o uguale al coefficiente sul lato destro.
Transazioni booleane in Arduino
!
La logica riflette il valore o l'espressione logica che la precede applicandovi
l'operazione logica NOT;
&&
Applica l'operazione logica AND a due espressioni o valori logici e
restituisce il valore logico risultante
||
Applica l'operazione OR logico a due espressioni o valori logici e restituisce
il valore logico risultante
*
Viene utilizzato per fornire l'accesso a un valore memorizzato in uno
specifico indirizzo di memoria (Dereferencing) di un indicatore. L'accesso ai
dati archiviati negli indirizzi di memoria è una caratteristica importante
utilizzata con i puntatori.
Operatori bitwise esegue tutte le operazioni logiche sui bit e offset numerici e
valori binari e restituisce il valore risultante.
&
In C ++, l'operazione AND viene eseguita su ciascuno dei due bit
corrispondenti dei numeri dati in modo indipendente e fornisce il valore
numerico risultante.
>>
I bit alla sua sinistra verso sinistra spostano un numero specificato di cifre
uguale al valore a destra.
<<
I bit a sinistra di esso a destra spostano un numero specificato di cifre uguale
al valore a destra.
^
In C ++, l'operazione XOR viene eseguita su ciascuno dei due bit
corrispondenti dei numeri dati in modo indipendente e fornisce il valore
numerico risultante.
|
In C ++, l'OR opera su ciascuno dei due bit corrispondenti dei due numeri
dati in modo indipendente e fornisce il valore numerico risultante.
~
In C ++, l'operazione NOT viene eseguita su ciascuno dei bit dati
indipendentemente, a differenza del coefficiente & & | - e fornisce il valore
numerico risultante.
Gli operatori composti vengono spesso utilizzati per scrivere codici Arduino
a zero, ottimizzare e invertito alcuni bit in valori binari ed altri importanti
processi che semplificano notevolmente e scrittura codice di semplificazione.
Parametro = &
Di solito viene utilizzato con una variabile costante per azzerare un valore di
bit specifico (ad esempio, impostare un valore 0 o LOW).
Modulo = *
È una scorciatoia per moltiplicare il valore corrente di una variabile per una
costante o per un'altra variabile e quindi memorizzare il risultato nella stessa
variabile.
OPERAZIONE ++
Aumenta il valore della variabile utilizzata di 1.
Parametro = +
Una scorciatoia è il processo di combinazione del valore corrente di una
variabile con una costante o un'altra variabile e quindi di memorizzare il
risultato nella stessa variabile.
-
Diminuisce il valore della variabile utilizzata di 1.
Modulo = -
Una scorciatoia per una costante o un'altra variabile viene sottratta dal valore
corrente di una variabile e il risultato viene memorizzato nella variabile
stessa.
Modulo = /
Una scorciatoia è un processo di divisione del valore corrente di una variabile
per una costante o un'altra variabile e quindi di memorizzare il risultato nella
stessa variabile.
Modulo = ^
Solitamente utilizzato con una variabile costante per invertire (invertire) un
valore di bit specifico.
Parametro = |
Di solito viene utilizzato con una variabile di costante per impostare un
valore di bit specifico (impostato su 1 o ALTO).
Capitolo II
Tipi di dati
L'oggetto String in Arduino
La funzione String () crea una copia della classe String. Esistono diversi modi
per creare stringhe di testo di diversi tipi di dati: chiamare la funzione String
() con:
Struttura generale
Stringa ( val )
Stringa ( val , base)
String ( val , decimalPlaces )
Transazioni
val
La variabile o il valore da formattare come stringa di testo. I tipi di dati
consentiti sono : stringa di testo, carattere tipografico, byte, numero intero,
numero intero inutile, numero lungo inutile, numero decimale e
moltiplicatore decimale.
base
Il coefficiente opzionale determina la base del sistema numerico in cui verrà
formattato il valore numerico. Il valore predefinito è: DEC.
decimali
Limita il numero di posizioni decimali (numeri dopo la virgola) al decimale o
al multiplo del decimale.
Valori restituiti
Viene restituita una copia della classe String contenente il valore val .
Esempi
Tutti i seguenti sono validi esempi di utilizzo della funzione String ():
String stringOne = "Hello String"; // Usa una stringa di testo fissa
String stringOne = String ('a'); // Converte un carattere tipografico fisso in
una stringa di testo
String stringTwo = String ("Questa è una stringa"); // String Converte una
stringa di testo statica in un oggetto di tipo
String stringOne = String ( stringTwo + "con più"); // Combina due stringhe
di testo insieme
String stringOne = String (13); // Usa un numero intero costante
String stringOne = String ( analogRead (0), DEC); // Utilizzando un numero
intero che specifica la base utilizzata
String stringOne = String (45, HEX); // "Usa numero intero con base
impostata su" esadecimale
String stringOne = String (255, BIN); // "Utilizza un numero intero con la
linea di base impostata su" binary
String stringOne = String ( millis (), DEC); // Utilizza un numero lungo e
specifica la base utilizzata
String stringOne = String (5.698, 3); // Utilizza un numero decimale e
specifica il numero di posizioni decimali
Minion
charAt ()
La funzione preleva un carattere con un indice specifico dalla stringa di testo
chiamata con esso.
compareTo ()
La funzione bilancia due stringhe di testo e determina quale è maggiore
dell'altra o se sono uguali.
concat ()
La funzione aggiunge il parametro passato alla stringa di testo che viene
chiamata con essa.
c_str ()
La funzione converte il contenuto della stringa di testo con cui viene
chiamata nello stile di stringa di testo ideale in C (la stringa di testo che
termina con null).
finisce con ()
La funzione verifica se la stringa di testo chiamata con essa termina con gli
stessi caratteri che le sono stati passati.
equivale ()
La funzione verifica se la stringa di testo che stai chiamando è uguale alla
stringa di testo che hai passato.
equalsIgnoreCase ()
La funzione verifica se la stringa che stai chiamando è uguale alla stringa a
cui hai passato, non tenendo conto del caso.
getBytes ()
La funzione recupera un numero specificato di byte della stringa di testo che
viene chiamata con essa e la inserisce in un repository specifico.
indexOf ()
L'indice figlio restituisce la prima apparizione di un particolare carattere o
stringa di testo all'interno della stringa di testo che viene chiamata con esso.
lastIndexOf ()
L'indice figlio restituisce l'ultima apparizione di un particolare carattere o
stringa di testo all'interno della stringa di testo che è stata chiamata con esso.
lunghezza ()
La funzione restituisce il numero di caratteri della stringa che viene chiamata
con essa.
rimuovere ()
La funzione cancella un determinato numero di caratteri della stringa di testo
con cui viene chiamata.
sostituire ()
Il figlio sostituisce un carattere tipografico o una sottostringa in cui esiste un
carattere tipografico o una sottostringa specifica nella stringa che viene
chiamata con esso.
Riserva ()
Lo slave riserva parte della memoria e la alloca per manipolare e modificare
la stringa di testo che viene chiamata con essa.
setCharAt ()
La funzione assegna il valore di un carattere che viene posizionato nella
stringa di testo con cui viene chiamato.
inizia con ()
La funzione verifica se la stringa di testo chiamata con essa inizia con gli
stessi caratteri che le sono stati passati.
sottostringa ()
Il bambino recupera una parte specifica della stringa di testo che viene
chiamata con essa.
toCharArray ()
La funzione converte l'intera o parte della stringa di testo che viene chiamata
con essa in una stringa di caratteri.
toInt ()
La funzione converte la stringa di testo con cui viene chiamata in un numero
intero.
toFloat ()
La funzione converte la stringa di testo con la quale viene chiamata in un
decimale.
toLowerCase ()
La funzione converte tutti i caratteri della stringa di testo con cui viene
chiamata in lettere minuscole.
toUpperCase ()
La funzione converte in maiuscolo tutti i caratteri della stringa di testo con
cui è chiamata.
trim ()
La funzione rimuove tutti gli spazi bianchi dall'inizio e dalla fine della stringa
di testo chiamata con essa.
Transazioni
[]
L'operatore fornisce l'accesso e restituisce un carattere specifico della stringa
utilizzata.
+
L'operatore combina (unisce) due stringhe di testo in una nuova stringa di
testo e quindi le restituisce.
=+
L'operando aggiunge qualsiasi tipo di dati alla fine di una particolare stringa
di testo.
==
Il coefficiente verifica che due stringhe di testo siano uguali tra loro.
<
L'operando controlla se la stringa di testo a sinistra è esattamente più grande
della stringa di testo a destra.
=<
L'operando controlla se la stringa di testo a sinistra è maggiore o uguale alla
stringa di testo a destra.
>
L'operando controlla se la stringa di testo a sinistra è più piccola della stringa
di testo a destra.
=>
L'operando controlla se la stringa di testo a sinistra è minore o uguale alla
stringa di testo a destra.
=!
Il parametro controlla se la stringa di testo a sinistra è diversa dalla stringa di
testo a destra.
Array in Arduino
Crea un array
Per questo motivo, dovresti fare attenzione a non commettere questo errore
quando accedi a qualsiasi elemento di un array. L'accesso a un elemento che
ricade dopo l'ultimo elemento (indicizzato maggiore della dimensione
dell'array con un valore di 1), o generalmente all'esterno dell'array, porta alla
lettura da una porzione di memoria destinata ad altri scopi. Leggendo questa
parte non restituisce valori validi o dati. Al contrario, scrivere su un pezzo di
memoria al di fuori della parte riservata di un array, quando si assegna un
valore a uno dei suoi elementi, è dannoso e più pericoloso della lettura di
quella parte, poiché può portare a risultati disastrosi e inaspettati come crash
del programma e tempi di inattività. Questo errore può essere difficile da
monitorare e perfezionare.
La spesa per il linguaggio C non verifica l'accesso agli array definiti nel
programma, sebbene un accesso superi i limiti di uno, a differenza di BASIC
o JAVA, per verificarlo.
x = mySensVals [4];
Array e loop
int i ;
for ( i = 0; i <5, i = i + 1) {
Serial.println ( myPins [ i ]);
}
Digita bool in Arduino
La variabile bool dichiarata memorizza uno dei seguenti due valori logici:
true o false, riservando un solo byte di memoria.
Struttura generale
bool var = val ;
Var rappresenta il nome della variabile da dichiarare e val è il valore da
assegnare a questa variabile, che può essere vero o falso.
Esempi
Il seguente esempio illustra come utilizzare il tipo bool per far lampeggiare la
luce attaccata alla gamba 5 ogni volta che viene premuto il cutter collegato
alla gamba 13:
void setup ()
{
pinMode (LEDpin, OUTPUT);
pinMode (switchPin, INPUT);
digitalWrite (switchPin, HIGH); // Activating the internal lifting
resistance
}
void loop ()
{
if (digitalRead (switchPin) == LOW)
{// Was the cutter pressed? Patches resistance keeps voltage always high
delay (100); // Delay in order to neglect the cutter bounce
running =! running; // Switch the value of the variable
digitalWrite (LEDpin, running); // Indicating the state of the variable
through light
}
}
byte in Arduino
Struttura generale
byte var_name;
byte var_name = Number; // 0 - 255
Esempi
Esempio di definizione di una variabile byte:
Si noti che i numeri dopo la virgola nel secondo caso verranno trascurati se la
divisione (o qualsiasi calcolo) restituisce un decimale.
Digita char in Arduino
I numeri vengono memorizzati nei byte riservati al tipo char che rappresenta
il valore del carattere corrispondente. Questi numeri sono indicati come
codifica e la codifica utilizzata qui è la codifica ASCII. Vai alla
documentazione della documentazione ASCII per vedere tutti i caratteri e il
valore numerico corrispondente per ciascuno. Ciò significa che è possibile
eseguire dei calcoli sui caratteri in cui viene utilizzato il valore ASCII (come
eseguire l'operazione A '+ 1' che darà il valore 66 corrispondente alla lettera
'B', poiché il valore numerico della lettera 'A' nel simbolo ASCII è 65). Dai
un'occhiata alla documentazione della funzione Serial.println () per maggiori
informazioni su come cambiare i caratteri e il loro valore numerico.
Char è un tipo con un segnale; Ciò significa che i valori numerici esso può
assumere range compreso tra 128 e 127. Se si desidera un byte senza un
segnale per memorizzare i dati in esso, usa il tipo byte.
Struttura generale
Esempi
Nei pannelli Due, la dimensione del tipo double è di 8 byte (64 bit), che è il
doppio del float.
Struttura generale
double var;
double var = val;
Esempi
Un esempio di definizione di una doppia variabile:
Note e avvertenze
Gli utenti che portano codici che contengono variabili di tipo doppio da altre
fonti devono provare a testare il codice per assicurarsi che la precisione
desiderata non differisca a causa delle diverse schede che verranno
implementate su di esso (in particolare le schede che si basano sui controller
ATmega ).
I numeri decimali in virgola mobile hanno una piccola precisione di 6-7 cifre
decimali dopo la virgola. In Arduino Uno e altre schede di controllo
ATMEGA, non c'è una risoluzione maggiore di questa usando double (double
float), poiché la dimensione di questo tipo è esattamente la stessa di float. Nei
pannelli Due, il tipo doppio fornisce una doppia precisione.
Fare operazioni matematiche sui numeri decimali è molto più lento che
eseguire le stesse operazioni sugli interi, quindi i numeri decimali dovrebbero
essere evitati se il tempo è critico per alcune funzioni e la funzione iterativa è
richiesta per ripetere le operazioni alla massima velocità e nel minor tempo
possibile . I programmatori di solito evitano di eseguire operazioni
aritmetiche sui numeri decimali e convertono e manipolano queste operazioni
per eseguirle solo su numeri interi al fine di aumentare la velocità del
programma.
Struttura generale
float var;
float var = val ;
Esempi
Un esempio di definizione di una variabile float ed esecuzione di un calcolo
su di essa:
float myfloat ;
galleggiante sensorCalbrate = 1.117;
int x;
int y;
float z;
x = 1;
y = x / 2; // il valore 0, poiché non può memorizzare le parti decimali y
conterrà la variabile
z = (float) x / 2.0; // (il valore 0.5) presta attenzione al numero 2.0 e non
usare 2 solo z conterrà la variabile
Sulle schede Arduino Uno (e sulle schede basate su ATMega ), il tipo int
riserva una dimensione di memoria di 16 bit (2 byte) in cui possono essere
memorizzati numeri compresi tra 32768- (il valore più piccolo uguale a 15 ^
2) e 32767 (il valore più grande e uguale 1 - 15 ^ 2). Nelle schede Arduino e
basate su SAMD (come MKR1000 e Zero), il tipo riserva una quantità di
memoria a 32 bit (4 byte) per memorizzare numeri da 2.147.483.648- (31 ^ 2-
) a 2.147.483.647 (1-31) ^ 2).
Struttura generale
Esempi
Il seguente esempio creerà una variabile chiamata countUp e le assegnerà un
valore iniziale; questa variabile verrà utilizzata come contatore crescente, in
quanto il suo valore verrà incrementato durante il loop e apparirà
sull'interfaccia di comunicazione seriale:
int countUp = 0; // Dichiara una variabile con numeri interi
void setup () {
Serial.begin (9600); // Configura e avvia la porta seriale
}
void loop () {
countUp ++; // countUp Aggiunge il valore 1 alla variabile
Serial.println ( countUp ); // Stampa il valore della variabile corrente sulla porta
seriale
ritardo (1000);
}
Note e avvertenze
Stringhe in Arduino
Le stringhe possono essere rappresentate in due modi. O le stringhe di testo
sono usate come uno dei tipi di dati in Arduino che è diventato parte del
kernel a partire dalla versione 0019, oppure una stringa di testo può essere
creata da un array di caratteri con il carattere nullo alla fine; il secondo
metodo verrà spiegato in questa pagina, poiché il primo metodo è spiegato in
dettaglio nella documentazione. L'oggetto stringa fornisce molte funzioni e
strumenti per manipolare le stringhe di testo, ma a spese della memoria.
Struttura generale
Tutti i seguenti esempi sono stringhe valide per le dichiarazioni:
Ciò significa che qualsiasi stringa di testo deve avere spazio aggiuntivo per
un carattere aggiuntivo oltre al contenuto che si desidera memorizzare nella
stringa. Questo è il motivo per cui Str2 e Str5 richiedono una dimensione di
8, anche se la frase " arduino " è solo 7, perché nell'ultima posizione
disponibile il carattere verrà aggiunto automaticamente nullo. Per Str4, la sua
dimensione verrà impostata automaticamente su 8 caratteri, tenendo conto del
carattere di terminazione. Nella matrice Str3, abbiamo aggiunto manualmente
il null null dell'espressione ('0 \').
Notare che è possibile che ci sia una stringa di testo che non ha un carattere di
terminazione (come impostare Str2 su 7 invece di 8). Ciò non funzionerà
correttamente nella maggior parte delle funzioni che trattano le stringhe,
quindi dovresti evitare di farlo inavvertitamente. Se noti che il
comportamento del programma è diventato un po 'strano (specialmente
quando si tratta di caratteri e non di stringhe), è probabile che il carattere di
terminazione sia la causa del problema.
Esempi
Un esempio di definizione di un array utilizzando un parametro * e
stampando il contenuto di questo array sull'interfaccia seriale:
char * myStrings [] = {"This is string 1", "This is string 2", "This is string 3",
"This is string 4", "This is string 5", "This is string 6"};
void setup () {
Serial.begin (9600);
}
void loop () {
for (int i = 0; i <6; i ++) {
Serial.println (myStrings [i]);
delay (500);
}
}
Struttura generale
Esempi
word w = 10000;
La parola chiave void in Arduino
Struttura generale
void function ()
{
// Il blocco di codice che verrà eseguito dal codice
}
Esempi
Il codice seguente spiega come utilizzare void con la funzione setup () e loop
() per indicare che non restituiranno nulla al termine della loro
implementazione:
// Ma "loop" e "setup" non verranno eseguiti per tutti i task all'interno delle due
funzioni
// Nessuno dei due restituisce alcun dato al programma superiore che li ha chiamati
void setup ()
{
// ...
}
void loop ()
{
// ...
}
Capitolo III
Costanti e variabili
Gli interi fissi sono numeri utilizzati direttamente nel codice come 123. Per
impostazione predefinita, questi numeri vengono trattati come numeri interi
ma possono essere convertiti in altri tipi di numeri utilizzando un
modificatore come U o L.
I numeri interi vengono trattati come numeri interi basati sempre sul numero
10 ( ovvero rappresentato da decimali per impostazione predefinita).
Tuttavia, altre formule possono essere utilizzate per scrivere numeri, poiché
la base del numero varierà.
Otto (Base 8)
I numeri utilizzati per rappresentare i valori di questo sistema sono da 0 a 7. I
valori da scrivere e rappresentati in questo sistema cominciare con il
coordinatore 0 (zero).
n = 0101; // ((1 * 8 ^ 2) + (0 * 8 ^ 1) + 1) == 65 in decimale
È probabile che un errore logico difficile da trovare nel codice derivi da una
costante zero non intenzionale; questo porta l'interprete a interpretare questa
costante come un valore di otto durante la scarica del codice.
Gli interruttori U e L.
'u' o 'U': questa opzione viene utilizzata alla fine della costante numerica per
convertirla in un tipo senza segno come 33u.
'l' o 'L': questo interruttore viene utilizzato alla fine della costante numerica
per convertirla in un tipo di 'numero lungo' come 100000L.
'ul' o 'UL': i due interruttori vengono utilizzati insieme alla fine della costante
numerica per convertirla in un tipo di 'numero lungo senza segnale' come
32767ul.
Costanti in Arduino
La costante è falsa
Il valore logico falso è un valore di errore ed è definito come numericamente
zero (0).
La costante è vera
Un vero booleano è un valore vero ed è definito come uno (1)
numericamente. Infatti, vero rappresenta una più ampia gamma di valori
numerici che solo 1. Qualsiasi valore diverso da zero viene logicamente
indicato come vero. Di conseguenza, i valori 1, 2, e 200 indicano tutti
logicamente vera.
Tieni presente che true e false sono minuscole, a differenza di altre costanti
come HIGH, LOW, INPUT, ecc.
Definizione dello stato delle gambe (livello di tensione)
Durante la lettura o la scrittura del valore delle gambe digitali, troviamo che
si tratta di due valori che non sono terzo; una delle gambe digitali può essere
presa o impostata su ALTO o BASSO.
Difficile ALTO
Il significato del valore fisso ALTO, quando si ha a che fare con le gambe
della scheda Arduino, varia a seconda della posizione dell'uomo; cioè, l'uomo
è un INGRESSO o un'USCITA. Se man è impostato su un uomo che è
entrato passando il valore INPUT alla funzione pinMode () e viene letto
utilizzando la funzione digitalRead (), il controller ATmega riporterà il valore
HIGH se:
La tensione applicata alla gamba è maggiore di 3,0 V sui pannelli con una
tensione di 5 V o
La tensione applicata alla gamba è maggiore di 2,0 V nei pannelli da 3,3 V.
L'uomo può anche essere impostato su un input man passando la costante
INPUT alla funzione pinMode () e quindi digitando il valore HIGH su di essa
utilizzando la funzione digitalWrite (). Questo attiverà la resistenza di
sollevamento interna associata a quell'uomo. L'attivazione di questa
resistenza aumenterà lo sforzo dell'uomo ad ALTO a meno che non venga
ridotto a BASSO collegandolo a un circuito esterno. Questo è molto simile a
quello che fa la costante INPUT_PULLUP quando viene passata alla
funzione pinMode (), di cui parleremo più avanti.
5 volt a 5V, o
3,3 V nei pannelli 3,3 V.
Quando un uomo si trova in questo stato, è possibile prelevare corrente per
accendere una luce LED, ad esempio collegandovi uno dei suoi poli e
collegando l'altro polo con resistenza in sequenza al polo di terra.
Difficile BASSO
Il significato del valore LOW fisso varia anche a seconda della posizione
dell'uomo; Se man è impostato su un input man passando il valore INPUT
alla funzione pinMode () e viene letto utilizzando la funzione digitalRead (),
il controller ATmega riporterà il valore LOW se:
La tensione applicata alla gamba è inferiore a 1,5 V nei pannelli con una
tensione di 5 V o
La tensione applicata alla gamba è inferiore a circa 1,0 V nei pannelli da 3,3
V.
Quando la posizione di un uomo è impostata su un'uscita man passando la
costante OUTPUT alla funzione pinMode (), e quindi digitando il valore
LOW su di essa utilizzando la funzione digitalWrite (), la tensione di
quell'uomo è 0 volt (sia a 5V che a 3,3V pannelli). Quando l'uomo si trova in
questa situazione, è possibile scaricare una corrente, come ad esempio un
palo della luce ad esso collegato e l'altro polo con resistenza sulla sequenza
con un polo 5V + (o 3.3V +) per accenderlo.
INPUT difficile
Le gambe della scheda Arduino impostate come gambe di ingresso
utilizzando la costante INPUT con la funzione pinMode () si dice che siano in
stato di alta impedenza. Le gambe impostate sulle gambe INPUT rendono i
carichi sul circuito che stai esaminando molto piccoli, equivalenti a una
resistenza di sequenza di 100 ohm davanti all'uomo. Ciò rende le gambe
molto utili nella lettura dei valori del sensore.
Se una delle gambe è impostata come input man e viene utilizzata per leggere
un interruttore, la condizione dell'uomo sarà "fluttuante" quando il cutter è
aperto; questo produrrà risultati inaspettati. Per garantire che le condizioni
della gamba siano lette correttamente quando il cutter è aperto, utilizzare una
resistenza esterna di sollevamento o abbassamento con questa gamba.
L'obiettivo di collegare la resistenza a quest'uomo è di regolare il suo sforzo a
uno stato noto quando il cutter è aperto. Una resistenza di 10 k rum أdi solito
viene utilizzato, che è abbastanza piccolo da evitare che la gamba di ingresso
fluttui e abbastanza grande da non tirare una grande quantità di corrente
quando il cutter è chiuso. Vedi questo tutorial per maggiori informazioni.
La costante INPUT_PULLUP
Il controller ATmega nella scheda Arduino ha una resistenza di sollevamento
interna collegata a ciascuna gamba delle gambe di ingresso e uscita che
possono essere controllate. Se si preferisce utilizzare questa resistenza invece
di aggiungere una resistenza di sollevamento esterna, è possibile farlo
passando la costante INPUT_PULLUP alla funzione pinMode () durante la
configurazione della gamba. Dai un'occhiata a questo tutorial, che contiene
un esempio pratico di ciò che abbiamo menzionato.
OUTPUT difficile
Si dice che le gambe della scheda Arduino impostate come gambe di uscita
utilizzando la costante OUTPUT con la funzione pinMode () siano in uno
stato di alta impedenza. Ciò significa che possono fornire corrente sufficiente
ad altri dispositivi e circuiti ad essi collegati. Qualsiasi uomo con le gambe
ATmega può dare o scaricare altri dispositivi e circuiti fino a 40 mA. Il
superamento di questo valore di corrente danneggia il controller, quindi è
necessario utilizzare resistori o elementi elettronici simili per determinare la
corrente quando si collegano parti elettroniche che richiedono grandi quantità
di corrente come i motori.
Struttura generale
// ....
Note e avvertenze
L'espressione definisce # o la parola chiave const?
È possibile utilizzare la parola chiave const o #define per creare costanti
numeriche o di testo. Per gli array, devi solo usare const con essi. In generale,
l'uso della parola chiave const è preferibile all'uso dell'espressione define #.
Esempi
int gPWMval; // Any function can see and access this variable
void setup ()
{
// ...
}
void loop ()
{
int i; // loop is only visible within the variable "i" loop
float f; // Only the loop is also visible within the variable "f" loop
// ...
for (int j = 0; j <100; j ++) {
// only for available within the variable j
}
La parola chiave statica viene utilizzata quando si creano variabili visive per
una sola funzione al fine di preservarne il contenuto dopo l'esecuzione di
quella funzione invocata e fino alla successiva chiamata ad essa, a differenza
delle variabili locali che vengono create e distrutte ogni volta che la funzione
viene chiamata.
Struttura generale
Esempi
int thisTime;
int total;
void setup ()
{
Serial.begin (9600);
}
void loop ()
{// randomWalk test function
stepsize = 5;
thisTime = randomWalk (stepsize);
Serial.println (thisTime);
delay (10);
}
return place;
}
La parola chiave volatile, quando usata per definire una variabile, è una
direttiva per il banchiere stesso. Il banchiere è un programma che converte il
codice C / C ++ in un codice eseguibile comprensibile dall'hardware; questo
codice contiene i comandi effettivi per il controller sulla scheda Arduino che
gli dicono cosa fare.
La variabile deve essere definita con la parola chiave volatile ogni volta che il
suo valore può essere modificato da qualcosa al di fuori del controllo del
frammento di codice all'interno del quale appare questa variabile (come
l'esecuzione simultanea di una stringa). In Arduino, l'unico luogo in cui è
probabile che ciò accada sono i frammenti di codice relativi al distretto
chiamati programmi ISR.
Se si utilizza la parola volatile con una variabile più grande di un byte (2 byte
come numero intero, 4 byte come numero lungo, ecc.), Il controller non sarà
in grado di leggerlo in un passaggio perché l'architettura del controller è
spesso 8 bit (assicurati che l'architettura sia Pannello di controllo). Ciò
significa che mentre i primi otto bit della variabile vengono letti in una parte
del codice (come il ciclo), l'interrupt potrebbe aver già modificato gli altri
otto bit (se la dimensione della variabile è di 16 bit). Questo otterrà un valore
casuale per la variabile.
Cambia lo stato del piede connesso con la luce LED quando si verifica
un'interruzione sul piede 2:
void setup ()
{
pinMode (pin, OUTPUT);
attachInterrupt (digitalPinToInterrupt (2), blink, CHANGE);
}
void loop ()
{
digitalWrite (pin, state);
}
void blink ()
{
state =! state;
}
Capitolo IV
Strutture di controllo
Interruzione di parole chiave in Arduino
La parola chiave break viene utilizzata per uscire dai cicli for, while o do ...
durante l'iterazione, bypassando il codice successivo e le condizioni di ciclo
specificate e uscendo da esse. Utilizzato anche per uscire dall'interruttore
programmatico ... espressione case.
Struttura generale
rompere;
Esempi
Nel codice seguente, il controller esce dal ciclo for quando il valore del
sensore misurato supera una certa soglia:
for (x = 0; x <255; x ++)
{
analogWrite (PWMpin, x);
sens = analogRead (sensorPin);
if (sens> threshold) {// Ensure that the measured value does not exceed
the threshold
x = 0;
break;
}
delay (50);
}
Continua la parola chiave in Arduino
Il tasto continue passa il codice successivo nel ciclo di iterazione (come for,
while o do ... while iterations) per controllare l'espressione condizionale di
quel ciclo e quindi il ciclo del ciclo viene ripreso normalmente. Fare questa
istruzione è simile a fare un salto nel ciclo per saltare l'esecuzione quando
viene soddisfatta una certa condizione.
Struttura generale
Continua;
Esempi
Nel seguente codice, il valore da 0 a 255 sarà scritto sul piede PWMpin con
saltando i valori del campo di misura 41 a 119:
Struttura generale
do
{
// The code block to be executed
} while (condition);
Esempi
} while (x <100);
Notare che il blocco else if può essere utilizzato con o senza il blocco else
alla fine e viceversa. Il numero di volte in cui l'uso del blocco else if in
qualsiasi espressione condizionale è illimitato.
Struttura generale
if (temperature> = 70)
{
// Danger! Stop the system
}
else if (temperature> = 60 && temperature <70)
{
// Warning! You must send signals to alert the user
}
else
{
// Safety! Complete the normal tasks
}
Episodio per iterativo in Arduino
Struttura generale
void setup ()
{
// This example does not require any configuration
}
void loop ()
{
for (int i = 0; i <= 255; i ++) {
analogWrite (PWMpin, i);
delay (10);
}
}
Note e avvertenze
Il ciclo for in C è più flessibile di cicli for in alcune lingue come il BASIC.
Uno o tutti e tre gli elementi principali possono essere rimossi dal ciclo,
mantenendo intatto il punto e virgola. Inoltre, le espressioni di
inizializzazione, condizione e passo possono essere qualsiasi espressione in
linguaggio C valida con variabili non correlate e possono utilizzare qualsiasi
tipo di dati in C, inclusi i decimali. L'utilizzo di questi tipi insoliti di
espressioni con il ciclo for fornisce una soluzione ad alcuni rari problemi
software.
2,3,4,6,9,13,19,28,42,63,94
Esempi
salvataggio:
Note e avvertenze
D'altra parte, ci sono situazioni in cui l'uso della parola goto è utile e
semplifica notevolmente il codice. Uno di questi casi è una frammentazione
del loop fork o un blocco if condizionale a determinate condizioni.
Struttura generale
if (condition)
{
// The block of code to execute when the condition is met
}
Esempi
if (x> 120) {
digitalWrite (LEDpin1, HIGH);
digitalWrite (LEDpin2, HIGH);
}
Note e avvertenze
Transazioni di budget
x == y (y è uguale a x)
X! = y (y non è uguale a x)
x <y (y è esattamente minore di x)
x> y (y è esattamente maggiore di x)
x <= y (y è minore o uguale a x)
x> = y (y è maggiore o uguale a x)
Struttura generale
ritorno;
L'esempio seguente mostra come creare una funzione per bilanciare il valore
misurato di un sensore con una soglia specifica:
int checkSensor () {
if (analogRead (0)> 400) {
return 1;
}
else {
return 0;
}
}
void loop () {
return;
La parola chiave break viene solitamente utilizzata alla fine di ogni stato del
caso switch ... per uscirne dopo aver trovato lo stato e aver eseguito il blocco
associato. Se l'interruzione chiave non viene utilizzata in quel caso, il caso
switch ... continuerà ad esaminare le condizioni ed eseguire i blocchi associati
fino al raggiungimento dell'interruzione o alla fine.
Struttura generale
switch (var) {
case label1:
// The first code that will be executed when the first case is matched
break;
case label2:
// The second code will be executed when the second case is matched
break;
default:
// The default code that will be executed when no case matches
// This case is optional
}
Transazioni
var
La variabile di bilanciare il valore con valori multipli (stati). I tipi di dati
consentiti sono: intero, carattere tipografico.
lable1
La prima costante che verrà bilanciata con var. I tipi di dati consentiti sono:
intero, carattere tipografico.
lable2
La seconda costante che verrà bilanciata con var. I tipi di dati consentiti sono:
intero, carattere tipografico.
Esempi
Struttura generale
while (condition) {
// blocco da duplicare
}
Transazioni
condizione
Un'espressione logica il cui valore è vero o falso.
Esempi
var = 0;
while (var <200) {
// The code written here will be repeated 200 times
var ++;
}
Capitolo V
Funzioni
Struttura generale
digitalRead (pin)
Transazioni
pin
Un numero che indica l'uomo digitale il cui valore deve essere letto.
Valori restituiti
Restituisce il valore ALTO o BASSO che rappresenta il valore numerico del
piedino del piedino.
Esempi
Imposta il valore del piede 13 sullo stesso valore del piede 7 definito come
input foot:
int ledPin = 13; // There is a LED light connected to the 13 foot digital
int inPin = 7; // Push button connected to 7 digital foot
int val = 0; // Changer to store the read value
void setup ()
{
pinMode (ledPin, OUTPUT); // 13 digital foot set as the output foot
pinMode (inPin, INPUT); // Set the 7 foot digital as the entered foot
}
void loop ()
{
val = digitalRead (inPin); // Read the income blood
digitalWrite (ledPin, val); // Adjust the light status to the value of the button
}
Note e avvertenze
Struttura generale
Transazioni
pin
Un numero che indica l'uomo numerico su cui scrivere il valore.
valore
Il valore HIGH o LOW da scrivere nel pin man.
Valori restituiti
Esempi
Impostare la modalità digitale 13 man sull'uscita man e quindi invertirne il
valore da HIGH a LOW e viceversa ogni secondo:
void setup ()
{
pinMode (13, OUTPUT); // 13 digital man set it as a man came out
}
void loop ()
{
digitalWrite (13, HIGH); // HIGH Adjust the value of 13 digital man to
delay (1000); // Waiting for one second to pass
digitalWrite (13, LOW); // LOW Adjust the value of the 13 digital man
to
delay (1000); // Waiting for one second to pass
}
Note e avvertenze
Le gambe di ingresso simili possono essere utilizzate anche come gambe
digitali, quindi denominate A0, A1, ecc.
Struttura generale
pinMode (pin, modalità)
Transazioni
pin
Un numero che indica l'uomo digitale da configurare in modalità.
modalità
La modalità che determina il comportamento del pin è INPUT, OUTPUT o
INPUT_PULLUP. Una spiegazione completa del comportamento e delle
funzioni delle gambe digitali può essere trovata in questa pagina.
Valori restituiti
Non viene restituito nulla.
Esempi
Impostare la modalità digitale 13 man sull'uscita man e quindi invertirne il
valore da HIGH a LOW e viceversa ogni secondo:
void setup ()
{
pinMode (13, OUTPUT); // 13 digital man set it as a man came out
}
void loop ()
{
digitalWrite (13, HIGH); // HIGH Adjust the value of 13 digital man to
delay (1000); // Waiting for one second to pass
digitalWrite (13, LOW); // LOW Adjust the value of the 13 digital man to
delay (1000); // Waiting for one second to pass
}
Note e avvertenze
Le gambe di ingresso simili possono essere utilizzate anche come gambe
digitali, quindi denominate A0, A1, ecc.
Struttura generale
ritardo ( ms )
Transazioni
SM
Valori restituiti
Non viene restituito nulla.
Esempi
Utilizzare la funzione delay () per mettere in pausa il programma dal lavoro
per un secondo prima di invertire il caso di uscita collegato alla luce LED:
int ledPin = 13; // Luce LED collegata all'uomo 13
void setup ()
{
pinMode (ledPin, OUTPUT); // As a man led out ledPin initialize the
man
}
void loop ()
{
digitalWrite (ledPin, HIGH); // turning the light on
delay (1000); // Wait for one second
digitalWrite (ledPin, LOW); // Turn off the light
delay (1000); // Wait for one second
}
Note e avvertenze
Sebbene sia molto facile creare una luce LED lampeggiante con la funzione
delay () e molti codici utilizzano questa funzione per creare ritardi di tempo
richiesti da alcune attività, come il loro utilizzo per evitare il problema del
rimbalzo del pulsante quando viene premuto (debouncing del pulsante) - ma
l'uso della funzione delay () nel codice è accompagnato da molti svantaggi.
Durante l'esecuzione del processo di ritardo al richiamo della funzione, i
valori dei sensori non verranno letti, i calcoli non verranno eseguiti, e la
condizione di uno non saranno modificati o controllati ... ecc, così chiamata
questa funzione interromperà il resto delle attività e delle operazioni e le
interromperà per un certo periodo di tempo. Invece, guarda la funzione millis
() e l'esempio sotto per gestire i ritardi e controllare i tempi in modo efficace.
I programmatori esperti e competenti di solito evitano di usare la funzione
delay () per ritardare gli eventi e controllare la loro temporizzazione quando il
periodo di ritardo supera alcune decine di millisecondi a meno che il codice
scritto non sia molto semplice.
Struttura generale
delayMicroseconds (us)
Transazioni
noi
Un intero senza segno rappresenta il tempo nel microsecondo in cui il
programma è in pausa.
Valori restituiti
Non viene restituito nulla.
Esempi
Il codice seguente prepara l'ottavo uomo ad agire come un uomo in uscita.
L'uomo trasmette quindi una serie di impulsi di circa 100 microsecondi di
lunghezza. Dovresti concentrarti sulla parola "quasi" perché l'ora è
assolutamente imprecisa e questo è dovuto alla perdita di tempo
nell'implementazione di altri comandi e istruzioni nel codice:
void setup ()
{
pinMode (outPin, OUTPUT); // As a man came out outPin create the man
}
void loop ()
{
digitalWrite (outPin, HIGH); // Make the man's condition high
delayMicroseconds (50); // Pause for 50 microseconds
digitalWrite (outPin, LOW); // Make the man's condition low
delayMicroseconds (50); // Pause for 50 microseconds
}
Note e avvertenze
Struttura generale
time = micros ()
Valori restituiti
Restituisce un numero lungo senza segno che rappresenta il tempo di avvio
della scheda Arduino del programma corrente al momento in cui viene
chiamata la funzione micros ().
Esempi
Usa la funzione micros () per scoprire da quanto tempo è iniziata la scheda
Arduino:
tempo non firmato;
void setup () {
Serial.begin (9600);
}
void loop () {
Serial.print ("Time:");
time = micros ();
Note e avvertenze
Ricorda: ci sono 1.000 microsecondi in ogni millisecondo e 1.000.000 di
microsecondi in ogni singolo secondo.
Funzione Arduino millis ()
Struttura generale
time = millis ()
Valori restituiti
Un numero lungo senza segno che rappresenta l'ora di inizio della scheda
Arduino del programma corrente viene restituito al momento in cui la
funzione millis () viene chiamata in millisecondi.
Esempi
Usa la funzione millis () per scoprire da quando la scheda Arduino ha iniziato
a funzionare:
tempo non firmato;
void setup () {
Serial.begin (9600);
}
void loop () {
Serial.print ("Time:");
time = millis ();
Note e avvertenze
() Addominali
La funzione abs () calcola il valore assoluto del numero passato ad essa.
Vincola ()
La funzione constrain () limita un numero all'interno di un campo specificato.
() Cos
La funzione cos () calcola l'angolo passato ad essa.
() Carta geografica
La funzione map () riposiziona un numero dal dominio in cui si trova a un
altro dominio.
() Max
La funzione max () restituisce il valore più grande passato ad essa.
() Min
Min () restituisce il valore più piccolo passato ad esso.
() Pow
La funzione pow () calcola il valore yx , che si solleva la base Y alla potenza
x dei due valori che vengono passati a esso.
Casuale ()
La funzione random () genera e restituisce un numero pseudo-casuale.
() Seme casuale
La funzione randomSeed () crea il seme che il generatore di numeri pseudo-
casuali utilizza nel processo di generazione.
() Peccato
La funzione sin () calcola il seno dell'angolo a cui è passato.
() Mq
La funzione sq () calcola il numero di quadrati (moltiplicato per il numero
stesso) e lo restituisce.
Sqrt ()
La funzione sqrt () calcola la radice quadrata del numero passato ad essa.
() Tan
La funzione tan () calcola la tangente dell'angolo passato a.
Gestione e verifica dei caratteri tipografici in Arduino
isAlpha ()
La funzione isAlpha () controlla se il carattere passato è un carattere
alfabetico.
isAlphaNumeric ()
La funzione isAlphaNumeric () controlla se il carattere che le viene passato è
un carattere alfabetico o un numero.
isAscii ()
La funzione isAscii () controlla se il carattere passato ad essa è uno dei
caratteri Ascii.
isControl ()
La funzione isControl () controlla se il carattere passato è un carattere di
controllo.
isDigit ()
La funzione isDigit () controlla se il carattere passato è un numero.
isGraph ()
La funzione isGraph () verifica se il carattere tipografico passato ad essa è
stampabile e contiene del contenuto visibile (lo spazio è stampabile ma non
ha contenuto visivo).
isHexadecimalDigit ()
IsHexadecimalDigit () verifica se il carattere passato è una cifra esadecimale
(cifra esadecimale); cioè è tra AF o 9-0.
isLowerCase ()
La funzione isLowerCase () controlla se al carattere passato ad essa viene
passato un carattere alfabetico minuscolo .
isPrintable ()
IsPrintable () controlla se il carattere passato è stampabile (cioè uno dei
caratteri che produce un output anche se è vuoto).
isPunct ()
La funzione isPunct () controlla se il carattere tipografico passato ad essa è un
segno di punteggiatura (cioè il carattere tipografico è virgola, punto e virgola,
punto esclamativo, ecc.)?
isSpace ()
La funzione isSpace () controlla se il carattere che le viene passato è uno
spazio.
isUpperCase ()
La funzione isUpperCase () controlla se il carattere passato ad essa è un
carattere alfabetico minuscolo .
isWhitespace ()
La funzione isWhitespace () controlla se il carattere che le viene passato è
uno spazio bianco.
Funzioni di conversione di Arduino
byte ()
La funzione byte () converte il valore passato ad essa tipo byte.
char ()
La funzione char () converte il valore passato nel tipo char.
galleggiante ()
La funzione float () converte il valore passato (float).
int ()
La funzione int () converte il valore passato nel tipo intero.
lungo ()
La funzione long () converte il valore passato nel tipo "long".
parola ()
La funzione word () converte il valore passato nel tipo di parola.
Funzioni di controllo provinciale in Arduino
Attachinterrupt ()
La funzione attachInterrupt () attiva uno specifico interrupt esterno su una
delle gambe nella scheda arduino .
() Scollegainterrupt
La funzione detachInterrupt () disabilita una specifica interruzione esterna
associata a una delle gambe della scheda Arduino.
() Interrompe
La funzione interrupts () disattiva gli interrupt dopo averla interrotta
chiamando la funzione nointerrupts ().
() Nointerrupts
La funzione noInterrupts () disabilita tutti gli interrupt nella scheda Arduino.
Capitolo VI
Strumenti aggiuntivi
Struttura generale
Il codice seguente mostra come scrivere i dati nella memoria flash e poi
leggerli di nuovo:
// Memorize some integerless numbers
const PROGMEM uint16_t charSet [] = {65000, 32796, 16843, 10, 11234};
void setup () {
Serial.begin (9600);
while (! Serial); // Waiting for serial port connection
Serial.println ();
}
void loop () {
// Write here your program to execute it frequently
}
Quando si lavora con una grande quantità di testo, come avere un progetto sul
display LCD, è una buona idea creare e configurare un array di stringhe di
testo per memorizzarle. Poiché le stringhe di testo stesse sono array, è
necessario utilizzare una matrice 2D. L'esempio seguente illustra l'idea di
collocare grandi quantità di dati in memoria di programma:
/*
PROGMEM stringa demo
Come memorizzare una tabella di stringhe nella memoria del programma
(flash),
e recuperarli.
Informazioni riassunte da:
http://www.nongnu.org/avr-libc/user-manual/pgmspace.html
char buffer [30]; // Make sure that this matrix is large enough to
accommodate the largest text string
void setup ()
{
Serial.begin (9600);
while (! Serial); // Wait for the serial port to connect
Serial.println ("OK");
}
void loop ()
{
/ * Requires the use of a strings table in memory
Use special functions to retrieve data
A text string from the strcpy_P program memory copies the function
(In our case buffer is the variable memory)
Big enough RAM Make sure that the portion is reserved in memory
To recover data from program memory
*/
Note e avvertenze
Si noti che le variabili devono essere variabili generali o variabili locali
statiche (definite utilizzando la parola chiave static) per poter utilizzare la
parola PROGMEM con esse.
const char long_str [] PROGMEM = "Ciao, vorrei parlarti un po 'di me. \ n";
const static char long_str [] PROGMEM = "Ciao, vorrei parlarti un po 'di me.
\ n"
Chiamata estesa F ()
Capitolo VII
Proteus
Arduino UNO
Resistenza da 220 ohm
LED ROSSO
. Cosa manca ora finché il cerchio non è completo? Non c'è dubbio che sia il
suolo. Per scegliere il terreno, seguire i passaggi illustrati di seguito. Pertanto,
abbiamo completato le impostazioni di connessione per il circuito sul
programma della proteina.
Nota:
void setup () {
// put your setup code here, to run once:
pinMode (LED_Pin, OUTPUT);
}
void loop () {
// put your main code here, to run repeatedly:
digitalWrite (LED_Pin, HIGH);
delay (1000);
digitalWrite (LED_Pin, LOW);
delay (1000);
}
4. Dopo esserti assicurato che il codice sia privo di errori, vai al menu di
disegno e scegli Esporta binario compilato. Questo serve per estrarre il file
esadecimale. Che viene utilizzato per programmare i microcontrollori.
. Andando nella cartella in cui è stato salvato il progetto, troverai un file .hx .
Con lo stesso nome del progetto.
6. Tornare al cerchio in Proteus, premere Arduino per aggiungere il file di
script come mostrato nei passaggi seguenti.
Discussione
void setup () {
// put your setup code here, to run once:
pinMode (LED_Pin, OUTPUT);
}
void loop () {
// put your main code here, to run repeatedly:
digitalWrite (LED_Pin, HIGH);
delay (1000);
digitalWrite (LED_Pin, LOW);
}