Funkcije pomočnika Arduino
Nekaj koristnih funkcij za Arduino.
Utripa LED
Ta funkcija utripa LED-lučko tolikokrat, kot je zahtevano, pri zahtevani stopnji utripanja.
void blinkLED (bajt targetPin, int numBlinks, int blinkRate) {za (int i = 0; i <numBlinks; i ++) {digitalWrite (targetPin, HIGH); zakasnitev (blinkRate); digitalWrite (targetPin, LOW); zakasnitev (blinkRate); }}
Utripajoča številka
Nazaj v dobi zorenja računalništva so včasih stvari šle dovolj narobe, da je bil edini način sporočanja napake uporabniku, da utripne svetlobo. Pri delu z mikrokontrolerji je to včasih uporabno. Naslednja funkcija utripa zaporedje, da vizualno označi številko.
void blinkNumber (char * numString) {int versLength = strlen (numString); zamuda (200); za (int i = 0; i <versLength; i ++) {int number = numString [i] -48; if (število == 0) {blinkLED (LED_A, 1,20); zamuda (160); } če (številka> 0 && številka <10) utripa (LED_A, številka, 200); zamuda (400); }}
Buzzing Buzzer
Posplošena generalizirana funkcija, ki omogoča uporabo Piezo zvočnikov, ne da bi morali razmišljati skozi matematiko vsakič, ko želite slišati določeno zvočno frekvenco. Vse, kar morate storiti, je povedati funkciji, ki jo želite uporabiti, pogostosti, ki jo želite slišati, in trajanju predvajanja te frekvence.
void buzz (int targetPin, dolga frekvenca, dolga dolžina) {dolga zakasnitev = 1000000 / frekvenca / 2; dolge številke = frekvenca * dolžina / 1000; za (long i = 0; i <numCycles; i ++) {digitalWrite (targetPin, HIGH); zakasnitev mikroskopov (zakasnitev); digitalWrite (targetPin, LOW); zakasnitev mikroskopov (zakasnitev); }}
Preverjanje prostega RAM-a
ATmega328 ima 32K programskega pomnilnika, vendar samo 2K SRAM-a. Programski pomnilnik je za kodo in RAM je za dinamične spremenljivke. Pravzaprav je dejansko manj kot 2K RAM-a, ker bodo knjižnice Arduino zasedle nekaj dinamičnega pomnilnika zase.
Okolje Arduino vam bo z veseljem omogočilo, da sestavite program, ki presega omejitve SRAM za mikrokrmilnike, vendar bo programsko vedenje postalo popolnoma nepredvidljivo, koda bo naredila bizarne stvari in / ali se zrušila. Ta funkcija vrne število brezplačnih bajtov v SRAM-u.
int memoryTest () {int byteCounter = 0; bajt * byteArray; while ((byteArray = (byte *) malloc (byteCounter * sizeof (bajt)))! = NULL) {byteCounter ++; brezplačno (byteArray); } brezplačno (byteArray); povratni byteCounter; }
Preslikava večjih številk
To je različica zemljevid funkcijo, ki je sposobna obdelovati večje pozitivne številke, čeprav ne uspe z negativnimi.
long mapBig (nepodpisano dolgo x, nepodpisano dolgo in_min, nepodpisano dolgo in_max, nepodpisano dolgo out_min, nepodpisano dolgo out_max) {return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
Povezovanje z WiFi
Novi Arduino WiFi ščit je zelo lep plošča. Vendar pa je obravnavanje različnih vrst omrežij lahko problematično. Naslednji odrezek kode se bo poskušal povezati z WPA / WPA2 šifrirano WiFi omrežjem, katerega SSID je shranjen v ssid in geslo, shranjeno v mimo spremenljivko. Če pa ne morete ugotoviti, da se bo omrežje vrnilo nazaj in skeniralo za odprta omrežja WiFi,
if (WiFi.status () == WL_NO_SHIELD) {Serial.println ("WiFi ščit ni prisoten"); medtem ko (res); } if (stringFromCharString (ssid)! = "") {medtem (status! = WL_CONNECTED) {timesWeTriedToConnect ++; Serial.print (F ("Poskus povezovanja s SSID (poskus")); Serial.print (timesWeTriedToConnect); Serial.print (F ("od 5):")); Serial.println (ssid); status = WiFi.počen (ssid, pass); // Povežite se z omrežjem WPA / WPA2. zamuda (2000); if (timesWeTriedToConnect> = 5); }} if (status! = WL_CONNECTED) {Serial.print ("Ni mogoče povezati ssid"); Serial.print (ssid); Serial.println ("'"); Serial.println ("** Skeniranje za odprta omrežja **"); bajt numSsid = WiFi.scanNetworks (); Serial.print ("število razpoložljivih omrežij:"); Serial.println (numSsid); za (int thisNet = 0; ta mreža
Branje in zapisovanje v EEPROM
Včasih je lahko koristno shranjevanje številk ali drugih podatkov v Arduinov EEPROM, da se zaščiti pred kolesarjenjem. Z vključeno knjižnico EEPROM je dejansko zelo enostavno napisati številko v EEPROM,
void setNumber (nepodpisan dolg ctr) {Serial.print ("Nastavitev številke v EEPROM v ="); Serial.println (ctr); EEPROM.write (4, (ctr & 0xFFFFFFFF) >> 24); // zapišemo MSB EEPROM.write (3, (ctr & 0xFFFFFF) >> 16); // napišite 3.B EEPROM.write (2, (ctr & 0xFFFF) >> 8); // zapišemo 2.B EEPROM.write (1, ctr & 0xFF); // napišite LSB
in nato preberete številko nazaj,
nepodpisano dolgo getNumber () {nepodpisano dolgo ctr; // začetna nastavitev števila if (EEPROM.read (5)! = 1) {// če je nastavljeno število napačno Serial.println ("Inicializacijska številka v EEPROM-u"); EEPROM.write (1,0); // zapiši LSB nič EEPROM.write (2,0); // pisanje 2.B nič EEPROM.write (3,0); // zapišemo 3B nič EEPROM.write (4,0); // zapišemo MSB nič EEPROM.write (5,1); // stanje nastavitve števca je res} // dobili številko - dodajte bajtov za 32-bitno številko ctr = (EEPROM.read (4) << 24) + (EEPROM.read (3) << 16) + (EEPROM. beri (2) << 8) + (EEPROM.read (1)); Serial.print ("Pridobivanje številke iz EEPROM ="); Serial.println (ctr); return ctr; }
Kode za to delovno mesto so zagotovili Rob Faludi in Alasdair Allan.Ponovno je objavljen na spletnem mestu MAKE z dovoljenjem.