Esplora E-book
Categorie
Esplora Audiolibri
Categorie
Esplora Riviste
Categorie
Esplora Documenti
Categorie
/*
I collegamenti necessari sono:
int cm = 0;
/*
inizio della routine �misurazionedistanza� graffa di apertura, che delimita
l�inizio delle istruzioni della routine
disattiva, sulla porta 2, il lancio del fascio di ultrasuoni (qualora fosse attivo)
attende 2 microsecondi (per lasciar
spegnere eventuali echi presenti nell�ambiente attiva, sulla porta 2, il lancio del
fascio di ultrasuoni attende 10
microsecondi (tempo richiesto dal modulo HC-SR04 per ricevere ed elaborare il
segnale (l�eco) di ritorno disattiva,
sulla porta 2, il lancio del fascio di ultrasuoni rileva, sulla porta 3, il segnale
di ritorno, lo converte in centimetri
e lo memorizza nella variabile �cm� (il divisore 58.0 e' una costante trovata in
rete e sperimentalmente verificata
graffa di chiusura delle istruzioni della routine
*/
void misurazionedistanza (void)
{
digitalWrite(2, LOW);
delayMicroseconds(2);
digitalWrite(2, HIGH);
delayMicroseconds(10);
digitalWrite(2, LOW);
cm = pulseIn(3, HIGH) / 58.0;
}
/*
inizio della routine �comunicazionedistanza� graffa di apertura, che delimita
l�inizio delle istruzioni della routine
visualizza sul monitor seriale il valore contenuto nella variabile cm visualizza la
dicitura � cm� e posiziona il
cursore sulla riga successiva graffa di chiusura delle istruzioni della routine
fase di setup, e cioe� istruzioni
eseguite solo a inizio programma graffa di apertura, che delimita l�inizio delle
istruzioni di setup
inizializza il monitor seriale definisce la porta digitale 2 (collegata al trigger)
come porta di output
definisce la porta digitale 3 (collegata all'echo) come porta di input graffa di
chiusura delle istruzioni di setup
*/
/*
inizializza il monitor seriale definisce la porta digitale 2 (collegata al trigger)
come
porta di output definisce la porta digitale 3 (collegata all'echo) come porta di
input
*/
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(3, INPUT);
}
/*
lancia la routine di misurazione della distanza lancia la routine di comunicazione
della distanza attende un secondo prima di ripetere il ciclo
*/
void loop()
{
misurazionedistanza ();
comunicazionedistanza ();
delay (1000);
Serial.print(cm);
Serial.println(" cm");
if (cm > 0 && cm <= 30) { // maggiore di 0 "E" minore uguale a 30 condizione
vera, se falsa passa alla successiva
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 24); // 9
digitalWrite(latchPin, HIGH);
delay(1000); // inserisco un intervallo
}
else if (cm > 30 && cm <= 33) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 0); // 8
digitalWrite(latchPin, HIGH);
delay(1000);
}
else if (cm > 33 && cm <= 36) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 120); // 7
digitalWrite(latchPin, HIGH);
delay(1000);
}
else if (cm > 36 && cm <= 39) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 2); // 6
digitalWrite(latchPin, HIGH);
delay(1000);
}
else if (cm > 39 && cm <= 42) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 18); // 5
digitalWrite(latchPin, HIGH);
delay(1000);
}
else if (cm > 42 && cm <= 45) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 25); // 4
digitalWrite(latchPin, HIGH);
delay(1000);
}
else if (cm > 45 && cm <= 48) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 48); // 3
digitalWrite(latchPin, HIGH);
delay(1000);
}
else if (cm > 48 && cm <= 51) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 36); // 2
digitalWrite(latchPin, HIGH);
delay(1000);
}
else if (cm > 51 && cm <= 54) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 121); // 1
digitalWrite(latchPin, HIGH);
delay(1000);
}
else {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 64); // 0 � sottointeso che tutte le
lunghezze oltre 54 cm scrive zero
digitalWrite(latchPin, HIGH);
delay(1000);
}
}