Jeffrey Cross
Jeffrey Cross

Arduino Yardımcı İşlevleri

İşte Arduino için bazı yararlı fonksiyonlar.

Bir LED'in Yanıp Sönmesi

Bu işlev, istenen yanıp sönme oranında, bir LED ışığını istenildiği kadar yanıp söner.

boşluk yanıp sönmeLED (bayt targetPin, int numBlinks, int blinkRate) {için (int i = 0; i <numBlinks; i ++) {digitalWrite (targetPin, HIGH); gecikmesi (blinkRate); digitalWrite (targetPin, LOW); gecikmesi (blinkRate); }}

Bir Numarayı Yanıp Sönme

Şafakta bilgisayar çağında bazen bazı şeyler yanlış gitti, kullanıcıya bir hata iletmenin tek yolu ışığı yakmaktı. Mikro kontrolörler ile uğraşırken bu bazen işe yarayabilir. Aşağıdaki işlev, görsel olarak bir sayıyı belirtmek için bir dizi yanıp söner.

boşluk blinkNumber (char * numString) {int versLength = strlen (numString); gecikmesi (200); (int i = 0; i <versLength; i ++) {int number = numString [i] -48; eğer (sayı == 0) {yanıp sönmeLED (LED_A, 1,20); gecikmesi (160); } eğer (sayı> 0 && sayı <10) yanıp sönüyorsaLED (LED_A, sayı, 200); gecikmesi (400); }}

Bir Zil Sızması

Belirli bir ses frekansını her duymak istediğinizde matematiği düşünmek zorunda kalmadan Piezo seslerini kullanmak için genelleştirilmiş bir genelleştirilmiş işlev. Tek yapmanız gereken, hangi pin'i kullanmak istediğinizi, duymak istediğiniz frekansı ve bu frekansı çalma süresini söylemek.

boşluk vızıltı (int targetPin, uzun frekans, uzun uzunluk) {uzun gecikmeValue = 1000000 / frekans / 2; uzun numCycles = frekans * uzunluk / 1000; (uzun i = 0; i <numCycles; i ++) {digitalWrite (targetPin, HIGH); delayMicroseconds (delayValue); digitalWrite (targetPin, DÜŞÜK); delayMicroseconds (delayValue); }}

Ücretsiz RAM'i Kontrol Etme

ATmega328 32K program hafızasına sahiptir, ancak sadece 2K SRAM'a sahiptir.Program hafızası kod içindir ve RAM dinamik değişkenler içindir. Aslında, 2K'dan daha az RAM daha etkilidir, çünkü Arduino kütüphaneleri kendileri için biraz dinamik bellek alanı kullanır.

Arduino ortamı, mikro denetleyicinin SRAM sınırlarını aşan bir programı derlemenize izin verecektir, ancak program davranışı tamamen tahmin edilemez hale gelecek, kod tuhaf şeyler yapacaktır ve / veya çökecektir. Bu işlev SRAM'da şu anda boş olan bayt sayısını döndürür.

int memoryTest () {int byteCounter = 0; byte * byteArray; while ((byteArray = (byte *) malloc (byteCounter * sizeof (byte)))! = NULL) {byteCounter ++; serbest (byteArray); } ücretsiz (byteArray); dönüş byteCounter; }

Daha Büyük Sayıları Eşleme

Bu bir versiyonu harita Olumsuz sayılarla başarısız olmasına rağmen, daha büyük pozitif sayılarla başa çıkabilen işlev.

uzun mapBig (imzasız uzun x, imzasız uzun in_min, imzasız uzun in_max, imzasız uzun out_min, imzasız uzun out_max) {return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }

WiFi'ye bağlanma

Yeni Arduino WiFi kalkanı oldukça hoş bir anakart. Bununla birlikte, farklı ağ türleriyle uğraşmak sıkıntılı olabilir. Aşağıdaki kod pasajı, SSID’si SSID’de depolanan WPA / WPA2 şifreli bir WiFi ağına bağlanmaya çalışacaktır. ssid değişken ve şifrede saklanan şifre pas değişken. Ancak bu ağı bulamazsa geri çekilecek ve bunun yerine açık WiFi ağlarını tarayacaktır.

if (WiFi.status () == WL_NO_SHIELD) {Serial.println ("WiFi koruması mevcut değil"); (Doğru) ise; } if (stringFromCharString (ssid)! = "") {while (status! = WL_CONNECTED) {timesWeTriedToConnect ++; Serial.print (F ("SSID'ye bağlanmaya çalışılıyor (deneme")); Serial.print (timesWeTriedToConnect); Serial.print (F ("in 5):")); Serial.println (ssid); status = WiFi.begin (ssid, pass); // WPA / WPA2 ağına bağlanın. Gecikme (2000); if (timesWeTriedToConnect> = 5) sonu; }} if (status! = WL_CONNECTED) {Serial.print ("ssid'e bağlanılamıyor" "); Seri baskısı (ssid); Serial.println ("'"); Serial.println ("** Açık ağlar için tarama **"); bayt numSsid = WiFi.scanNetworks (); Serial.print ("kullanılabilir ağların sayısı:"); Serial.println (numSsid); (int thisNet = 0; thisNet

EEPROM’a Okuma ve Yazma

Bazen, güç döngüsüne karşı korumak için numaraları veya diğer verileri Arduino’nun EEPROM’una depolamak faydalı olabilir. Dahili EEPROM kütüphanesini kullanarak, EEPROM'a bir sayı yazmak aslında oldukça kolaydır.

void setNumber (işaretsiz uzun ctr) {Seri.print ("EEPROM’da ayar numarası ="); Serial.println (ctr); EEPROM.write (4, (ctr & 0xFFFFFFFF) >> 24); // MSB'yi yazın EEPROM.write (3, (ctr & 0xFFFFFF) >> 16); // 3rdB EEPROM.write (2, (ctr & 0xFFFF) >> 8) yazın; // 2ndB EEPROM.write (1, ctr & 0xFF) yazın; // LSB'ye yaz}

ve sonra numarayı tekrar okumak için

imzasız uzun getNumber () {imzasız uzun ctr; // eğer ilk sayı ayarı ise (EEPROM.read (5)! = 1) {// eğer sayı kümesi durumu yanlışsa Serial.println ("EEPROM'da numarayı ilklendirme"); EEPROM.write (1,0); // LSB'yi sıfırlayın EEPROM.write (2,0); // 2B sıfır yazın EEPROM.write (3,0); // 3B sıfır yazın EEPROM.write (4,0); // MSB'yi sıfır yazın EEPROM.write (5,1); // counter set status true} // sayıyı al - 32 bitlik sayı için Bayt ekle ctr = (EEPROM.read (4) << 24) + (EEPROM.read (3) << 16) + (EEPROM. (2) << 8) + (EEPROM okunması (1)); Serial.print ("EEPROM'dan numara almak ="); Serial.println (ctr); dönüş ctr; }

Bu yazının kodu Rob Faludi ve Alasdair Allan tarafından sağlandı.Burada MAKE sitesinde izin alınarak yayınlanmaktadır. Bu yazı 13 Mayıs 2013 tarihinde yayınlandı.

Hisse

Yorum Bırakmak