Menu
CoddyTech

Sensore di parcheggio: display

Fa parte della sezione Progetti del percorso Arduino di Coddy. Lezione 12 di 24.

L'ultimo passaggio mostra la distanza esatta sullo schermo. Il display LCD 16x2 è collegato nel modo consueto: RS sul pin 12, E sull'11, D4-D7 sui pin 5, 4, 3 e 2.

#include <LiquidCrystal.h>

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

La riga superiore non cambia mai, quindi scrivi Distance: una volta in setup(), dopo lcd.begin(16, 2). In loop() viene aggiornata solo la riga inferiore.

Un display LCD mantiene ogni carattere finché qualcosa non lo sostituisce. Passando da 250 cm a 8 cm, stampare 8 cm sopra 250 cm lascia visibile la parte finale del testo precedente e lo schermo mostra 8 cmcm. Stampa alcuni spazi dopo il testo per coprire eventuali caratteri rimasti da un numero più lungo:

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

Gli spazi evitano anche lo sfarfallio di lcd.clear(), che cancellerebbe tutto lo schermo dieci volte al secondo.

challenge icon

Sfida

Facile

Mostra la distanza sul display LCD:

  • includi LiquidCrystal.h e crea lcd(12, 11, 5, 4, 3, 2)
  • in setup(): lcd.begin(16, 2) e Distance: sulla riga superiore
  • in loop(): la distanza e cm sulla riga inferiore, come 57 cm, con degli spazi dopo

Mantieni le luci, i beep e la stampa. Premi Run, poi Check.

Provalo tu

// Il sensore di distanza
const int trigPin = 9;
const int echoPin = 10;
// Le spie di avvertimento
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;
// Il cicalino
const int buzzerPin = 8;

unsigned long lastBeep = 0;  // quando è iniziato l'ultimo segnale acustico

// Invia un impulso e restituisce la distanza in cm.
long readDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  return duration / 58;
}

// Verde quando non ci sono ostacoli vicini, giallo quando un oggetto è vicino, rosso quando è troppo vicino.
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);
  }
}

// Emette segnali acustici più frequenti man mano che l'oggetto si avvicina.
void beep(long cm) {
  if (cm >= 100) {
    noTone(buzzerPin);
  } else if (cm < 10) {
    tone(buzzerPin, 1000);  // troppo vicino: un suono continuo
  } 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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Progetti

Esercitati da solo: Playground Arduino