הנה כמה פונקציות מועילות עבור Arduino.
פונקציה זו מהבהבת נורית LED מספר פעמים, בהתאם לשיעור המהבהב המבוקש.
(v) = (n =); (n = i = 0; numBlinks; i + +) {digitalWrite (targetPin, HIGH); עיכוב (blinkRate); DigitalWrite (targetPin, LOW); עיכוב (blinkRate); }}
חזרה בעידן השחר של המחשוב לפעמים דברים השתבשו מספיק כי הדרך היחידה לתקשר שגיאה למשתמש היה להבהב אור. כאשר מתמודדים עם בקרי מיקרו זה יכול לפעמים להיות שימושי. הפונקציה הבאה מהבהבת ברצף לציון מספר חזותי.
void blinkNumber (char * numString) {int versLength = strlen (numString); עיכוב (200); עבור (int i = 0; i <versLength; i ++) {מספר int = numString [i] -48; אם (מספר == 0) {blinkLED (LED_A, 1,20); עיכוב (160); } אם (מספר 0> & מספר <10) מהבהב (LED_A, מספר, 200); עיכוב (400); }}
פונקציה כללית הכללה לעשות שימוש Piezo buzzers מבלי לחשוב דרך מתמטיקה בכל פעם שאתה רוצה לשמוע תדר קול מסוים. כל שעליך לעשות הוא לומר את הפונקציה שבה אתה רוצה להשתמש, תדר אתה רוצה לשמוע, ואת משך לשחק את התדר.
חלל ריק (int targetPin, תדירות ארוכה, אורך ארוך) {long delayValue = 1000000 / Frequ / 2; ארוך numCycles = תדר * אורך / 1000; עבור (i i = 0 i <numCycles i; +) {digitalWrite (targetPin, HIGH); עיכוב מייקרו-שניות (delayValue); DigitalWrite (targetPin, LOW); עיכוב מייקרו-שניות (delayValue); }}
ATmega328 יש 32K של זיכרון התוכנית, אבל רק 2K של SRAM. זיכרון התוכנית הוא עבור קוד RAM הוא עבור משתנים דינמיים. למעשה זה למעשה פחות מ 2K של RAM, כי ספריות Arduino ייקח קצת שטח זיכרון דינמי עבור עצמם.
הסביבה Arduino יהיה בשמחה לתת לך לקמפל תוכנית החורגת את מגבלות ה- SRAM של בקר מיקרו, אולם התנהגות התוכנית יהיה בלתי צפוי לחלוטין, הקוד יעשה דברים מוזרים ו / או לקרוס. פונקציה זו תחזיר את מספר בתים בחינם כרגע SRAM.
int memoryTest () {int byteCounter = 0; בתים * בייט; בעוד ((byteArray = (byte *) malloc (byteCounter * sizeof (byte))! = = NULL) {byteCounter ++; ללא תשלום (byteArray); } חינם (byteArray); חזרה הביתה }
זוהי גרסה של מפה פונקציה המסוגלת להתמודד עם מספרים חיוביים גדולים יותר, למרות שהיא נכשלת עם אלה שלילי.
(x_ in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
החדש Arduino WiFi מגן הוא די נחמד הלוח. עם זאת להתמודד עם סוגים שונים של הרשת יכול להיות בעייתי. קטע הקוד הבא ינסה להתחבר לרשת WPA מוצפנת WPA / WPA2 ש- SSID מאוחסן בה ssid משתנה וסיסמא המאוחסנים לעבור משתנה. עם זאת, אם זה לא יכול למצוא את הרשת היא תיפול לאחור ולסרוק עבור רשתות WiFi פתוח במקום.
אם (WiFi.status () == WL_NO_SHIELD) {Serial.println ("מגן Wi-Fi לא קיים"); בעוד (נכון); } אם (stringFromCharString (ssid)! = "") {בעוד (מצב! = WL_CONNECTED) {timesWeTriedToConnect ++; Serial.print (F ("ניסיון להתחבר אל SSID (ניסיון")); Serial.print (timesWeTriedToConnect); Serial.print (F ("of 5):"); Serial.println (ssid); Status = WiFi.begin (ssid, pass); // התחבר לרשת WPA / WPA2. עיכוב (2000); אם (timesWeTriedToConnect> = 5) הפסקה; }} אם (Status! = WL_CONNECTED) {Serial.print ("לא ניתן להתחבר ל- ssid"); Serial.print (ssid); Serial.println ("" "); Serial.println ("** סריקה עבור רשתות פתוחות **"); בייט numSsid = WiFi.scanNetworks (); Serial.print ("מספר הרשתות הזמינות:"); Serial.println (numSsid); עבור (int thisNet = 0; thisNet
לפעמים זה יכול להיות שימושי לאחסן מספרים, או נתונים אחרים, לתוך EEPROM של Arduino כדי להגן עליו מפני כוח רכיבה על אופניים. באמצעות ספריית EEPROM כלל זה די קל לכתוב מספר EEPROM,
void setNumber (חתום ארוך ctr) {Serial.print ("הגדרת מספר EEPROM ל ="); Serial.println (ctr); EEPROM.write (4, (ctr & 0xFFFFFFFF) >> 24); // כתוב את MSB EEPROM.write (3, (ctr & 0xFFFFFF) >> 16); // לכתוב את EEPROM.write 3B (2, (ctr & 0xFFFF) >> 8); // כתוב את ה- EEPROM.write השני (1, ctr & 0xFF); // לכתוב את LSB}
ואז לקרוא את המספר בחזרה,
getigned ארוך לא חתום () {cigned ארוך ctr; (אם המספר EEPROM.read = 5) = {אם המספר מוגדר כסטטוס שקרית Serial.println ("אתחול מספר EEPROM"); EEPROM.write (1,0); // לכתוב LSB אפס EEPROM.write (2,0); // כתוב 2B אפס EEPROM.write (3,0); // לכתוב 3B אפס EEPROM.write (4,0); // לכתוב MSB אפס EEPROM.write (5,1); / / set set status הוא true / / מקבל את מספר - הוסף בתים עבור 32 סיביות מספר ctr = (EEPROM.read (4) << 24) + (EEPROM.read (3) << 16) + (EEPROM. קרא (2) << 8) + (EEPROM.read (1)); Serial.print ("קבלת מספר מ- EEPROM ="); Serial.println (ctr); חזור ctr; }
קוד עבור הפוסט הזה סופק על ידי רוב פלודי Alasdair אלן.הוא מפורסם כאן באתר MAKE באישור.