[quote]
[color=#7E7E7E]/* */[/color]
[color=#7E7E7E]// Constantes que no cambiarán[/color]
[color=#7E7E7E]// configuran los números de los pines[/color]
const [color=#CC6600]int[/color] Detectordeinteriores = 44;
const [color=#CC6600]int[/color] Detectordeexteriores = 45;
const [color=#CC6600]int[/color] Hacialaizquierda = 46;
const [color=#CC6600]int[/color] Hacialaderecha = 47;
const [color=#CC6600]int[/color] Sentido=22;
const [color=#CC6600]int[/color] Marchaprimera=23;
const [color=#CC6600]int[/color] Marchasegunda=24;
const [color=#CC6600]int[/color] Marchatercera=25;
const [color=#CC6600]int[/color] Semaforo=26 ;
const [color=#CC6600]int[/color] Bocina=27;
[color=#7E7E7E]//variables que cambiarán se usa para indicar que el tren no está en la estación[/color]
[color=#7E7E7E]// utilizamos esta variable para diferenciar el centrado del tren de la llegada[/color]
[color=#CC6600]boolean[/color] Perdido=[color=#006699]LOW[/color];
[color=#CC6600]void[/color] [color=#CC6600][b]setup[/b][/color]() {
[color=#7E7E7E]// configuramos los pines como salidas[/color]
[color=#CC6600]pinMode[/color](Sentido, [color=#006699]OUTPUT[/color]);
[color=#CC6600]pinMode[/color](Marchaprimera , [color=#006699]OUTPUT[/color]);
[color=#CC6600]pinMode[/color](Marchasegunda, [color=#006699]OUTPUT[/color]);
[color=#CC6600]pinMode[/color](Marchatercera, [color=#006699]OUTPUT[/color]);
[color=#CC6600]pinMode[/color](Semaforo, [color=#006699]OUTPUT[/color]);
[color=#CC6600]pinMode[/color](Bocina,[color=#006699]OUTPUT[/color]);
[color=#7E7E7E]//configuramos los pines como entradas[/color]
[color=#CC6600]pinMode[/color](Detectordeinteriores, [color=#006699]INPUT[/color]);
[color=#CC6600]pinMode[/color](Detectordeexteriores, [color=#006699]INPUT[/color]);
[color=#CC6600]pinMode[/color](Hacialaizquierda, [color=#006699]INPUT[/color]);
[color=#CC6600]pinMode[/color](Hacialaderecha, [color=#006699]INPUT[/color]);
}
[color=#CC6600]void[/color] [color=#CC6600][b]loop[/b][/color]()
{
[color=#7E7E7E]//Si pulsamos el pulsador de la estación de la izquierda[/color]
[color=#7E7E7E]//van entrando las marchas según el tiempo que pongamos en milisegundos[/color]
[color=#CC6600]if[/color] ([color=#CC6600]digitalRead[/color](Hacialaderecha) == [color=#006699]HIGH[/color]) { [color=#7E7E7E]//hacia la derecha [/color]
[color=#CC6600]digitalWrite[/color] (Sentido,[color=#006699]LOW[/color]);
Perdido= [color=#006699]HIGH[/color];
[color=#CC6600]digitalWrite[/color](Marchaprimera, [color=#006699]HIGH[/color]);
[color=#CC6600]digitalWrite[/color](Bocina,[color=#006699]HIGH[/color]);
[color=#CC6600]digitalWrite[/color](Semaforo,[color=#006699]HIGH[/color]);
[color=#CC6600]delay[/color](250);
[color=#CC6600]digitalWrite[/color](Bocina,[color=#006699]LOW[/color]);
[color=#CC6600]digitalWrite[/color](Marchasegunda,[color=#006699]HIGH[/color]);
[color=#CC6600]delay[/color](250);
[color=#CC6600]digitalWrite[/color](Marchatercera,[color=#006699]HIGH[/color]);
[color=#CC6600]delay[/color](250);
[color=#CC6600]digitalWrite[/color](Marchatercera,[color=#006699]LOW[/color]);
}
[color=#7E7E7E]//Si en cualquiera de las dos estaciones llega el tren [/color]
[color=#7E7E7E]//cuando se activa el detector de interiores se apaga la marcha segunda[/color]
[color=#CC6600]if[/color] (([color=#CC6600]digitalRead[/color](Detectordeinteriores)==[color=#006699]HIGH[/color])&&([color=#CC6600]digitalRead[/color](Detectordeexteriores==[color=#006699]LOW[/color]))){[color=#7E7E7E]//llegada[/color]
[color=#CC6600]if[/color] ((Perdido==[color=#006699]HIGH[/color])){
[color=#CC6600]digitalWrite[/color](Marchasegunda, [color=#006699]LOW[/color]);
[color=#CC6600]digitalWrite[/color](Semaforo,[color=#006699]LOW[/color]);
[color=#CC6600]digitalWrite[/color](Bocina, [color=#006699]HIGH[/color]);
}
}
[color=#7E7E7E]//cuando se activa el detector de exteriores se apaga la marcha primera y se deberá parar el tren[/color]
[color=#CC6600]if[/color] (([color=#CC6600]digitalRead[/color](Detectordeexteriores)==[color=#006699]HIGH[/color])){[color=#7E7E7E]//llegada[/color]
[color=#CC6600]if[/color](Perdido==[color=#006699]HIGH[/color]){
[color=#CC6600]digitalWrite[/color](Marchaprimera,[color=#006699]LOW[/color]);
Perdido=[color=#006699]LOW[/color];
[color=#CC6600]digitalWrite[/color](Bocina, [color=#006699]LOW[/color]);
}
}
[color=#7E7E7E]//centrado1: cuando el tren este en la estación se pueden dar 4 casos segun se encuentre activado [/color]
[color=#7E7E7E]//los detectores y segun este el sentido. El programa deberá cambiar el sentido y activar la primera marcha[/color]
[color=#7E7E7E]//para buscar estar en el punto que están activados los dos sensores[/color]
[color=#CC6600]if[/color] (Perdido==[color=#006699]LOW[/color]){
[color=#CC6600]if[/color](([color=#CC6600]digitalRead[/color](Detectordeinteriores)==[color=#006699]LOW[/color]) && ([color=#CC6600]digitalRead[/color](Detectordeexteriores)==[color=#006699]HIGH[/color])){
[color=#CC6600]if[/color] ([color=#CC6600]digitalRead[/color](Sentido)==[color=#006699]LOW[/color]){
[color=#CC6600]do[/color]{
[color=#CC6600]digitalWrite[/color](Sentido,[color=#006699]HIGH[/color]);
[color=#CC6600]delay[/color](20);
[color=#CC6600]digitalWrite[/color](Marchaprimera,[color=#006699]HIGH[/color]);
[color=#CC6600]delay[/color](100);
}
[color=#CC6600]while[/color]( (([color=#CC6600]digitalRead[/color](Detectordeinteriores)==[color=#006699]LOW[/color]) && ([color=#CC6600]digitalRead[/color](Detectordeexteriores)== [color=#006699]HIGH[/color])));
}
}
}
[color=#CC6600]if[/color] (Perdido==[color=#006699]LOW[/color]){[color=#7E7E7E]//centrado2[/color]
[color=#CC6600]if[/color](([color=#CC6600]digitalRead[/color](Detectordeinteriores)==[color=#006699]HIGH[/color]) && ([color=#CC6600]digitalRead[/color](Detectordeexteriores)==[color=#006699]LOW[/color])){
[color=#CC6600]if[/color]([color=#CC6600]digitalRead[/color](Sentido==[color=#006699]HIGH[/color]))
{
[color=#CC6600]do[/color]{
[color=#CC6600]digitalWrite[/color](Sentido,[color=#006699]LOW[/color]);
[color=#CC6600]delay[/color](20);
[color=#CC6600]digitalWrite[/color](Marchaprimera,[color=#006699]HIGH[/color]);
[color=#CC6600]delay[/color](100);
}
[color=#CC6600]while[/color]( (([color=#CC6600]digitalRead[/color](Detectordeinteriores)==[color=#006699]HIGH[/color]) && ([color=#CC6600]digitalRead[/color](Detectordeexteriores)== [color=#006699]LOW[/color])));
}
}
}
[color=#7E7E7E]//parado cuando estan activados los dos sensores es donde el tren debe parar[/color]
[color=#CC6600]if[/color]([color=#CC6600]digitalRead[/color](Detectordeinteriores)==[color=#006699]HIGH[/color]){
[color=#CC6600]if[/color]([color=#CC6600]digitalRead[/color](Detectordeexteriores)==[color=#006699]HIGH[/color]){
[color=#CC6600]digitalWrite[/color](Marchaprimera,[color=#006699]LOW[/color]);
}
}
[color=#7E7E7E]// check if the pushbutton is pressed.[/color]
[color=#7E7E7E]// if it is, the buttonState is HIGH:[/color]
[color=#CC6600]if[/color] ([color=#CC6600]digitalRead[/color](Hacialaizquierda)==[color=#006699]HIGH[/color]) {
[color=#7E7E7E]// turn LED on: [/color]
[color=#CC6600]digitalWrite[/color] (Sentido,[color=#006699]HIGH[/color]);
[color=#CC6600]digitalWrite[/color](Marchaprimera, [color=#006699]HIGH[/color]);
[color=#CC6600]digitalWrite[/color](Bocina,[color=#006699]HIGH[/color]);
[color=#CC6600]digitalWrite[/color](Semaforo,[color=#006699]HIGH[/color]);
Perdido= [color=#006699]HIGH[/color];
[color=#CC6600]delay[/color](250);
[color=#CC6600]digitalWrite[/color](Bocina,[color=#006699]LOW[/color]);
[color=#CC6600]digitalWrite[/color](Marchasegunda,[color=#006699]HIGH[/color]);
[color=#CC6600]delay[/color](250);
[color=#CC6600]digitalWrite[/color](Marchatercera,[color=#006699]HIGH[/color]);
[color=#CC6600]delay[/color](250);
[color=#CC6600]digitalWrite[/color](Marchatercera,[color=#006699]LOW[/color]);
}
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color](Perdido,[color=#006699]DEC[/color]);
}[color=#7E7E7E]//main[/color]
[/quote]