Jeffrey Cross
Jeffrey Cross

Arduino Helper Funktioner

Här är några användbara funktioner för Arduino.

Blinkar en LED

Denna funktion blinkar en LED-lampa så många gånger som efterfrågan, vid önskad blinkning.

void blinkLED (byte targetPin, int numBlinks, int blinkRate) {för (int i = 0; i <numBlinks; i ++) {digitalWrite (targetPin, HIGH); fördröjning (blinkRate); digitalWrite (targetPin, LOW); fördröjning (blinkRate); }}

Blinkar ett nummer

Tillbaka i daggrynsåldern i databehandling ibland gick det fel så att det enda sättet att kommunicera ett fel till användaren var att blinka ett ljus. När det gäller mikrokontroller kan det ibland komma till nytta. Följande funktion blinkar en sekvens för att ange ett visuellt visum.

void blinkNumber (char * numString) {int versLength = strlen (numString); fördröjning (200); för (int i = 0; i <versLength; i ++) {int nummer = numString [i] -48; om (antal == 0) {blinkLED (LED_A, 1,20); fördröjning (160); } om (nummer> 0 && nummer <10) blinkLED (LED_A, nummer, 200); fördröjning (400); }}

Buzzing en summer

En generaliserad generaliserad funktion för att använda Piezo buzzers utan att behöva tänka igenom matte varje gång du vill höra en viss ljudfrekvens. Allt du behöver göra är att berätta vilken funktion du vill använda, vilken frekvens du vill höra och hur länge du ska spela den frekvensen.

void buzz (int targetPin, lång frekvens, lång längd) {long delayValue = 1000000 / frequency / 2; långa numCycles = frekvens * längd / 1000; för (long i = 0; i <numCycles; i ++) {digitalWrite (targetPin, HIGH); delayMicroseconds (delayValue); digitalWrite (targetPin, LÅG); delayMicroseconds (delayValue); }}

Kontrollera gratis RAM

ATmega328 har 32K programminne men endast 2K av SRAM. Programminne är för kod och RAM är för dynamiska variabler. Egentligen är det effektivt mindre än 2 K RAM, eftersom Arduino-biblioteken tar upp lite dynamiskt minnesutrymme för sig själva.

Arduino-miljön kommer med glädje att låta dig kompilera ett program som överstiger mikroprocessorns SRAM-gränser, men programbeteendet blir helt oförutsägbart, koden kommer att göra bisarra saker och / eller krasch. Denna funktion kommer att returnera antalet byte som för närvarande är fria i SRAM.

int minneTest () {int byteCounter = 0; byte * byteArray; medan ((byteArray = (byte *) malloc (byteCounter * sizeof (byte))) = = NULL) {byteCounter ++; free (Array); } gratis (byteArray); returnera byteCounter; }

Kartlägga större siffror

Detta är en version av Karta funktion som kan hantera större positiva tal, även om det misslyckas med negativa.

lång mapBig (unsigned long x, unsigned long in_min, unsigned long in_max, unsigned long out_min, unsigned long out_max) {return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }

Anslut till WiFi

Den nya Arduino WiFi-skärmen är en ganska fin styrelse. Att hantera olika typer av nätverk kan dock vara besvärligt. Följande kodbit, försöker ansluta till ett WPA / WPA2 krypterat WiFi-nätverk vars SSID är lagrad i SSID variabel och lösenord lagrad i passera variabel. Men om det inte kan hitta det nätverket kommer det att falla tillbaka och skanna efter öppna WiFi-nätverk istället.

om (WiFi.status () == WL_NO_SHIELD) {Serial.println ("WiFi-sköld inte närvarande"); while (true); } om (stringFromCharString (ssid)! = "") {while (status! = WL_CONNECTED) {timesWeTriedToConnect ++; Serial.print (F ("Försöker ansluta till SSID (försök")); Serial.print (timesWeTriedToConnect); Serial.print (F ("av 5):")); Serial.println (SSID); status = WiFi.begin (ssid, passera); // Anslut till WPA / WPA2-nätverket. fördröjning (2000); om (timesWeTriedToConnect> = 5) bryts }} om (status! = WL_CONNECTED) {Serial.print ("Kan inte ansluta till ssid" "); Serial.print (ssid); Serial.println ("'"); Serial.println ("** Skanning för öppna nätverk **"); byte numSsid = WiFi.scanNetworks (); Serial.print ("antal tillgängliga nätverk:"); Serial.println (numSsid); för (int thisNet = 0; thisNet

Läsa och skriva till EEPROM

Ibland kan det vara användbart att lagra nummer eller andra data i Arduino's EEPROM för att skydda den mot strömcykling. Med hjälp av det medföljande EEPROM-biblioteket är det faktiskt ganska enkelt att skriva ett nummer till EEPROM,

void setNumber (unsigned long ctr) {Serial.print ("Inställningsnummer i EEPROM till ="); Serial.println (ctr); EEPROM.write (4, (ctr & 0xFFFFFFFF) >> 24); // skriv MSB EEPROM.write (3, (ctr & 0xFFFFFF) >> 16); // skriv 3B EEPROM.write (2, (ctr & 0xFFFF) >> 8); // skriv 2B EEPROM.write (1, ctr & 0xFF); // skriv LSB}

och sedan för att läsa numret tillbaka,

unsigned long getNumber () {unsigned long ctr; // initial inställning av nummer om (EEPROM.read (5)! = 1) {// om nummersetstatus är falskt Serial.println ("Initialiseringsnummer i EEPROM"); EEPROM.write (1,0); // skriv LSB noll EEPROM.write (2,0); // skriv 2ndB noll EEPROM.write (3,0); // skriv 3rdB noll EEPROM.write (4,0); // skriv MSB noll EEPROM.write (5,1); // sändningsstatus är sann} // få numret - lägg till byte för 32-bitars nummer ctr = (EEPROM.read (4) << 24) + (EEPROM.read (3) << 16) + (EEPROM. läs (2) << 8) + (EEPROM.read (1)); Serial.print ("Hämta nummer från EEPROM ="); Serial.println (ctr); returnera ctr; }

Kod för detta inlägg tillhandahölls av Rob Faludi och Alasdair Allan.Det är reposted här på MAKE webbplatsen med tillstånd.

Del

Lämna En Kommentar