Jeffrey Cross
Jeffrey Cross

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.

Delež

Pustite Komentar