טוב.. אחריי זמן מה שהייתי עסוק... (אתם יכולים לנחש לפי הכותרת במה.. משום מה אמרו לי שאסור לי לכתוב את זה..) החלטתי לנצל את החמשו"ש הראשון שלי לבנות משהו מועיל (בניגוד לשאר הדברים שעבדתי עליהם עד כה בזמני הפנוי שגם הם יתפרסמו מתישהו..)
בכל אופן, המתנתי די הרבה זמן כדי להשתמש בחיישן מרחק החדש שקניתי קצת לפני הגיוס שלי, ומה יותר כיף מלבנות מערכת רוורס. המערכת שבניתי מכילה תצוגת TFT 1.8 וחיווי לדים (בצורת רמזור מגניב כזה..)
המערכת בבסיסה דיי פשוטה, החיישן מודד מרחק מאובייקט, ה-LCD רושם את המרחק, והלדים מתריאים על פי המרחק מהחיישן.
- צריך לתקן את ההבהוב של המסך (כל פעם שיש ערך חדש מופיע הבהוב קטן, זה באמת לא קשה לפתור את זה אבל אין לי כוח לזה כרגע..)
- לעבור משלב הprototype ואשכרה להלחים דברים וזה..
הערות:
- תודה לזאב רוטשטיין (לא לפרופסור, אחד אחר..) על התרומה של הפונקציה i2s ששברתי עליה את הראש לא מעט זמן..
- חשבתי להוסיף רמקול קטן שמצפצף מתי שהמרחק קטן ואז גיליתי שהצלילי שלו ממש מעצבן אז וויתרתי..
סרטון של העסק עובד...
זהו לפוסט זה.. אני אשתדל להוסיף סרטון של העסק עובד (כרגע אין לי כל כך תנאים לצלם). אני מקווה שאני באמת אוכל לכתוב עוד בתקופה הקרובה אך לא יודע בעצמי כרגע...
להלן הקוד:
#include <Ultrasonic.h> #include <Adafruit_ST7735.h> #include <SPI.h> #define cs 6 #define sclk 7 #define mosi 8 #define dc 9 #define rst 10 // Color definitions #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF //Ultrasonic sensor, pin definition #define TRIGGER_PIN 52 #define ECHO_PIN 53 int led1 = 22; int led2 = 24; int led3 = 26; int led4 = 28; int led5 = 30; Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN); Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst); void i2s(int n, char*s, int l){ s[l] = 0; for (int i = l-1; i >= 0; i--){ s[i] = n % 10 + 0x30; n /= 10; } } void setup() { Serial.begin(9600); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); tft.initR(); // initialize a ST7735R chip tft.writecommand(ST7735_DISPON); uint16_t time = millis(); tft.fillScreen(BLACK); time = millis() - time; tft.drawString (0, 10, "---- System Data ---- ", RED); tft.drawString (0, 30, "Distance: ", GREEN); } void loop() { float cm = 0; float microsec = ultrasonic.timing(); float cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM); float inMsec = ultrasonic.convert(microsec, Ultrasonic::IN); cm = float(cmMsec); char c[3] ; i2s(int(cm), c, 2); tft.drawString (80, 30, c, GREEN); if (cmMsec < 60){ digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led5, LOW); } if (cmMsec < 50){ digitalWrite(led1, HIGH); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led5, LOW); } if (cmMsec < 40){ digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led5, LOW); } if (cmMsec < 30){ digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, LOW); digitalWrite(led5, LOW); } if (cmMsec < 20){ digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); digitalWrite(led5, LOW); } if (cmMsec < 10){ digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); digitalWrite(led5, HIGH); } Serial.println(", CM: "); Serial.print(cmMsec); delay(50); tft.drawString (80, 30, c, BLACK); }
אין תגובות:
הוסף רשומת תגובה