Buenas a toda la comunidad veran estoy con este proyecto y la verdad es que le e dado tantas vueltas al asunto que ya no se me ocurre nada dejemen explicarles lo que deberia de hacer el PIC.
Semaforo
Se poseen tres semaforos de dos lucez cada uno quienes son controlados por tres interruptores P0, P1, P2 son los pulsadores que actuan como "sensores"; P0= RA0, P1=RA1, P2=RA2 asigne al semaforo S0 (RB1, RB2), al semaforo S1 (Rb3, rb4) y al semaforo S2 (RB5, RB6) donde
RB1, RB3, RB5 =leds rojos
RB2, RB4, RB6 =leds verdes
1) Al empezar todos los leds verdes estan encendidos (esto lo hace bien)
2) En este caso poseemos 3 casos donde al presionar por separado cada pulsador ocurre algo
-- Si se presiona P0 (entra un 1) el semaforo S2 pasa a rojo apagando el led verde de este se mantiene 5 seg asi y vuelve a verde
-- Si se presiona P1 (entra un 1) el semaforo S0 pasa a rojo apagando el led verde se mantiene por 5 segundos y vuelve a verde
-- si se presiona P2 (entra un 1) el semaforo S1 pasa a rojo apagando el led verde se mantiene por 5 seg y vuelve a verde
Hasta aqui el programa me esta sirviendo pero ahora entro en otro estado, que es cuando se presionan dos de los interruptores al mismo tiempo no se como asignar el codigo necesario para que tome que cuando por ejemplo se presionen P0 y P1 se pongan en rojo S2 y S1 (apagando sus leds verdesy manteniendo el led verde de S0) por 5 segundo para luego poner en rojo S0 yS2 (apagando sus leds verdes y encendiendo el led verde de S1) se mantiene por 5 seg y luego todos los semaforos se ponen en verde, si ven la ultima parte del codigo veran lo que puse aunque no se si eso servira, me gustaria saber si alguien me puede ayudar con el codigo para que interprete dos valores al mismo tiempo ya que al usar lo que estoy usando por alguna razon me hace todo pero un semaforo se mantiene apagado sus dos luces cuando no deberia ser asi.
No estoy seguro si me entendieron pero les dejo la tabla de estados por si no me entendieron bien.
Tambien les dejo el codigo que e hecho hasta ahora
#include <16F88.h>
#use delay (clock=1000000)
#fuses INTRC_IO,NOWDT,NOPUT,NOPROTECT
#byte port_b=0x06
#use fast_io(a)
void main() {
setup_oscillator(OSC_1MHZ|OSC_INTRC);
setup_comparator(NC_NC_NC_NC);
SETUP_ADC_PORTS(NO_ANALOGS);
set_tris_a(0xff);
set_tris_b(0x00);
disable_interrupts(GLOBAL);
///estado 3 semaforos en verde
do{
output_high(PIN_B2);
output_high(PIN_B4);
output_high(PIN_B6);
///fin del estado verde todos
///inicio control de los sensores
///S0, S1, S2
if (input(pin_a0))
{
output_low(pin_b6);
output_high(pin_b5);
delay_ms(4500);
}
if (input (pin_a1))
{
output_low(pin_b2);
output_high(pin_b1);
delay_ms(4500);
}
if (input (pin_a2))
{
output_low(pin_b4);
output_high(pin_b3);
delay_ms(4500);
}
////caso dos activando dos pulsadores al mismo tiempo
///caso S0 S1
if (input (pin_a0))
if (input (pin_a1)){
output_low (pin_b6);
output_high (pin_b5);
output_low (pin_b4);
output_high (pin_b3);
delay_ms(4500);
output_low(pin_b5);
output_high(pin_b6);
output_low(pin_b2);
output_high(pin_b1);
delay_ms(4500);
}
}while(true);
}
Bien lo que no me funciona es la ultima parte del codigo al presionar ambos botones o sigue la instruccion de cuando solo se preciona uno de ellos o asi que segun lo entiendo es como si no viera que ambos se presionaran, la verdad es que no se me ocurre nada ya en intentedo con varias formas use el
if(input_state(PIN_A0) & input_state(PIN_A1)){
}
Pero no me funciono en fin espero que alguien me pueda dar una luz con esto, saludos a todos