Jeffrey Cross
Jeffrey Cross

Fungsi Pembantu Arduino

Berikut adalah beberapa fungsi yang berguna untuk Arduino.

Berkedip LED

Fungsi ini berkilat lampu LED seberapa banyak kali yang diminta, pada kadar yang berkedip yang diminta.

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

Berkelip Nombor

Kembali pada masa subuh pengkomputeran kadang-kadang perkara menjadi salah kerana satu-satunya cara untuk menyampaikan ralat kepada pengguna adalah untuk mengedipkan cahaya. Apabila berurusan dengan pengawal mikro ini kadang-kadang boleh digunakan. Fungsi berikut berkedip urutan untuk menunjukkan nombor secara visual.

tidak sah blinkNumber (char * numString) {int versLength = strlen (numString); kelewatan (200); untuk (int i = 0; i <versLength; i ++) {int number = numString [i] -48; jika (nombor == 0) {blinkLED (LED_A, 1,20); kelewatan (160); } jika (nombor> 0 && nombor <10) berkedipLED (LED_A, nombor, 200); kelewatan (400); }}

Menyentuh Buzzer

Fungsi generalisasi umum untuk menggunakan buzzer Piezo tanpa perlu memikirkan matematik setiap kali anda ingin mendengar kekerapan bunyi tertentu. Apa yang anda perlu lakukan ialah memberitahu fungsi yang anda mahu gunakan, kekerapan yang anda mahu dengar, dan tempoh untuk bermain kekerapan itu.

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

Memeriksa RAM Percuma

ATmega328 mempunyai 32K memori program tetapi hanya 2K SRAM. Memori program adalah untuk kod dan RAM adalah untuk pembolehubah dinamik. Sebenarnya ia kurang daripada 2K RAM, kerana perpustakaan Arduino akan mengambil beberapa ruang ingatan dinamik untuk diri mereka sendiri.

Persekitaran Arduino dengan senang hati akan membolehkan anda menyusun program yang melebihi batas SRAM pengawal mikro, namun perilaku program akan menjadi tidak dapat diprediksi, kod tersebut akan melakukan perkara-perkara yang aneh dan / atau kemalangan. Fungsi ini akan mengembalikan bilangan bait yang kini bebas dalam SRAM.

int memoryTest () {int byteCounter = 0; byte * byteArray; sementara ((byteArray = (byte *) malloc (byteCounter * sizeof (byte)))!) = NULL) {byteCounter ++; percuma (byteArray); } percuma (byteArray); pulangan byteCounter; }

Pemetaan Nombor Besar

Ini adalah versi yang peta fungsi yang mampu mengendalikan nombor positif yang lebih besar, walaupun gagal dengan yang negatif.

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

Menyambung ke WiFi

Perisai WiFi Arduino baharu adalah papan yang cukup bagus. Walau bagaimanapun, berurusan dengan pelbagai jenis rangkaian boleh menyusahkan. Potongan kod berikut, akan cuba menyambung ke rangkaian WPA / WPA2 yang disulitkan yang SSID disimpan di dalam ssid pemboleh ubah, dan kata laluan yang disimpan di dalam lulus pembolehubah. Bagaimanapun, jika tidak dapat mencari rangkaian itu, ia akan kembali dan mengimbas rangkaian WiFi terbuka.

jika (WiFi.status () == WL_NO_SHIELD) {Serial.println ("perisai WiFi tidak hadir"); sementara (benar); } if (stringFromCharString (ssid)! = "") {while (status! = WL_CONNECTED) {timesWeTriedToConnect ++; Serial.print (F ("Mencoba untuk menyambung ke SSID (percubaan")); Serial.print (timesWeTriedToConnect); Serial.print (F ("dari 5):")); Serial.println (ssid); status = WiFi.begin (ssid, pass); // Sambung kepada rangkaian WPA / WPA2. kelewatan (2000); jika (timesWeTriedToConnect> = 5) pecah; }} if (status! = WL_CONNECTED) {Serial.print ("Tidak dapat menyambung ke ssid '"); Serial.print (ssid); Serial.println ("'"); Serial.println ("** Mengimbas rangkaian terbuka **"); byte numSsid = WiFi.scanNetworks (); Serial.print ("bilangan rangkaian yang ada:"); Serial.println (numSsid); untuk (int thisNet = 0; thisNet

Membaca dan Menulis ke EEPROM

Kadang-kadang ia boleh berguna untuk menyimpan nombor atau data lain ke EEPROM Arduino untuk melindunginya daripada berbasikal kuasa. Menggunakan perpustakaan EEPROM yang disertakan sebenarnya cukup mudah untuk menulis nombor ke EEPROM,

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

dan kemudian untuk membaca nombor belakang,

unsigned long getNumber () {unsigned long ctr; // set permulaan nombor jika (EEPROM.read (5)! = 1) {// jika nombor status ditetapkan adalah palsu Serial.println ("Nombor inisialisasi dalam EEPROM"); EEPROM.write (1,0); // tulis LSB sifar EEPROM.write (2,0); // tulis 2ndB sifar EEPROM.write (3,0); // tulis 3rdB sifar EEPROM.write (4,0); / tulis MSB sifar EEPROM.write (5,1); // status set counter adalah benar} // dapatkan nombor - tambah Bytes untuk nombor ctr 32-bit = (EEPROM.read (4) << 24) + (EEPROM.read (3) << 16) + (EEPROM. baca (2) << 8) + (EEPROM.read (1)); Serial.print ("Mendapatkan nombor dari EEPROM ="); Serial.println (ctr); pulangan ctr; }

Kod untuk jawatan ini disediakan oleh Rob Faludi dan Alasdair Allan.Ia disiarkan semula di laman web MAKE dengan kebenaran.

Kongsi

Meninggalkan Komen