Jeffrey Cross
Jeffrey Cross

Pomocné funkce Arduina

Zde je několik užitečných funkcí pro Arduino.

Bliká dioda LED

Tato funkce bude blikat diodou LED tolikrát, kolikrát je požadováno, při požadované rychlosti blikání.

void blinkLED (byte targetPin, int numBlinks, int blinkRate) {for (int i = 0; i <numBlinks; i ++) {digitalWrite (targetPin, HIGH); zpoždění (blinkRate); digitalWrite (targetPin, LOW); zpoždění (blinkRate); }}

Blikající číslo

V době úsvitu výpočetní techniky se věci někdy pokazily natolik, že jediným způsobem, jak uživateli sdělit chybu, bylo mrknutí světla. Při práci s mikroprocesory se to může někdy hodit. Následující funkce bliká posloupností, která indikuje číslo vizuálně.

void blinkNumber (char * numString) {int versLength = strlen (numString); zpoždění (200); pro (int i = 0; i <VersLength; i ++) {int number = numString [i] -48; if (číslo == 0) {blinkLED (LED_A, 1,20); zpoždění (160); } jestliže (číslo> 0 && číslo <10) bliká LED (LED_A, číslo, 200); zpoždění (400); }}

Bzučení bzučáku

Obecná zobecněná funkce, která využívá piezové bzučáky, aniž byste museli přemýšlet o matematice pokaždé, když chcete slyšet určitou frekvenci zvuku. Vše, co musíte udělat, je určit funkci, kterou chcete použít, frekvenci, kterou chcete slyšet, a dobu trvání této frekvence.

void buzz (int targetPin, dlouhá frekvence, dlouhá délka) {long delayValue = 1000000 / frequency / 2; long numCycles = frekvence * délka / 1000; for (long i = 0; i <numCycles; i ++) {digitalWrite (targetPin, HIGH); delayMicroseconds (delayValue); digitalWrite (targetPin, LOW); delayMicroseconds (delayValue); }}

Kontrola volné paměti RAM

ATmega328 má 32K paměti programu, ale pouze 2K SRAM. Paměť programu je pro kód a RAM je pro dynamické proměnné. Vlastně je to efektivně méně než 2K RAM, protože knihovny Arduino zabírají pro sebe dynamický paměťový prostor.

Prostředí Arduino vám ochotně umožní sestavit program, který překračuje limity SRAM mikroprocesoru, ale chování programu bude naprosto nepředvídatelné, kód bude dělat bizarní věci a / nebo pád. Tato funkce vrátí počet bytů, které jsou aktuálně volné v SRAM.

int memoryTest () {int byteCounter = 0; byte * byteArray; while ((byteArray = (byte *) malloc (byteCounter * sizeof (byte)))! = NULL) {byteCounter ++; zdarma (byteArray); } free (byteArray); return byteCounter; }

Mapování větších čísel

Toto je verze mapa funkce schopná pracovat s většími kladnými čísly, i když selhává s negativními.

long 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; }

Připojení k WiFi

Nový štít Arduino WiFi je pěkná deska. Řešení různých typů sítí však může být problematické. Následující útržek kódu se pokusí připojit k WPA / WPA2 šifrované WiFi síti, jejíž SSID je uložen v ssid a heslo uložené v složit proměnná. Pokud však tuto síť nenajde, vrátí se zpět a místo toho vyhledá otevřené sítě WiFi.

if (WiFi.status () == WL_NO_SHIELD) {Serial.println ("WiFi štít není přítomen"); while (true); } if (stringFromCharString (ssid)! = "") {while (status! = WL_CONNECTED) {timesWeTriedToConnect ++; Serial.print (F ("Pokus o připojení k SSID (pokus")); Serial.print (timesWeTriedToConnect); Serial.print (F ("z 5):")); Serial.println (ssid); status = WiFi.begin (ssid, pass); // Připojení k síti WPA / WPA2. zpoždění (2000); pokud (timesWeTriedToConnect> = 5) přerušení; }} if (status! = WL_CONNECTED) {Serial.print ("Nelze se připojit k ssid '"); Serial.print (ssid); Serial.println ("'"); Serial.println ("** Skenování pro otevřené sítě **"); bajt numSsid = WiFi.scanNetworks (); Serial.print ("počet dostupných sítí:"); Serial.println (numSsid); for (int thisNet = 0; thisNet

Čtení a zápis do paměti EEPROM

Někdy může být užitečné ukládat čísla nebo jiná data do paměti EEPROM zařízení Arduino, aby byla chráněna před cyklickým cyklem napájení. Pomocí přiložené knihovny EEPROM je skutečně snadné napsat číslo do EEPROM,

void setNumber (unsigned long ctr) {Serial.print ("Číslo nastavení v EEPROM to ="); Serial.println (ctr); EEPROM.write (4, (ctr & 0xFFFFFFFF) >> 24); // zapíše MSB EEPROM.write (3, (ctr & 0xFFFFFF) >> 16); // zapíše 3.B EEPROM.write (2, (ctr & 0xFFFF) >> 8); // zapíše 2.B EEPROM.write (1, ctr & 0xFF); // zapište LSB}

a poté si přečtěte číslo zpět,

unsigned long getNumber () {unsigned long ctr; // počáteční nastavení čísla, pokud (EEPROM.read (5)! = 1) {// pokud je číslo nastaveno na hodnotu false Serial.println ("Inicializační číslo v EEPROM"); EEPROM.write (1,0); // zapíše LSB nula EEPROM.write (2,0); // zapíše 2.B nula EEPROM.write (3,0); // zapisovat nulový EEPROM.write 3rdB (4,0); // zapíše MSB nula EEPROM.write (5,1); // counter set status is true} // získat číslo - přidat bajty pro 32bitové číslo ctr = (EEPROM.read (4) << 24) + (EEPROM.read (3) << 16) + (EEPROM. číst (2) << 8) + (EEPROM.read (1)); Serial.print ("Získání čísla z EEPROM ="); Serial.println (ctr); návrat ctr; }

Kód pro tento post poskytli Rob Faludi a Alasdair Allan.To je reposted tady na webu MAKE se svolením.

Podíl

Zanechat Komentář