Sei sulla pagina 1di 4

int clockPin = 5; // 74HC595 pin 11 - Clock pin

int latchPin = 6; // 74HC595 pin 12 - Latch


int dataPin = 7; // 74HC595 pin 14 - Serial input

/*
I collegamenti necessari sono:

74HC595 pin 15 (Q0) => LED Pin 9 (A)


74HC595 pin 1 (Q1) => LED Pin 10 (B) : PIN 7SEGMENT PIN 74HC595
74HC595 pin 2 (Q2) => LED Pin 4 (C) : -9A- -Q0-
74HC595 pin 3 (Q3) => LED Pin 2 (D) : 7F | | 10B Q5| |Q1
74HC595 pin 4 (Q4) => LED Pin 1 (E) : |-6G-| |-Q6-|
74HC595 pin 5 (Q5) => LED Pin 7 (F) : 1E | | 4C Q4| |Q2
74HC595 pin 6 (Q6) => LED Pin 6 (G) : -2D- .5DP -Q3- .Q7
74HC595 pin 7 (Q7) => LED Pin 5 (DP)
74HC595 pin 8 (GND) => Terra
74HC595 pin 9 (Q7S) => Non connesso (usabile per connettere un ulteriore
Shift Register)
74HC595 pin 10 (MR) => Vcc (High)
74HC595 pin 11 (SHCP) => Arduino pin 5 - Clock
74HC595 pin 12 (STCP) => Arduino pin 6 - Latch
74HC595 pin 13 (OE) => Ground (Low)
74HC595 pin 14 (DS) => Arduino pin 7 - Serial In
74HC595 pin 16 (Vcc) => Vcc

il Pin 15 (Q0) del 74HC595 � connesso al pin del 7-Segmenti A


il Pin 1 (Q1) del 74HC595 � connesso al pin del 7-Segmenti B
il Pin 2 (Q2) del 74HC595 � connesso al pin del 7-Segmenti C
il Pin 3 (Q3) del 74HC595 � connesso al pin del 7-Segmenti D
il Pin 4 (Q4) del 74HC595 � connesso al pin del 7-Segmenti E
il Pin 5 (Q5) del 74HC595 � connesso al pin del 7-Segmenti F
il Pin 6 (Q6) del 74HC595 � connesso al pin del 7-Segmenti G
il Pin 7 (Q7) del 74HC595 � connesso al pin del 7-Segmenti Dp

LED pin 3 o 8 => resistenza da 330 Ohm => Vcc

variabile di tipo int chiamata �cm�, in cui viene memorizzata la


distanza dall'ostacolo, in centimetri. Con questa istruzione viene
definita la variabile e le viene inizialmente assegnato il valore zero
*/

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
*/

void comunicazionedistanza (void)


{
Serial.print(cm);
Serial.println(" cm");
}

/*
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);
}
}

Potrebbero piacerti anche