1 Programma per la gestione dei semafori (led - pulsanti)
const int rosso = 8;
const int giallo = 10;
const int verde = 12;
const int rossoPedone = 5;
const int verdePedone = 7;
const int rosso2 = 9;
const int giallo2 = 11;
const int verde2 = 13;
const int rossoPedone2 = 6;
const int verdePedone2 = 2;
const int pulsantePedone = 4;
const int pulsanteSera = 3;
void setup()
{
pinMode (rosso, OUTPUT);
pinMode (giallo, OUTPUT);
pinMode (verde, OUTPUT);
pinMode (rossoPedone, OUTPUT);
pinMode (verdePedone, OUTPUT);
pinMode (rosso2, OUTPUT);
pinMode (giallo2, OUTPUT);
pinMode (verde2, OUTPUT);
pinMode (rossoPedone2, OUTPUT);
pinMode (verdePedone2, OUTPUT);
pinMode (pulsantePedone, INPUT_PULLUP);
pinMode (pulsanteSera, INPUT_PULLUP);
}
void loop()
{
// ciclo semaforo
digitalWrite (verde, HIGH);
digitalWrite (verde2, HIGH);
digitalWrite (rossoPedone, HIGH);
digitalWrite (rossoPedone2, HIGH);
delay (5000);
digitalWrite (giallo, HIGH);
digitalWrite (giallo2, HIGH);
delay (2500);
digitalWrite (verde, LOW);
digitalWrite (verde2, LOW);
digitalWrite (giallo, LOW);
digitalWrite (giallo2, LOW);
digitalWrite (rossoPedone, LOW);
digitalWrite (rossoPedone2, LOW);
digitalWrite (rosso, HIGH);
digitalWrite (rosso2, HIGH);
digitalWrite (verdePedone, HIGH);
digitalWrite (verdePedone2, HIGH);
delay (5000);
digitalWrite (rosso, LOW);
digitalWrite (rosso2, LOW);
digitalWrite (verdePedone, LOW);
digitalWrite (verdePedone2, LOW);
if (digitalRead(pulsantePedone) == LOW) {
digitalWrite (rosso, HIGH);
digitalWrite (rosso2, HIGH);
digitalWrite (rossoPedone, LOW);
digitalWrite (rossoPedone2, LOW);
digitalWrite (verdePedone, HIGH);
digitalWrite (verdePedone2, HIGH);
delay(10000);
digitalWrite (rosso, LOW);
digitalWrite (rosso2, LOW);
digitalWrite (rossoPedone, HIGH);
digitalWrite (rossoPedone2, HIGH);
digitalWrite (verdePedone, LOW);
digitalWrite (verdePedone2, LOW);
}
if (digitalRead(pulsanteSera) == LOW) {
for (int i = 0; i < 15; i++ ) {
digitalWrite (giallo, HIGH);
digitalWrite (giallo2, HIGH);
delay (500);
digitalWrite (giallo, LOW);
digitalWrite (giallo2, LOW);
delay (500);
}
}
}
2 Programma per la gestione delle sbarre (sensore ad ultrasuoni - servomotore)
#include <Servo.h>
Servo sbarra;
const int trigPin = 9;
const int echoPin = 10;
const int servoPin = 6;
long durata;
int distanza;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
sbarra.attach(servoPin);
sbarra.write(0); // sbarra abbassata
Serial.begin(9600);
}
void loop() {
// Invio impulso ultrasuoni
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Lettura distanza
durata = pulseIn(echoPin, HIGH);
distanza = durata * 0.034 / 2;
Serial.print("Distanza: ");
Serial.println(distanza);
// Se oggetto vicino (<5 cm), alza sbarra
if (distanza > 0 && distanza < 5) {
sbarra.write(90); // alza
delay(6000);
} else {
sbarra.write(0); // abbassa
}
delay(1000);
}
3 Programma per la gestione del display (display - RTC)
#include <LiquidCrystal.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS3231 rtc;
unsigned long previousMillis = 0;
const long interval = 8000; // 8 secondi
bool mostraOra = true;
void setup() {
lcd.init();
lcd.backlight();
if (!rtc.begin()) {
lcd.print("RTC NON TROVATO");
while (1);
}
// DA USARE SOLO UNA VOLTA PER IMPOSTARE L'ORARIO
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
mostraOra = !mostraOra; // alterna schermata
lcd.clear();
}
if (mostraOra) {
DateTime now = rtc.now();
// Riga 1: Ora
lcd.setCursor(0, 0);
lcd.print("Ora: ");
if (now.hour() < 10) lcd.print("0");
lcd.print(now.hour());
lcd.print(":");
if (now.minute() < 10) lcd.print("0");
lcd.print(now.minute());
lcd.print(":");
if (now.second() < 10) lcd.print("0");
lcd.print(now.second());
// Riga 2: Data
lcd.setCursor(0, 1);
lcd.print("Data: ");
if (now.day() < 10) lcd.print("0");
lcd.print(now.day());
lcd.print("/");
if (now.month() < 10) lcd.print("0");
lcd.print(now.month());
lcd.print("/");
lcd.print(now.year());
} else {
// Scritta personalizzata
lcd.setCursor(0, 0);
lcd.print("Smart Traffic");
lcd.setCursor(0, 1);
lcd.print("IIS Casimiri 1B");
}
}