Buen día.
Amigos del foro, tengo un proyecto que se titula "llamado de enfermería"
Tengo los siguientes inconvenientes:
Son muchos puntos de llamado, y si varios pacientes realizan el llamado al mismo tiempo el PIC sólo toma el primer llamado y los otros se pierden.
Esto no puede ser posible porque son llamados importantes de un enfermo.
Necesito resolver como poner en cola los otros llamados.
El siguiente código es el que va en el tablero de la habitación.
Como pueden observar, es un PIC que me controla la activación de los pulsadores de cada llamado, y cada botón pulsado me envía un dato en binario por el puerto D para diferenciar el tipo de llamado.
El inconveniente es que son muchas habitaciones, estamos hablando de alrededor de 90.
Está la posibilidad de que varios pacientes realicen el llamado al mismo tiempo y no sea detectado, sino sólo el primero debido a que la consola o el PIC receptor sólo puede procesar un llamado al tiempo.
Éste es el programa de la consola que me recibe el dato que envía el PIC desde la habitación por medio de un cable UTP.
Amigos del foro, tengo un proyecto que se titula "llamado de enfermería"
Tengo los siguientes inconvenientes:
Son muchos puntos de llamado, y si varios pacientes realizan el llamado al mismo tiempo el PIC sólo toma el primer llamado y los otros se pierden.
Esto no puede ser posible porque son llamados importantes de un enfermo.
Necesito resolver como poner en cola los otros llamados.
El siguiente código es el que va en el tablero de la habitación.
Como pueden observar, es un PIC que me controla la activación de los pulsadores de cada llamado, y cada botón pulsado me envía un dato en binario por el puerto D para diferenciar el tipo de llamado.
El inconveniente es que son muchas habitaciones, estamos hablando de alrededor de 90.
Está la posibilidad de que varios pacientes realicen el llamado al mismo tiempo y no sea detectado, sino sólo el primero debido a que la consola o el PIC receptor sólo puede procesar un llamado al tiempo.
PHP:
#include <16f877a.h>
#fuses xt,nowdt,noprotect,nolvp,nowrt,nobrownout
#use delay(clock=4000000)
#include <stdlib.h>
#byte port_a=5
#byte port_b=6
#byte port_c=7
#byte port_d=8
#byte port_e=9
void main()
{
set_tris_a(0x00);
set_tris_b(0x00);
set_tris_c(0xff);
set_tris_d(0x00);
set_tris_e(0x00);
port_a=0x00;
port_b=0x00;
port_c=0x00;
port_d=0x00;
port_e=0x00;
while(true)
{
if(input(pin_C0)==1) //boton enfermera on
{
port_d=0x01;//dato que va a la consola
output_high(pin_E0);
delay_ms(50);//tiempo en alto de los puertos
port_d=0x00;//poner en cero los puertos
// delay_ms(50);//para evitar rebotes
}
if(input(pin_C1)==1) //boton enfermera off
{
port_d=0x02;//dato que va a la consola
output_low(pin_E0);
output_high(pin_B0);
delay_ms(100);
output_low(pin_B0);
port_d=0x00;
// delay_ms(50);
}
if(input(pin_C2)==1)//boton baño on
{
port_d=0x03;//dato que va a la consola
output_high(pin_E1);
delay_ms(100);
port_d=0x00;
//delay_ms(50);
}
if(input(pin_C3)==1)//boton baño off
{
port_d=0x04;//dato que va a la consola
output_low(pin_E1);
output_high(pin_B1);
delay_ms(100);
output_low(pin_B1);
port_d=0x00;
//delay_ms(50);
}
if(input(pin_C4)==1)//boton codigo azul on
{
port_d=0x05;//dato que va a la consola
output_high(pin_E2);
delay_ms(100);
port_d=0x00;
//delay_ms(50);
}
if(input(pin_C5)==1)//boton codigo azul off
{
port_d=0x06;//dato que va a la consola
output_low(pin_E2);
output_high(pin_B2);
delay_ms(100);
output_low(pin_B2);
port_d=0x00;
//delay_ms(50);
}
}
}
PHP:
#include <18f4685.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOWRT,NOBROWNOUT,NODEBUG
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#define use_portB_lcd TRUE
#USE standard_io(B)
#USE standard_io(A)
#USE standard_io(C)
#USE standard_io(D)
#USE standard_io(E)
#include <stdlib.h>
#include <input.c>
#include <lcd.c>
#byte puertoA=5
#byte puertoC=7
#byte puertoD=8
int16 asignacion; //variable de convercion de dato de binario a entero
void salto();
void salto1();
void pitoenfermera();
void pitobano();
void pitocodigoazul();
void pitoapagadoenfermera();
void pitobanoapagado();
void pitocodigoazulapagado();
Void main()
{
set_tris_a(0x00);
set_tris_c(0x00);
set_tris_d(0xFF);
lcd_init();
puertoA=0x00;
puertoC=0x00;
puertoD=0x00;
delay_ms(50);
LCD_PUTC("\f LLAMADO DE \n ENFERMERIA");
WHILE(TRUE)
{
delay_ms(100);
if((input(pin_D7)==0) && (input(pin_D6)==0) && (input(pin_D5)==0) && (input(pin_D4)==0) && (input(pin_D3)==0) && (input(pin_D2)==0) && (input(pin_D1)==0) && (input(pin_D0)==1))
{
lcd_putc("\fHABITACION 100\nENFERMERA URGENTE");
asignacion=1; //0x01
printf("@%lu"asignacion); //Se agrega el @ y # para enviar y diferenciar los datos
delay_ms(50);
pitoenfermera();
//reset_cpu();
}
if((input(pin_D7)==0) && (input(pin_D6)==0) && (input(pin_D5)==0) && (input(pin_D4)==0) && (input(pin_D3)==0) && (input(pin_D2)==0) && (input(pin_D1)==1) && (input(pin_D0)==0))
{
lcd_putc("\fHABITACION 100\nPACIENTE ATENDIDO");
asignacion=2;//0x02
printf("@%lu"asignacion); //Se agrega el @ y # para enviar y diferenciar los datos
delay_ms(50);
pitoapagadoenfermera();
//reset_cpu();
}
if((input(pin_D7)==0) && (input(pin_D6)==0) && (input(pin_D5)==0) && (input(pin_D4)==0) && (input(pin_D3)==0) && (input(pin_D2)==0) && (input(pin_D1)==1) && (input(pin_D0)==1))
{
lcd_putc("\fHABITACION 100\nBANO URGENTE");
asignacion=3;//0x03
printf("@%lu"asignacion); //Se agrega el @ y # para enviar y diferenciar los datos
delay_ms(50);
pitobano();
//reset_cpu();
}
if((input(pin_D7)==0) && (input(pin_D6)==0) && (input(pin_D5)==0) && (input(pin_D4)==0) && (input(pin_D3)==0) && (input(pin_D2)==1) && (input(pin_D1)==0) && (input(pin_D0)==0)) {
lcd_putc("\fHABITACION 100\nBANO ATENDIDO");
asignacion=4;//0x04
printf("@%lu"asignacion); //Se agrega el @ y # para enviar y diferenciar los datos
delay_ms(50);
pitobanoapagado();
//reset_cpu();
}
if((input(pin_D7)==0) && (input(pin_D6)==0) && (input(pin_D5)==0) && (input(pin_D4)==0) && (input(pin_D3)==0) && (input(pin_D2)==1) && (input(pin_D1)==0) && (input(pin_D0)==1))
{
lcd_putc("\fHABITACION 100\nCODIGO AZUL");
asignacion=5;//0x05
printf("@%lu"asignacion); //Se agrega el @ y # para enviar y diferenciar los datos
delay_ms(50);
pitocodigoazul();
//reset_cpu();
}
if((input(pin_D7)==0) && (input(pin_D6)==0) && (input(pin_D5)==0) && (input(pin_D4)==0) && (input(pin_D3)==0) && (input(pin_D2)==1) && (input(pin_D1)==1) && (input(pin_D0)==0))
{
lcd_putc("\fHABITACION 100\nC.AZUL ATENDIDO");
asignacion=6;//0x06
printf("@%lu"asignacion); //Se agrega el @ y # para enviar y diferenciar los datos
delay_ms(50);
pitocodigoazulapagado();
//reset_cpu();
}
Última edición por un moderador: