//Librerie impiegate per il progetto
#include <SPI.h>
#include <Ethernet.h>
//Creao un array di byte per specificare il mac address
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//creo un array di byte per specificare l'indirizzo ip
byte ip[] = {192, 168, 0, 153};
int valore = 0;
//creo una variabile char per memorizzare i byte letti dal client
char Data_RX;
EthernetClient client;
IPAddress server(192,168,0,151);
int sensor = 2; // porta analogica del sensore
int ledPin1 = 7; //porta digitale per i led
int ledPin2 = 6;
int ledPin3 = 5;
int redPin = 4;
int greenPin = 9;
int yellowPin = 8;
int lightPin =0; //porta analogica per la fotoresistenza
int valori[10]; // array composto dai valori rilevati dal sensore di distanza
int val = 0; // variabile finale del sensore
unsigned long time1 = millis();
unsigned long time2 = millis();
unsigned long time3 = millis();
unsigned long timeS = millis();
void setup() {
//inizializza lo shield con il mac e l'ip
Ethernet.begin(mac, ip);
pinMode(ledPin1, OUTPUT); // dichiariamo ledPin come un OUTPUT
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
Serial.begin(9600);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
} // chiusura setup
void loop() {
int livelloNotte = 600; // indica il valore dell'oscurità presente, se superiore alla luminosità allora vuol dire che è notte
int livelloGiorno = analogRead(lightPin);
val = 0;
Serial.println("sono nel loop");
for(int i=0; i<10; i++)
{
valori[i] = analogRead(sensor);
val = val + (valori[i] / 10 );
}
if((timeS+1000)<millis()){
Serial.print("valore "); // stampa i valori rilevati dal sensore e dalla fotoresistenza
Serial.println(val);
Serial.print("luce ");
Serial.println(livelloGiorno);
timeS = (millis());
}// chiusura stampe
if(livelloGiorno>livelloNotte){ // se è giorno
semaforo();
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
}// chiusura luce
if(livelloGiorno<livelloNotte){
if(val > 350 && val < 500){
semaforo();
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, LOW);
}// chiusura if distanza
if(val > 250 && val < 350){
semaforo();
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
}// chiusura if distanza
if(val > 150 && val < 250){
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(yellowPin, LOW);
digitalWrite(ledPin3, HIGH);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
}// chiusura if distanza
if(val>500 || val<150){
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(yellowPin, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
}// chiusura if distanza
}// chiusura if luce
controllo();
sendData(valore,6797);
delay(500);
} // chiusura Loop
void colori(int red, int green, int yellow){ // funzione che imposta i colori
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(yellowPin, yellow);
}
void semaforo(){
if((time1+10000)<millis())//Se sono trascorsi 8 secondi
{
valore = 1;
colori(0, 255, 0); // verde
time2 = millis(); // azzera il conteggio del tempo
} // chiusura if rosso
if((time2+2000)<millis())//Se sono trascorsi 500 millisecondi
{
valore = 3;
colori(255, 0, 0); // rosso
time3 = millis(); // azzera il conteggio del tempo
}//chiusura if giallo
if((time3+8000)<millis()) //Se sono trascorsi 500 millisecondi
{
valore = 2;
colori(255, 255, 0); // giallo
time1 = millis(); // azzera il conteggio del tempo
}// chiusura if verde
}// chiusura void semaforo
void controllo(){
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
// Serial.println("disconnecting.");
client.stop();
}
}
void sendData(int vall, int porta) {
if (client.connect(server, porta)) {
// Serial.println("connecting...");
client.println(valore);
} else{
// if you couldn't make a connection:
// Serial.println("connection failed");
//Serial.println();
//Serial.println("disconnecting.");
client.stop();
}
}
this is the complete code.