Hola buenas, necesito orientación con respecto a un proyecto en el que estoy en donde tengo un semáforo el cual enciendo mediante reles de 5v conectado al arduino entonces con un sensor JSN-SR04T detecta el paso de un camión en este caso y me saca del loop de espera de que pase algún objeto a x distancia para volver a rojo mi semáforo y apagar el verde a continuación dejo el código en cuestión. (el problema es que el sensor cuando lo conecto a la corriente mediante un cargador de 9v 1a)
#include <SPI.h>
#include <Ethernet.h>
const int trigPin = 8;//cable cafe
const int echoPin = 9;//cable blanco cafe
int RELE2 = 4; // Rele Rojo
int RELE3 = 5; // Rele Amarillo
int RELE4 = 6; // Rele Verde // Cable Blanco-Azul
byte mac[] = { xxxxxxx }; //mac address
byte ip[] = {xxxxxxxxxx};
byte gateway[] = { xxxxxxxxx};
byte subnet[] = { xxxxxxxxxxx}; //subnet mask
EthernetServer server(80); //server port
String readString;
void setup() {
Serial.begin(9600);
pinMode(RELE2, OUTPUT); // pin 2 como salida
pinMode(RELE3, OUTPUT); // pin 3 como salida
pinMode(RELE4, OUTPUT); // pin 4 como salida
pinMode(trigPin, OUTPUT); // Pin de Trigger Sensor Ultrasonico
pinMode(echoPin, INPUT); // Pin de Echo Sensor Ultrasonico
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.println();
Serial.print("WEBSERVER es: ");
Serial.println(Ethernet.localIP());
digitalWrite(RELE2, HIGH);
digitalWrite(RELE3, LOW);
digitalWrite(RELE4, LOW);
}
void loop() {
digitalWrite(trigPin, LOW);
//delay(3000);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(15);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
long distance = duration * 0.034 / 2;
Serial.println(distance);
int paso = distance;
delay(100);
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 100) {
readString += c;
}
if (c == '\n') {
Serial.println(readString); //print to serial monitor for debuging
client.println("HTTP/1.1 200 OK"); //send new page
client.println("Content-Type: text/html");
client.println();
client.println("<HTML>");
client.println("<HEAD>");
client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
client.println("<link rel='stylesheet' type='text/css' href='https://randomnerdtutorials.com/ethernetcss.css' />");
client.println("<TITLE>SEMAFORO 4 LUCES</TITLE>");
client.println("</HEAD>");
client.println("<BODY>");
client.println("<H1>Prueba Semaforo 4 Colores</H1>");
client.println("<hr />");
client.println("<br />");
client.println("<H2>Shield Ethernet</H2>");
client.println("<br />");
client.println("<a href=\"/?C3\"\">AMARILLO EN ESPERA</a>");
client.println("<a href=\"/?C4\"\">VERDE APROBADO</a>");
client.println("<a href=\"/?C5\"\">ROJO RECHAZADO</a>");
client.println("<br />");
client.println("<br />");
client.println("</BODY>");
client.println("</HTML>");
delay(1);
client.stop();
if (readString.indexOf("?C3") >0){ /////////////////////////////////////////////////////////////////////////////////////enciende rele amarillo
digitalWrite(RELE2, LOW);
digitalWrite(RELE3, HIGH);
digitalWrite(RELE4, LOW);
}
if (readString.indexOf("?C4") >0){ /////////////////////////////////////////////////////////////////////////////////////Cierra Barrera
// digitalWrite(RELE1, LOW);//Prende luz RELE 4 Flecha Derecha
digitalWrite(RELE2, LOW);
digitalWrite(RELE3, LOW);
digitalWrite(RELE4, HIGH);
if (paso<800) {
delayMicroseconds(10);
delay(500);//
while(distance>200){//mientras haya algo
Serial.println("Esperando Paso de Camión");
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(20);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
paso=distance;
Serial.println(paso);
delay(100);
}
}
Serial.println("Camion pasando");
Serial.println(paso);
delay(100);//
digitalWrite(RELE4, LOW);
digitalWrite(RELE2, HIGH);
}
if (readString.indexOf("?C5") >0){ /////////////////////////////////////////////////////////////////////////////////////Rojo titilante
// digitalWrite(RELE1, LOW);//Prende luz RELE 2 Rechazo error
digitalWrite(RELE3, LOW);
digitalWrite(RELE4, LOW);
digitalWrite(RELE2, LOW);
for (int i=0; i<4; i++){
digitalWrite(RELE2, HIGH);
delay(500);
digitalWrite(RELE2, LOW);
delay(500);
}
digitalWrite(RELE2, HIGH);
}
readString=""; //limpieza para la proxima lectura
}
}
}
}
}
