Arduino Helper-functies - 💡 Fix My Ideas

Arduino Helper-functies

Arduino Helper-functies


Auteur: Ethan Holmes, 2019

Hier zijn enkele handige functies voor Arduino.

Knipperend een LED

Deze functie knippert een LED-licht zo vaak als gevraagd, op de gewenste knipperfrequentie.

void blinkLED (byte targetPin, int numBlinks, int blinkRate) {for (int i = 0; i <numBlinks; i ++) {digitalWrite (targetPin, HIGH); delay (blinkRate); digitalWrite (targetPin, LOW); delay (blinkRate); }}

Een nummer knipperend

Terug in het begin van het computertijdperk ging het soms mis, zodat de enige manier om een ​​fout aan de gebruiker door te geven, was om een ​​lichtje te laten knipperen. Bij micro-controllers kan dit soms handig zijn. De volgende functie knippert een reeks om een ​​getal visueel aan te duiden.

void blinkNumber (char * numString) {int versLength = strlen (numString); vertraging (200); voor (int i = 0; i <versLength; i ++) {int number = numString [i] -48; if (number == 0) {knippertLED (LED_A, 1,20); vertraging (160); } if (nummer> 0 && nummer <10) knipperendLED (LED_A, nummer, 200); vertraging (400); }}

Een zoemer zoemen

Een gegeneraliseerde gegeneraliseerde functie om gebruik te maken van Piezo zoemers zonder elke keer na te denken wanneer u een bepaalde geluidsfrequentie wilt horen. Het enige dat u hoeft te doen, is de functie opgeven welke pincode u wilt gebruiken, de frequentie die u wilt horen en de duur om die frequentie af te spelen.

void buzz (int targetPin, lange frequentie, lange lengte) {long delayValue = 1000000 / frequency / 2; lange numCycles = frequentie * lengte / 1000; for (long i = 0; i <numCycles; i ++) {digitalWrite (targetPin, HIGH); delayMicroseconds (delayValue); digitalWrite (targetPin, LOW); delayMicroseconds (delayValue); }}

Vrije RAM controleren

De ATmega328 heeft 32K aan programmageheugen maar slechts 2K aan SRAM. Programmageheugen is voor code en RAM is voor dynamische variabelen. Eigenlijk is het effectief minder dan 2K RAM, omdat de Arduino-bibliotheken wat dynamische geheugenruimte voor zichzelf in beslag nemen.

De Arduino-omgeving laat je graag een programma compileren dat de SRAM-limieten van de microcontroller overschrijdt, maar het gedrag van het programma zal totaal onvoorspelbaar worden, de code zal bizarre dingen doen en / of crashen. Deze functie retourneert het aantal bytes dat momenteel vrij is in SRAM.

int memoryTest () {int byteCounter = 0; byte * byteArray; while ((byteArray = (byte *) malloc (byteCounter * sizeof (byte)))! = NULL) {byteCounter ++; gratis (byteArray); } gratis (byteArray); retourneer byteCounter; }

Grotere cijfers toewijzen

Dit is een versie van de kaart functie die grotere positieve getallen kan verwerken, hoewel deze faalt met negatieve.

lange mapBig (unsigned lang 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) + uit_min; }

Verbinden met WiFi

Het nieuwe Arduino WiFi-schild is een vrij aardig bord. Het omgaan met verschillende soorten netwerken kan echter lastig zijn. In het volgende codefragment wordt geprobeerd verbinding te maken met een WPA / WPA2-gecodeerd wifi-netwerk waarvan de SSID is opgeslagen in de ssid variabele en wachtwoord opgeslagen in de voorbij lopen variabel. Als het dat netwerk echter niet kan vinden, zal het terugvallen en in plaats daarvan zoeken naar open WiFi-netwerken.

if (WiFi.status () == WL_NO_SHIELD) {Serial.println ("wifi-schild niet aanwezig"); while (true); } if (stringFromCharString (ssid)! = "") {while (status! = WL_CONNECTED) {timesWeTriedToConnect ++; Serial.print (F ("probeert verbinding te maken met SSID (poging")); Serial.print (timesWeTriedToConnect); Serial.print (F ("of 5):")); Serial.println (SSID); status = WiFi.begin (ssid, pass); // Maak verbinding met WPA / WPA2-netwerk. delay (2000); if (timesWeTriedToConnect> = 5) break; }} if (status! = WL_CONNECTED) {Serial.print ("Kan geen verbinding maken met ssid '"); Serial.print (ssid); Serial.println ("'"); Serial.println ("** Scannen voor open netwerken **"); byte numSsid = WiFi.scanNetworks (); Serial.print ("aantal beschikbare netwerken:"); Serial.println (numSsid); voor (int thisNet = 0; thisNet

Lezen en schrijven naar de EEPROM

Soms kan het handig zijn om nummers of andere gegevens op te slaan in de Arduino EEPROM om deze te beschermen tegen power-cycling. Met de meegeleverde EEPROM-bibliotheek is het eigenlijk vrij eenvoudig om een ​​nummer naar EEPROM te schrijven,

void setNumber (unsigned long ctr) {Serial.print ("Instellingsnummer in EEPROM to ="); Serial.println (ctr); EEPROM.write (4, (ctr & 0xFFFFFFFF) >> 24); // schrijf de MSB EEPROM.write (3, (ctr & 0xFFFFFF) >> 16); // schrijf de 3rdB EEPROM.write (2, (ctr & 0xFFFF) >> 8); // schrijf de 2ndB EEPROM.write (1, ctr & 0xFF); // schrijf de LSB}

en dan om het nummer terug te lezen,

unsigned long getNumber () {unsigned long ctr; // initiële instelling van nummer if (EEPROM.read (5)! = 1) {// als nummerinstellingsstatus false is Serial.println ("Initialisatienummer in EEPROM"); EEPROM.write (1,0); // schrijf LSB zero EEPROM.write (2,0); // schrijf 2ndB zero EEPROM.write (3,0); // schrijf 3rdB zero EEPROM.write (4,0); // schrijf MSB zero EEPROM.write (5,1); // teller set status is true} // verkrijg het nummer - voeg Bytes toe voor 32-bit nummer ctr = (EEPROM.read (4) << 24) + (EEPROM.read (3) << 16) + (EEPROM. lees (2) << 8) + (EEPROM.lees (1)); Serial.print ("Getting number from EEPROM ="); Serial.println (ctr); return ctr; }

Code voor dit bericht is verstrekt door Rob Faludi en Alasdair Allan.Het wordt hier met toestemming op de MAKE-site geplaatst.



U Bent Wellicht Geïnteresseerd Zijn

Hasbro en Shapeways breiden partnerschap uit, staan ​​fans toe om transformatoren te verkopen Fan-art en meer

Hasbro en Shapeways breiden partnerschap uit, staan ​​fans toe om transformatoren te verkopen Fan-art en meer


Sintratec: Betaalbare thuis-SLS-printer komt binnenkort

Sintratec: Betaalbare thuis-SLS-printer komt binnenkort


Subversieve kruissteekronde

Subversieve kruissteekronde


Plan B 3D-printer, DIY inkjet-gebaseerde poederdruk

Plan B 3D-printer, DIY inkjet-gebaseerde poederdruk






Recente Berichten