conclusionesvirtual.urbe.edu/tesispub/0104250/conclu.pdf · lugar seguro la funcionalidad del...
TRANSCRIPT
63
CONCLUSIONES
Una vez realizado el estudio, análisis, diseño, y desarrollo del sistema
de control para la gestión vehicular a través de semáforos en línea
mediante captación de señales ultrasonido, se detallan las conclusiones
de las 6 fases aplicadas en el desarrollo de esta investigación, soportado
por una metodología diseñada por Fitzgerald y Savant.
En primer lugar, con el objetivo de cumplir con los requerimientos y
especificaciones necesarias se analizó la situación actual siendo utilizada
la observación directa como tecnica de recolección de datos, con motivo
de juntar la información necesaria para elaborar un plan detallado para
aliviar el congestionamiento de las vías terrestres, capacitando los
semáforos de manera que sean capaces de generar respuestas
automáticas a irregularidades que se puedan presentar en dichas vías.
Además, se investigó sobre la situación actual de los semáforos en la
ciudad de Maracaibo, dicha investigación arrojó como resultado un déficit
en el mantenimiento de los semaforos, asi como tambiénuna tecnología
insuficientemente capacitada para la implementación de sistema de
control como el planteado en el presente estudio.
Para cumplir con el segundo objetivo, se definieron los dispositivos e
instrumentos que fueron utilizados en este proyecto,como los Arduinos
UNO R3, resistencias, entre otros, luego de conocer los instrumentos se
procedió al diseño de este sistema de control y la programación adecuada
de cada dispositivo.
De acuerdo al 3er objetivo, se generaron los diagramas, tanto de
flujos como de circuitos,para dar a conocer el funcionamiento de los
arduinos programados a los semáforos en línea.
64
No obstante, se comenzó la instalación y montaje del prototipo
representado en maqueta de acuerdo al cuarto objetivo, ya ajustado para
dicho prototipo se comenzó a hacer el seguimiento y las pruebas para
este sistema de control, el cual fue sometido a diversas pruebas en
diferentes escenarios (4), siguiendo con estas observaciones hasta que
el sistema funcionó de la manera esperada.
Finalmente se determinó con el desarrollo de un sistema de control
para gestión vehicular a través de semáforos en línea mediante
captación de señales ultrasonido, mejorara el tiempo de respuesta de los
semáforos evitando el congestionamiento vehicular de las vías
beneficiando a los conductores y pasajeros en el tiempo de llegada a sus
destinos. Además, gracias a que estos semáforos están en constante
comunicación enviando y recibiendo información de datos, esto permitirá
negar la participación de autoridades competentes ya que este sistema
de control de forma automatizada realizara las respuestas en tiempo real
según el escenario ocurrido.
65
RECOMENDACIONES
Luego de haber realizado el desarrollo del sistema de control para
gestión vehicular a través de semáforos en línea mediante captación de
señales ultrasonido, se recomienda que este sistema deba estar en
constante observación, puesto que, requiere de un mantenimiento
constante y actualización tanto del software como de los dispositivos
electrónicos, para asegurar el cumplimiento de su función con un
excelente desempeño.
Tambien se recomienda la creación de una interfaz integrada o HMI
(Human Machine Interface) que permita visualizar de forma remota en un
lugar seguro la funcionalidad del sistema, el monitoreo en tiempo real de
la red que muestre el estado de cada semáforo o si existe alguna falla o
averia en algún semáforo y en que localidad.
Por otro lado se recomienda, contar con un personal calificado y
capacitado en las áreas de electrónica y computación, para garantizar el
manejo y mantenimiento del sistema de control optimizando su
funcionamiento. Se sugiere realizar cursos de capacitación en cuanto a
los instrumentos utilizados en este sistema y también el manejo
apropiado para monitorear y manipular el software implementado.
Por último se propone con fines de incrementar el valor de esta
investigación, contactar al gobierno estatal para la implementación de
este sistema a nivel regional y/o nacional para el beneficio de los
integrantes de cada ciudad o estado del país.
66
REFERENCIAS BIBLIOGRAFICAS
LIBROS Angulo U., José (2003), Microcontroladores PIC, Diseño practico de
aplicaciones. McGraw-Hill. Madrid, España. Bavaresco, A. (2006),Proceso Metodológico en la Investigación.
Universidad del Zulia, Maracaibo, Venezuela. Bonsiepe, Gui (1999),Del Objeto a la Interfase.Editorial Infinitos, Buenos
Aires, Argentina. Cal, R. y Reyes, M. (2007),Ingeniería de tránsito. 8va Edición. Editorial
Alfaomega. Mexico FitzGerald (2009).Business Data Communications & Networking.10ma Edicion. Wikey & Sons, Inc. Floyd, Thomas (2000),Fundamentos de Sistemas Digitales. Prentice Hall 7ma Edición Hurtado (2010), Metodología de la Investigación Holística. Editorial
SYPAL, Caracas, Venezuela. Ogata, K. (2005),Ingeniería de Control Moderna.4ta. Edición Pearson
Educación. Madrid, España. Ordinas, José María (2008), Protocolos y Aplicaciones de Internet.
Pearson Educación, Madrid, España. Sampieri(2010), Metodología de la Investigación.MacGraw-
Hill/Interamericana. Savant, C. (2000), Diseño Electrónico, Circuitos y Sistemas. 4ta Edición. Silva, J. (1996), Diccionario de multimedia.MacGraw– Hill Tamayo y Tamayo (1996),El Proceso de Investigación Científica. 4ta.
Edición. Limusa Noriega Editories. Tanenbaum S. Andrew (2003), Redes de Computadoras. 4ta. Edición.
Pearson Educación. Ciudad de México, México.
67
Vásquez Gil, P. (2010), Redes y Transmisión de Datos. Publicaciones Universidad de Alicante.
TESIS DE GRADO Arévalo y Pírela (2009).Sistema de control de distancia para vehículos
automotrices. Trabajo Especial de Grado (Ingeniería en Electrónica, Mención: Automatización y Control). Universidad Dr. Rafael Belloso Chacín.
Antequera y García (2013). Estudio de viabilidad para la generación de
energía eléctrica en semáforos inteligentes por medio de sistema de paneles de energía solar como alternativa para el ahorro energético. Trabajo Especial de Grado (Ingeniería Industrial). Universidad Dr. Rafael Belloso Chacín.
Deternoz y Fernández (2006). Sistema de gestión y monitoreo del tránsito
a través de semáforos inteligentes. Trabajo Especial de Grado (Ingeniería en Informática). Universidad Católica Andrés Bello.
FUENTES ELECTRONICAS ArduinoTeam (2015) Herramientas y Usos del Arduino Extraído de http://www.arduino.cc (Consulta: 2016, Noviembre)
Anexos
PROGRAMACION DEL
SEMAFORO SERVIDOR
70
#include<SoftwareSerial.h> #include <SPI.h> #include <Ethernet.h> #include<NewPing.h> /*CONFIGURACION DE LOS PARAMETROS ETHERNET SERVIDOR*/ bytemac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // byteip[] = { 192, 168, 1, 123 }; OTRA FORMA DE ESCRIBIR LA DIRECCIÓN IP IPAddressip(192, 168, 0, 125); // DIRECCIÓN IP ASIGNADA AL SERVIDOR bytegateway[] = { 192, 168, 0, 1 }; // LA DIRECCIÓN DE PUERTA DE ENLACE AL ROUTER bytesubnet[] = { 255, 255, 255, 0 }; // LA MÁSCARA SUBNET DEL ROUTER EthernetServer server = EthernetServer(12535); // CREA UN SERVIDOR QUE ESTA ATENTO A CONEXIONES ENTRANTES POR UN PUERTO DADO /*Aqui se configuran los pines donde debemos conectar el sensor*/ #define TRIGGER_PIN 6 #define ECHO_PIN 5 #define MAX_DISTANCE 35 // CENTIMETROS MAXIMOS A MEDIR #define TRIGGER_PIN2 9 #define ECHO_PIN2 8 #define MAX_DISTANCE2 35 // CENTIMETROS MAXIMOS A MEDIR /*Crear el objeto de la clase NewPing*/ NewPingsonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); NewPingsonar2(TRIGGER_PIN2, ECHO_PIN2, MAX_DISTANCE2); SoftwareSerialmySerial(2,3); // PINES QUE SERVIRAN DE COMUNICACION SERIAL ENTRE DOS ARDUINOS voidsetup() { mySerial.begin(9600); // ACTIVA LA COMUNICACION ENTRE LOS DOS ARDUINOS Serial.begin(9600); // ACTVIA LA COMUNICACION ENTRE ARDUINO Y PC Ethernet.begin(mac,ip,gateway,subnet); // ACTIVA EL MODULO ETHERNET pinMode(17, OUTPUT); // ROJO pinMode(18, OUTPUT); // AMARILLO pinMode(19, OUTPUT); // VERDE
71
pinMode(7, OUTPUT); // LED ALERTA } void loop() { digitalWrite(19, HIGH); Serial.println("VERDE ENCENDIO"); int time1 = millis(); int time2 = millis(); while (time2 - time1 <= 10000){ //TIEMPO DE VERDE NORMALMENTE EN MILISEGUNDOS intuS = sonar.ping_median(); Serial.print("Distancia 1.1: "); Serial.print(uS / US_ROUNDTRIP_CM); Serial.println("cm"); int distances11 = uS / US_ROUNDTRIP_CM; int uS2 = sonar2.ping_median(); Serial.print("Distancia 2.1: "); Serial.print(uS2 / US_ROUNDTRIP_CM); Serial.println("cm"); int distances21 = uS2 / US_ROUNDTRIP_CM; delay(1000); uS = sonar.ping_median(); Serial.print("Distancia 1.2: "); Serial.print(uS / US_ROUNDTRIP_CM); Serial.println("cm"); int distances12 = uS / US_ROUNDTRIP_CM; uS2 = sonar2.ping_median(); Serial.print("Distancia 2.2: "); Serial.print(uS2 / US_ROUNDTRIP_CM); Serial.println("cm"); int distances22 = uS2 / US_ROUNDTRIP_CM; delay(1000); uS = sonar.ping_median(); Serial.print("Distancia 1.3: "); Serial.print(uS / US_ROUNDTRIP_CM);
72
Serial.println("cm"); int distances13 = uS / US_ROUNDTRIP_CM; uS2 = sonar2.ping_median(); Serial.print("Distancia 2.3: "); Serial.print(uS2 / US_ROUNDTRIP_CM); Serial.println("cm"); int distances23 = uS2 / US_ROUNDTRIP_CM; if (distances11 || distances12 || distances13 || distances21 || distances22 || distances23 >= 6) { if ((distances11 && distances12 && distances13 && distances21 && distances22 && distances23 >= 6) && (distances11 == distances12) && (distances12 == distances13) && (distances21 == distances22) && (distances22 == distances23)) { time2 = millis(); while (time2 - time1 <=10000) { time2 = millis(); } Serial.println("10 Segundos mas al Verde"); mySerial.write('H'); int time3 = millis(); int time4 = millis(); while (time4 - time3 <= 10000){ // TIEMPO A DAR SI AMBOS CARRILES ESTAN QUEDADOS EN MILISEGUNDOS time4 = millis(); digitalWrite(7,HIGH); } digitalWrite(7,LOW); goto final; } else { if ((distances11 && distances12 && distances13 >= 6) && (distances11 == distances12) && (distances12 == distances13)) { time2 = millis(); while (time2 - time1 <=10000) { time2 = millis(); } Serial.println("5 Segundos mas al Verde"); mySerial.write('L'); int time3 = millis(); int time4 = millis();
73
while (time4 - time3 <= 5000){ // TIEMPO A DAR SI UN CARRIL ESTA QUEDADO time4 = millis(); digitalWrite(7,HIGH); } digitalWrite(7,LOW); goto final; } if ((distances21 && distances22 && distances23 >= 6) && (distances21 == distances22) && (distances22 == distances23)){ time2 = millis(); while (time2 - time1 <=10000) { time2 = millis(); } Serial.println("5 Segundos mas al Verde"); mySerial.write('L'); int time3 = millis(); int time4 = millis(); while (time4 - time3 <= 5000){ // TIEMPO A DAR SI UN CARRIL ESTA QUEDADO time4 = millis(); digitalWrite(7,HIGH); } digitalWrite(7,LOW); goto final; } else { intuS = sonar.ping_median(); Serial.print("Distancia 1.4: "); Serial.print(uS / US_ROUNDTRIP_CM); Serial.println("cm"); int distances14 = uS / US_ROUNDTRIP_CM; int uS2 = sonar2.ping_median(); Serial.print("Distancia 2.4: "); Serial.print(uS2 / US_ROUNDTRIP_CM); Serial.println("cm"); int distances24 = uS2 / US_ROUNDTRIP_CM; delay(1000); uS = sonar.ping_median(); Serial.print("Distancia 1.5: "); Serial.print(uS / US_ROUNDTRIP_CM);
74
Serial.println("cm"); int distances15 = uS / US_ROUNDTRIP_CM; uS2 = sonar2.ping_median(); Serial.print("Distancia 2.5: "); Serial.print(uS2 / US_ROUNDTRIP_CM); Serial.println("cm"); int distances25 = uS2 / US_ROUNDTRIP_CM; delay(1000); uS = sonar.ping_median(); Serial.print("Distancia 1.6: "); Serial.print(uS / US_ROUNDTRIP_CM); Serial.println("cm"); int distances16 = uS / US_ROUNDTRIP_CM; uS2 = sonar2.ping_median(); Serial.print("Distancia 2.6: "); Serial.print(uS2 / US_ROUNDTRIP_CM); Serial.println("cm"); int distances26 = uS2 / US_ROUNDTRIP_CM; if (distances14 || distances15 || distances16 || distances24 || distances25 || distances26 >= 6) { if ((distances14 && distances15 && distances16 && distances24 && distances25 && distances26 >= 6) && (distances14 == distances15) && (distances15 == distances16) && (distances24 == distances25) && (distances25 == distances26)) { time2 = millis(); while (time2 - time1 <=10000) { time2 = millis(); } Serial.println("10 Segundos mas al Verde"); mySerial.write('H'); int time3 = millis(); int time4 = millis(); while (time4 - time3 <= 10000){ // TIEMPO A DAR SI AMBOS CARRILES ESTAN QUEDADOS time4 = millis(); digitalWrite(7,HIGH); } digitalWrite(7,LOW); goto final;
75
} else { if((distances14 && distances15 && distances16>= 6) && (distances14 == distances15) && (distances15 == distances16)) { time2 = millis(); while (time2 - time1 <=10000) { time2 = millis(); } Serial.println("5 Segundos mas al Verde"); mySerial.write('L'); int time3 = millis(); int time4 = millis(); while (time4 - time3 <= 5000){ // TIEMPO A DAR SI UN CARRIL ESTA QUEDADO time4 = millis(); digitalWrite(7,HIGH); } digitalWrite(7,LOW); goto final; } if((distances24 && distances25 && distances26 >= 6) && (distances24 == distances25) && (distances25 == distances26)) { time2 = millis(); while (time2 - time1 <=10000) { time2 = millis(); } Serial.println("5 Segundos mas al Verde"); mySerial.write('L'); int time3 = millis(); int time4 = millis(); while (time4 - time3 <= 5000){ // TIEMPO A DAR SI UN CARRIL ESTA QUEDADO time4 = millis(); digitalWrite(7,HIGH); } digitalWrite(7,LOW); goto final; } else { intuS = sonar.ping_median();
76
Serial.print("Distancia 1.7: "); Serial.print(uS / US_ROUNDTRIP_CM); Serial.println("cm"); int distances17 = uS / US_ROUNDTRIP_CM; int uS2 = sonar2.ping_median(); Serial.print("Distancia 2.7: "); Serial.print(uS2 / US_ROUNDTRIP_CM); Serial.println("cm"); int distances27 = uS2 / US_ROUNDTRIP_CM; delay(1000); uS = sonar.ping_median(); Serial.print("Distancia 1.8: "); Serial.print(uS / US_ROUNDTRIP_CM); Serial.println("cm"); int distances18 = uS / US_ROUNDTRIP_CM; uS2 = sonar2.ping_median(); Serial.print("Distancia 2.8: "); Serial.print(uS2 / US_ROUNDTRIP_CM); Serial.println("cm"); int distances28 = uS2 / US_ROUNDTRIP_CM; delay(1000); uS = sonar.ping_median(); Serial.print("Distancia 1.9: "); Serial.print(uS / US_ROUNDTRIP_CM); Serial.println("cm"); int distances19 = uS / US_ROUNDTRIP_CM; uS2 = sonar2.ping_median(); Serial.print("Distancia 2.9: "); Serial.print(uS2 / US_ROUNDTRIP_CM); Serial.println("cm"); int distances29 = uS2 / US_ROUNDTRIP_CM; if (distances17 || distances18 || distances19 || distances27 || distances28 || distances29 >= 6) { if ((distances17 && distances18 && distances19 && distances27 && distances28 && distances29 >= 6) && (distances17 == distances18)
77
&&(distances18 == distances19) && (distances27 == distances28) && (distances28 == distances29)) { time2 = millis(); while (time2 - time1 <=10000) { time2 = millis(); } Serial.println("10 Segundos mas al Verde"); mySerial.write('H'); int time3 = millis(); int time4 = millis(); while (time4 - time3 <= 10000){ // TIEMPO A DAR SI AMBOS CARRILES ESTAN QUEDADOS time4 = millis(); digitalWrite(7,HIGH); } digitalWrite(7,LOW); goto final; } else { if ((distances17 && distances18 && distances19 >= 6) && (distances17 == distances18) && (distances18 == distances19)) { time2 = millis(); while (time2 - time1 <=10000) { time2 = millis(); } Serial.println("5 Segundos mas al Verde"); mySerial.write('L'); int time3 = millis(); int time4 = millis(); while (time4 - time3 <= 5000){ // TIEMPO A DAR SI UN CARRIL ESTA QUEDADO time4 = millis(); digitalWrite(7,HIGH); } digitalWrite(7,LOW); goto final; } if ((distances27 && distances28 && distances29 >= 6) && (distances27 == distances28) && (distances28 == distances29)) { time2 = millis();
78
while (time2 - time1 <=10000) { time2 = millis(); } Serial.println("5 Segundos mas al Verde"); mySerial.write('L'); int time3 = millis(); int time4 = millis(); while (time4 - time3 <= 5000){ // TIEMPO A DAR SI UN CARRIL ESTA QUEDADO time4 = millis(); digitalWrite(7,HIGH); } digitalWrite(7,LOW); goto final; } } } } } } } } } time2 = millis(); } final: digitalWrite(19,LOW); delay(20); Serial.println("VERDE APAGADO"); digitalWrite(18,HIGH); Serial.println("AMARILLO PRENDIDO"); delay(3000); digitalWrite(18,LOW); delay(20);
79
Serial.println("AMARILLO APAGADO"); digitalWrite(17,HIGH); Serial.println("ROJO ENCENDIDO"); delay(10000); digitalWrite(17,LOW); delay(20); Serial.println("ROJO APAGADO
PROGRAMACION DEL SEMAFORO ESCLAVO
81
#include<SPI.h> #include <SoftwareSerial.h> #include <Ethernet.h> #include<NewPing.h> /*CONFIGURACION DE LOS PARAMETROS ETHERNET SERVIDOR*/ bytemac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEF }; // byteip[] = { 192, 168, 1, 123 }; OTRA FORMA DE ESCRIBIR LA DIRECCIÓN IP IPAddressip(192, 168, 0, 126); // DIRECCIÓN IP ASIGNADA AL SERVIDOR bytegateway[] = { 192, 168, 0, 1 }; // LA DIRECCIÓN DE PUERTA DE ENLACE AL ROUTER bytesubnet[] = { 255, 255, 255, 0 }; // LA MÁSCARA SUBNET DEL ROUTER EthernetServer server = EthernetServer(12535); // CREA UN SERVIDOR QUE ESTA ATENTO A CONEXIONES ENTRANTES POR UN PUERTO DADO SoftwareSerialmySerial(2,3); voidsetup() { Serial.begin(9600); // ACTIVA LA COMUNICACION ENTRE ARDUINO Y PC mySerial.begin(9600); // ACTVIVA LA COMUNICACION ENTRE LOS DOS ARDUINOS pinMode(6, OUTPUT); // ROJO pinMode(4, OUTPUT); // AMARILLO pinMode(5, OUTPUT); // VERDE delay(5000); // DIFERENCIA DE TIEMPOS DE ENCENDIDO ENTRE ARDUINOS } void loop() { char incoming; digitalWrite(5, HIGH); Serial.println("VERDE ENCENDIDO"); int time1 = millis(); int time2 = millis();
82
while (time2 - time1 <= 10000) // TIEMPO NORMAL DE ENCENDIDO VERDE { if (mySerial.available()) { incoming = mySerial.read(); Serial.print(incoming); Serial.println(); if (incoming == 'L') { time2 = millis(); while(time2 - time1 <= 10000) { time2 = millis(); } Serial.println("10 Segundos mas al Verde"); int time3 = millis(); int time4 = millis(); while(time4 - time3 <= 10000) // SI RECIBE "L" (UN CARRIL) TIEMPO QUE DARA { time4 = millis(); } gotoamarillo; } if (incoming == 'H') { time2 = millis(); while(time2 - time1 <= 10000) { time2 = millis(); } Serial.println("10 Segundos mas al Verde"); int time3 = millis(); int time4 = millis(); while(time4 - time3 <= 10000) // SI RECIBE "H" (DOS CARRILES) TIEMPO QUE DARA { time4 = millis(); } gotoamarillo; } } time2 = millis();
83
} amarillo: digitalWrite(5,LOW); Serial.println("VERDE APAGADO"); delay(20); digitalWrite(4,HIGH); Serial.println("AMARILLO ENCENDIDO"); time1 = millis(); time2 = millis(); while (time2 - time1 <= 3000) { time2 = millis(); } digitalWrite(4,LOW); Serial.println("AMARILLO APAGADO"); delay(20); digitalWrite(6,HIGH); Serial.println("ROJO ENCENDIDO"); time1 = millis(); time2 = millis(); while (time2 - time1 <= 10000) { time2 = millis(); } digitalWrite(6,LOW); Serial.println("ROJO APAGADO"); }
DIAGRAMA DE FLUJO DEL
SEMAFORO SERVIDOR
85
DIAGRAMA DE FLUJO DEL
SEMAFORO ESCLAVO
87
PROGRAMACION DE LA
INTERFAZ GRAFICA
89
Principal.java
package semaforo;
import about.About;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import static java.lang.Thread.sleep;
public class Principal extends javax.swing.JDialog implements Runnable{
//declaracion de variable hilo y ciclo
Thread h1;
Thread h2;
Thread otroT;
int i=0;
int xcase =1;
int xcase2 =1;
boolean sema1 = false;
boolean sema2 = false;
boolean yaclickeo = false;
short opc1 = 0;
short opc2 =0;
public Principal(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
setLocationRelativeTo(null);
h1 = new Thread(this);
90
h2 = new Thread(this);
}
public void run() {
Thread ct = Thread.currentThread();
if (ct==h1) {
System.out.println("si es h1");
}
System.out.println("OPC1 -->" + opc1);
System.out.println("SEMA1 -->" + sema1 +"SEMA2 -->" + sema2);
if (sema1) {
switch(opc1){
case 1:
System.out.println("OPC1");
xcase = 1;
i = 0;
while (ct == h1) {
System.out.println("ENTRO A OPC: 1 i: " + i + " xcase: " + xcase);
i = i + 1;
tiempo1.setText(String.valueOf(i));
switch (xcase) {
case 1:
if (i == 10) {
i = 0;
xcase = 1 + xcase;
}
break;
91
case 2:
if (i == 4) {
i = 0;
xcase = 1 + xcase;
}
break;
case 3:
if (i == 10) {
i = 0;
xcase = 1 + xcase;
}
break;
default:
break;
}
if (xcase >= 4) {
xcase = 1;
}
switch (xcase) {
case 3:
semaforo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/red.png")));
jTextField1.setText("ALTO");
break;
case 2:
semaforo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/yellow.png")));
92
jTextField1.setText("PRECAUCION");
break;
case 1:
jTextField1.setText("SIGA");
semaforo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/green.png")));
break;
default:
System.out.println("error");
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
// if (i==9&&xcase==3) {
// break;
// }
}
break;
case 2:
xcase=1;
i=0;
while (ct == h1) {
System.out.println("ENTRO A OPC: 2 i: " + i + " xcase: "+ xcase );
i = i + 1;
93
tiempo1.setText(String.valueOf(i));
if (xcase==3) {
if (i == 10) {
i = 0;
xcase = 1 + xcase;
}
}else if(xcase==2){
if (i == 4) {
i = 0;
xcase = 1 + xcase;
}
}else if(xcase==1){
if (i == 15) {
i = 0;
xcase = 1 + xcase;
}
}
if(xcase>=4){
xcase=1;
}
switch (xcase) {
94
case 3:
semaforo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/red.png")));
jTextField1.setText("ALTO");
break;
case 2:
semaforo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/yellow.png")));
jTextField1.setText("PRECAUCION");
break;
case 1:
jTextField1.setText("SIGA");
semaforo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/green.png")));
break;
default:
System.out.println("error");
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
break;
case 3:
xcase=1;
i=0;
95
while (ct == h1) {
System.out.println("ENTRO A OPC: 3 i: " + i + " xcase: "+ xcase );
i = i + 1;
tiempo1.setText(String.valueOf(i));
if (xcase==3) {
if (i == 10) {
i = 0;
xcase = 1 + xcase;
}
}else if(xcase==2){
if (i == 4) {
i = 0;
xcase = 1 + xcase;
}
}else if(xcase==1){
if (i == 15) {
i = 0;
xcase = 1 + xcase;
}
}
if(xcase>=4){
96
xcase=1;
}
switch (xcase) {
case 3:
semaforo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/red.png")));
jTextField1.setText("ALTO");
break;
case 2:
semaforo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/yellow.png")));
jTextField1.setText("PRECAUCION");
break;
case 1:
jTextField1.setText("SIGA");
semaforo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/green.png")));
break;
default:
System.out.println("error");
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
break;
97
case 4:
xcase=1;
i=0;
while (ct == h1) {
System.out.println("ENTRO A OPC: 4 i: " + i + " xcase: "+ xcase );
i = i + 1;
tiempo1.setText(String.valueOf(i));
if (xcase==3) {
if (i == 10) {
i = 0;
xcase = 1 + xcase;
}
}else if(xcase==2){
if (i == 4) {
i = 0;
xcase = 1 + xcase;
}
}else if(xcase==1){
if (i == 20) {
i = 0;
xcase = 1 + xcase;
98
}
}
if(xcase>=4){
xcase=1;
}
switch (xcase) {
case 3:
semaforo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/red.png")));
jTextField1.setText("ALTO");
break;
case 2:
semaforo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/yellow.png")));
jTextField1.setText("PRECAUCION");
break;
case 1:
jTextField1.setText("SIGA");
semaforo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/green.png")));
break;
default:
System.out.println("error");
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
99
}
}
break;
}
}else if(sema2){
switch(opc1){
case 1:
xcase=1;
i=0;
while (ct == h2) {
i = i + 1;
tiempo2.setText(String.valueOf(i));
if (xcase==3) {
if (i == 10) {
i = 0;
xcase = 1 + xcase;
}
}else if(xcase==2){
if (i == 4) {
i = 0;
xcase = 1 + xcase;
100
}
}else if(xcase==1){
if (i == 10) {
i = 0;
xcase = 1 + xcase;
}
}
if(xcase>=4){
xcase=1;
}
switch (xcase) {
case 3:
semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/red.png")));
jTextField1.setText("ALTO");
break;
case 2:
semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/yellow.png")));
jTextField1.setText("PRECAUCION");
break;
case 1:
jTextField1.setText("SIGA");
semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/green.png")));
break;
101
default:
System.out.println("error");
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
break;
case 2:
xcase=1;
i=0;
while (ct == h2) {
i = i + 1;
tiempo2.setText(String.valueOf(i));
if (xcase==3) {
if (i == 10) {
i = 0;
xcase = 1 + xcase;
}
}else if(xcase==2){
if (i == 4) {
i = 0;
xcase = 1 + xcase;
102
}
}else if(xcase==1){
if (i == 20) {
i = 0;
xcase = 1 + xcase;
}
}
if(xcase>=4){
xcase=1;
}
switch (xcase) {
case 3:
semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/red.png")));
jTextField1.setText("ALTO");
break;
case 2:
semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/yellow.png")));
jTextField1.setText("PRECAUCION");
break;
case 1:
jTextField1.setText("SIGA");
semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/green.png")));
103
break;
default:
System.out.println("error");
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
break;
case 3:
xcase=1;
i=0;
while (ct == h2) {
i = i + 1;
tiempo2.setText(String.valueOf(i));
if (xcase==3) {
if (i == 10) {
i = 0;
xcase = 1 + xcase;
}
}else if(xcase==2){
if (i == 4) {
i = 0;
104
xcase = 1 + xcase;
}
}else if(xcase==1){
if (i == 20) {
i = 0;
xcase = 1 + xcase;
}
}
if(xcase>=4){
xcase=1;
}
switch (xcase) {
case 3:
semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/red.png")));
jTextField1.setText("ALTO");
break;
case 2:
semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/yellow.png")));
jTextField1.setText("PRECAUCION");
break;
case 1:
jTextField1.setText("SIGA");
105
semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/green.png")));
break;
default:
System.out.println("error");
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
break;
case 4:
xcase=1;
i=0;
while (ct == h2) {
i = i + 1;
tiempo2.setText(String.valueOf(i));
if (xcase==3) {
if (i == 10) {
i = 0;
xcase = 1 + xcase;
}
}else if(xcase==2){
106
if (i == 4) {
i = 0;
xcase = 1 + xcase;
}
}else if(xcase==1){
if (i == 20) {
i = 0;
xcase = 1 + xcase;
}
}
if(xcase>=4){
xcase=1;
}
switch (xcase) {
case 3:
semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/red.png")));
jTextField1.setText("ALTO");
break;
case 2:
semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/yellow.png")));
jTextField1.setText("PRECAUCION");
break;
case 1:
107
jTextField1.setText("SIGA");
semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/green.png")));
break;
default:
System.out.println("error");
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
break;
}
}
}
private void initComponents() {
jLabel2 = new javax.swing.JLabel();
jSeparator1 = new javax.swing.JSeparator();
iniciar1 = new javax.swing.JButton();
detener1 = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel();
caso4 = new javax.swing.JButton();
caso2 = new javax.swing.JButton();
caso1 = new javax.swing.JButton();
caso3 = new javax.swing.JButton();
108
jTextField1 = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
semaforo2 = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
jLabel5 = new javax.swing.JLabel();
tiempo1 = new javax.swing.JLabel();
detener2 = new javax.swing.JButton();
iniciar2 = new javax.swing.JButton();
jPanel3 = new javax.swing.JPanel();
jLabel6 = new javax.swing.JLabel();
tiempo2 = new javax.swing.JLabel();
semaforo1 = new javax.swing.JLabel();
volver = new javax.swing.JButton();
instruccion = new javax.swing.JLabel();
jLabel1 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem2 = new javax.swing.JMenuItem();
jMenuItem3 = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("SIMULACION DE SEMAFORO EN JAVA");
getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
jLabel2.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jLabel2.setText("Control de Semaforo");
getContentPane().add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(330, 30, -1, -1));
109
getContentPane().add(jSeparator1, new org.netbeans.lib.awtextra.AbsoluteConstraints(229, 87, 510, 10));
iniciar1.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
iniciar1.setText("Iniciar");
iniciar1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
iniciar1ActionPerformed(evt);
}
});
getContentPane().add(iniciar1, new org.netbeans.lib.awtextra.AbsoluteConstraints(60, 380, 93, -1));
detener1.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
detener1.setText("Detener");
detener1.setEnabled(false);
detener1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
detener1ActionPerformed(evt);
}
});
getContentPane().add(detener1, new org.netbeans.lib.awtextra.AbsoluteConstraints(60, 420, -1, -1));
jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
caso4.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
caso4.setText("Escenario 4");
caso4.setEnabled(false);
110
caso4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
caso4ActionPerformed(evt);
}
});
jPanel1.add(caso4, new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 150, 350, -1));
caso2.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
caso2.setText("Escenario 2");
caso2.setEnabled(false);
caso2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
caso2ActionPerformed(evt);
}
});
jPanel1.add(caso2, new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 70, 350, -1));
caso1.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
caso1.setText("Escenario 1");
caso1.setEnabled(false);
caso1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
caso1ActionPerformed(evt);
}
});
jPanel1.add(caso1, new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 30, 350, -1));
caso3.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
111
caso3.setText("Escenario 3");
caso3.setEnabled(false);
caso3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
caso3ActionPerformed(evt);
}
});
jPanel1.add(caso3, new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 110, 350, -1));
getContentPane().add(jPanel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(260, 170, 450, 209));
jTextField1.setEditable(false);
jTextField1.setBackground(new java.awt.Color(255, 255, 255));
jTextField1.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
jTextField1.setHorizontalAlignment(javax.swing.JTextField.CENTER);
jTextField1.setText("APAGADO");
getContentPane().add(jTextField1, new org.netbeans.lib.awtextra.AbsoluteConstraints(390, 130, 200, -1));
jLabel4.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
jLabel4.setText("SEÑALIZACION");
getContentPane().add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(430, 100, -1, -1));
semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/off.png"))); // NOI18N
getContentPane().add(semaforo2, new org.netbeans.lib.awtextra.AbsoluteConstraints(820, 40, -1, -1));
jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
112
jLabel5.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
jLabel5.setText("Tiempo");
tiempo1.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
tiempo1.setText("0");
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(25, 25, 25)
.addComponent(jLabel5))
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(64, 64, 64)
.addComponent(tiempo1)))
.addContainerGap(43, Short.MAX_VALUE))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel5)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
113
.addComponent(tiempo1)
.addGap(25, 25, 25))
);
getContentPane().add(jPanel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(40, 460, 150, 80));
detener2.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
detener2.setText("Detener");
detener2.setEnabled(false);
detener2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
detener2ActionPerformed(evt);
}
});
getContentPane().add(detener2, new org.netbeans.lib.awtextra.AbsoluteConstraints(900, 420, -1, -1));
iniciar2.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
iniciar2.setText("Iniciar");
iniciar2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
iniciar2ActionPerformed(evt);
}
});
getContentPane().add(iniciar2, new org.netbeans.lib.awtextra.AbsoluteConstraints(900, 380, 93, -1));
jPanel3.setBorder(javax.swing.BorderFactory.createEtchedBorder());
114
jLabel6.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
jLabel6.setText("Tiempo");
tiempo2.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
tiempo2.setText("0");
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGap(25, 25, 25)
.addComponent(jLabel6))
.addGroup(jPanel3Layout.createSequentialGroup()
.addGap(64, 64, 64)
.addComponent(tiempo2)))
.addContainerGap(33, Short.MAX_VALUE))
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(tiempo2)
115
.addGap(25, 25, 25))
);
getContentPane().add(jPanel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(870, 460, -1, 80));
semaforo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/off.png"))); // NOI18N
getContentPane().add(semaforo1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 40, -1, -1));
volver.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
volver.setText("Volver a ingresar un caso");
volver.setEnabled(false);
volver.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
volverActionPerformed(evt);
}
});
getContentPane().add(volver, new org.netbeans.lib.awtextra.AbsoluteConstraints(340, 460, 340, -1));
instruccion.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N
instruccion.setText("Descripcion");
getContentPane().add(instruccion, new org.netbeans.lib.awtextra.AbsoluteConstraints(260, 410, -1, -1));
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
jLabel1.setText("Servidor");
getContentPane().add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(70, 10, -1, -1));
116
jLabel3.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
jLabel3.setText("Esclavo");
getContentPane().add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(910, 10, -1, -1));
jMenuItem2.setText("Reiniciar");
jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem2ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem2);
jMenuItem3.setText("Salir");
jMenuItem3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem3ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem3);
jMenuBar1.add(jMenu1);
setJMenuBar(jMenuBar1);
pack();
}// </editor-fold>
private void iniciar1ActionPerformed(java.awt.event.ActionEvent evt) {
117
sema1=true;
sema2=false;
// if (h1.isAlive()) {
//// h1.destroy();
//// h1.stop();
// h1.suspend();
// h2.resume();
// iniciar1.setEnabled(true);
// iniciar1.setText("Reanudar");
// }else{
// h2.start();
// }
// if (h2.isAlive()) {
// h2.suspend();
// }
// h1.start();
iniciar1.setEnabled(false);
iniciar2.setEnabled(false);
detener2.setEnabled(false);
detener1.setEnabled(true);
caso1.setEnabled(true);
caso2.setEnabled(true);
caso3.setEnabled(true);
caso4.setEnabled(true);
// run();
118
}
private void caso3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
// semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/green.png")));
// h1.stop();h2.stop();
opc1 =3;
if (sema1&&!h1.isAlive()) {
h1.start();
System.out.println("SEMAN 1 CASO 3 ");
iniciar2.setEnabled(false);
}
if (sema2&&!h2.isAlive()) {
h2.start();
System.out.println("SEMAN 2 CASO 3 ");
iniciar1.setEnabled(false);
}
caso2.setEnabled(false);
caso1.setEnabled(false);
caso3.setEnabled(false);
caso4.setEnabled(false);
// otroc.setEnabled(true);
volver.setEnabled(true);
instruccion.setText("OBSTRUCCION VIAL EN EL CANAL 2");
run();
}
119
private void caso1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
// semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/red.png")));
// h1.stop();h2.stop();
opc1 =1;
if (sema1&&!h1.isAlive()) {
h1.start();
System.out.println("SEMAN 1 CASO 1 ");
iniciar2.setEnabled(false);
}
if (sema2&&!h2.isAlive()) {
h2.start();
System.out.println("SEMAN 2 CASO 1 ");
iniciar1.setEnabled(false);
}
caso2.setEnabled(false);
caso1.setEnabled(false);
caso3.setEnabled(false);
caso4.setEnabled(false);
// otroc.setEnabled(true);
volver.setEnabled(true);
instruccion.setText("CALLE SIN CONGESTIÓN VEHÍCULAR");
run();
}
120
private void caso2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
// semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/red.png")));
// h1.stop();h2.stop();
opc1 =2;
if (sema1&&!h1.isAlive()) {
h1.start();
System.out.println("SEMAN 1 CASO 2 ");
iniciar2.setEnabled(false);
}
if (sema2&&!h2.isAlive()) {
h2.start();
System.out.println("SEMAN 2 CASO 2 ");
iniciar1.setEnabled(false);
}
caso2.setEnabled(false);
caso1.setEnabled(false);
caso3.setEnabled(false);
volver.setEnabled(true);
caso4.setEnabled(false);
instruccion.setText("OBSTRUCCION EN EL CANAL 1");
// otroc.setEnabled(true);
run();
121
}
private void caso4ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
// semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/red.png")));
// h1.stop();h2.stop();
opc1 =4;
if (sema1&&!h1.isAlive()) {
h1.start();
System.out.println("SEMAN 1 CASO 4 ");
iniciar2.setEnabled(false);
}
if (sema2&&!h2.isAlive()) {
h2.start();
System.out.println("SEMAN 2 CASO 4 ");
iniciar1.setEnabled(false);
}
caso2.setEnabled(false);
caso1.setEnabled(false);
caso3.setEnabled(false);
caso4.setEnabled(false);
volver.setEnabled(true);
// otroc.setEnabled(true)
instruccion.setText("OBSTRUCCION EN AMBOS CANALES");
run();
122
}
private void detener1ActionPerformed(java.awt.event.ActionEvent evt) {
if (yaclickeo==false&&sema1) {
h1.suspend();
// tiempo1.setText("0");
// i=0;
// xcase=1;
// semaforo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/off.png")));
// jTextField1.setText("APAGADO");
detener1.setText("Reanudar");
yaclickeo= true;
}else if (yaclickeo&&sema1){
h1.resume();
detener1.setText("Detener");
yaclickeo=false;
}
}
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Principal.main(null);
}
private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {
123
// TODO add your handling code here:
System.exit(0);
}
private void detener2ActionPerformed(java.awt.event.ActionEvent evt) {
if (yaclickeo==false&&sema2) {
h2.suspend();
// tiempo2.setText("0");
// i=0;
// xcase=1;
// semaforo2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/off.png")));
// jTextField1.setText("APAGADO");
detener2.setText("Reanudar");
yaclickeo= true;
}else if (yaclickeo&&sema2){
h2.resume();
detener2.setText("Detener");
yaclickeo=false;
}
}
private void iniciar2ActionPerformed(java.awt.event.ActionEvent evt) {
sema2=true;
sema1=false;
// if (h1.isAlive()) {
//// h1.destroy();
//// h1.stop();
124
// h1.suspend();
// h2.resume();
// iniciar1.setEnabled(true);
// iniciar1.setText("Reanudar");
// }else{
// h2.start();
// }
// if (h1.isAlive()) {
// h1.suspend();
// }
// h2.start();
iniciar2.setEnabled(false);
iniciar1.setEnabled(false);
detener2.setEnabled(true);
detener1.setEnabled(false);
caso1.setEnabled(true);
caso2.setEnabled(true);
caso3.setEnabled(true);
caso4.setEnabled(true);
// run();
}
private void volverActionPerformed(java.awt.event.ActionEvent evt) {
this.setVisible(false);
// this.dispose();
Principal dialog1 = new Principal(new javax.swing.JFrame(), true);
dialog1.show();
//
125
}
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the dialog */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Principal dialog = new Principal(new javax.swing.JFrame(), true);
126
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton caso1;
private javax.swing.JButton caso2;
private javax.swing.JButton caso3;
private javax.swing.JButton caso4;
public static javax.swing.JButton detener1;
private javax.swing.JButton detener2;
private javax.swing.JButton iniciar1;
private javax.swing.JButton iniciar2;
public static javax.swing.JLabel instruccion;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuBar jMenuBar1;
127
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JMenuItem jMenuItem3;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JTextField jTextField1;
private javax.swing.JLabel semaforo1;
private javax.swing.JLabel semaforo2;
private javax.swing.JLabel tiempo1;
private javax.swing.JLabel tiempo2;
private javax.swing.JButton volver;
// End of variables declaration
}
Semaforo.java:
package semaforo;
public class Semaforo {
public static void main(String[] args) {
}
}
Semaforos.java:
package semaforo;
import java.awt.*;
128
import java.applet.*;
import java.awt.event.*;
public class semaforos extends Applet implements ActionListener {
Button b1 = new Button("Iniciar");
Button b2 = new Button("Pausar");
TextArea ta = new TextArea("O_0", 10, 20);
Conteo c1;
Conteo c2;
Conteo c3;
public void init() {
setLayout(new GridLayout(2, 3));
add(ta);
add(b1);
add(b2);
b1.addActionListener(this);
b2.addActionListener(this);
}
public void empezar() {
c1 = new Conteo(5000, ta);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(b1)) {
empezar();
c1.start();
129
c2.start();
}
if (e.getSource().equals(b2)) {
c1.stop();
c2.stop();
}
}
class Conteo extends Thread {
long tiempo;
TextArea Area;
boolean contando = true;
public Conteo(long tiempo, TextArea Area) {
this.tiempo = tiempo;
this.Area = Area;
}
public void run() {
while (contando) {
Area.setBackground(Color.green);
try {
sleep(tiempo);
} catch (InterruptedException e) {
}
{
130
Area.setBackground(Color.yellow);
}
try {
sleep(tiempo);
} catch (InterruptedException e) {
}
Area.setBackground(Color.red);
try {
sleep(tiempo);
} catch (InterruptedException e) {
}
}
}
}
}