Menu
CoddyTech

חיישן חניה: תצוגה

חלק מהיחידה פרויקטים במסלול ה-Arduino של Coddy. שיעור 12 מתוך 24.

השלב האחרון מציג את המרחק המדויק על המסך. מסך ה-LCD בגודל 16x2 מחובר בדרך המקובלת: RS לפין 12, ‏E לפין 11, ו-D4 עד D7 לפינים 5, 4, 3 ו-2.

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

השורה העליונה אינה משתנה, לכן כתבו בה פעם אחת Distance: בתוך setup(), אחרי lcd.begin(16, 2). רק השורה התחתונה מתעדכנת בתוך loop().

מסך LCD שומר כל תו עד שמשהו מחליף אותו. במעבר מ-250 ס״מ ל-8 ס״מ, הדפסת 8 cm מעל 250 cm משאירה את סוף השורה הישן, והמסך מציג 8 cmcm. הדפיסו כמה רווחים אחרי הטקסט כדי לכסות כל מה שמספר ארוך יותר השאיר:

lcd.setCursor(0, 1);
lcd.print(cm);
lcd.print(" cm    ");

רווחים גם מונעים את ההבהוב שנגרם מ-lcd.clear(), שהיה מרוקן את כל המסך עשר פעמים בשנייה.

challenge icon

אתגר

קל

הציגו את המרחק על גבי ה-LCD:

  • כללו את LiquidCrystal.h וצרו את lcd(12, 11, 5, 4, 3, 2)
  • ב-setup(): lcd.begin(16, 2) ואת Distance: בשורה העליונה
  • ב-loop(): המרחק ו-cm בשורה התחתונה, כמו 57 cm, עם רווחים אחריהם

השאירו את האורות, הצפצופים וההדפסה. לחצו על Run, ואז על Check.

נסו בעצמכם

// חיישן המרחק
const int trigPin = 9;
const int echoPin = 10;
// נורות האזהרה
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;
// הזמזם
const int buzzerPin = 8;

unsigned long lastBeep = 0;  // מתי התחיל הצפצוף האחרון

// שלח פולס והחזר את המרחק ב-cm.
long readDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  return duration / 58;
}

// ירוק כשהשטח פנוי, צהוב כשהעצם קרוב, אדום כשהוא קרוב מדי.
void showLights(long cm) {
  digitalWrite(greenPin, LOW);
  digitalWrite(yellowPin, LOW);
  digitalWrite(redPin, LOW);
  if (cm >= 100) {
    digitalWrite(greenPin, HIGH);
  } else if (cm >= 30) {
    digitalWrite(yellowPin, HIGH);
  } else {
    digitalWrite(redPin, HIGH);
  }
}

// צפצף מהר יותר ככל שהעצם מתקרב.
void beep(long cm) {
  if (cm >= 100) {
    noTone(buzzerPin);
  } else if (cm < 10) {
    tone(buzzerPin, 1000);  // קרוב מדי: צליל רציף
  } else if (millis() - lastBeep >= cm * 10) {
    lastBeep = millis();
    tone(buzzerPin, 1000, 50);
  }
}

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(yellowPin, OUTPUT);
  pinMode(redPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  long cm = readDistance();
  Serial.println(cm);
  showLights(cm);
  beep(cm);
  delay(100);
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה פרויקטים

תרגלו בעצמכם: Arduino אונליין