ya lo tengo casi terminado. Simplemente me he empeñado en que tenga los ibuttons personalizados, es decir, un ibutton mi padre, otro mi madre otro yo...etc y segun quien los use y entre en el control de acceso salga un mensaje en pantalla, bienvenido jose, antonio...etc.
aqui tengo el programa y en negrita lo que he añadido para esto, que nose donde puede fallar. Ya es simple curiosidad, porque el programa va de escandalo. ya que nos ponemos lo hacemos perfecto para exposicion:
lo he hecho por comparacion de cadenas: cadena vuelca y buffer que es el vector nº ibutton que leo. Si hay alguna otra forma...
Poco a poco ya voy aprendiendo algo de C:
#include <16f876.h> // Definiciones del PIC 16F876A
#include <stdlib.h>
#include <string.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT // Los Fuses de siempre
#use delay(clock=4000000) // Oscilador a 4 Mhz
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)// RS232 Estándar
#define use_portb_lcd TRUE //definir portb lcd
#use fixed_io(a_outputs=PIN_a0,PIN_a1)
#include <lcd.c> //libreria manejo lcd
#include <touch3.c>
void main() {
char buffer[8];
int j,k,iguales=0,i,z;
char vuelca[6];
char tabla[4][6]={{0x00,0x00,0x10,0x12,0x79,0x00}, //Para cambiar nº ibutton acceso
{0x00,0x00,0x10,0x14,0xB1,0x3D},
{0x00,0x00,0xFF,0xFF,0xFF,0xFA}, // J Y VECTOR-Hay 4 cambios de J //
{0x00,0x00,0xFF,0xFF,0xFF,0xFB}};
while (true)
{
lcd_init();
printf(lcd_putc," Esperando
ibutton...\r\n");
delay_ms(650); //DUDA CON ESTE TIEMPO
while(!touch_present()) ; //El ibutton esta en el lector
delay_ms(200);
if(touch_present()) {
touch_write_byte(0x33); //Escribo en la posicion 0x33 el nº serie
for(i=0;i<8;++i)
buffer=touch_read_byte(); //leo el nº de serie
// for(i=6;i!=0;i--)
// para visualizar su nº de serie// printf("%2X",buffer);
//printf("\r\n");
//delay_ms(100);
//printf("%2X%2X%2X%2X%2X%2X\r\n",tabla[0][0],tabla[0][1],tabla[0][2],tabla[0][3],tabla[0][4],tabla[0][5]);
//delay_ms (200);
}
i=0; //inicializo vectores
j=0;
while (j<4){ // J //
for(k=0;k<6;k++){ //se mueve a lo largo de cada vector
if (tabla[j][k]!=buffer[6-k]) //Comparamos vectores-tabla inicio con buffer final-k, dandole
//...la vuelta, xk vector buffer empieza x el final. Si son distintos...
{
iguales=1;
j++; //paso al siguiente vector y...
i=0; //inicializo vector buffer
break;
}
else{
iguales=0; //si son iguales...
i++; //incremento vector buffer
if (i==6) j=4; // J // Hasta que llega al maximo el vector y la tabla
}
}
}
lcd_init(); //inicializo de nuevo la lcd
if(iguales==0){ //si iguales=0 entonces se cumple, OK¡
set_tris_a(0xFE); //porta como salida, pin_A0, PIN_A1
disable_interrupts(GLOBAL); //todas las interrupciones desactivadas
//ibutton correcto Mensaje-led verde-1beep //
printf(lcd_putc," Bienvenido\r\n");
delay_ms(100);
z=0; for(k=6;k>0;--k){vuelca[z]=tabla[0][k];z++;}
if(strcmp(buffer,vuelca )==0) printf(lcd_putc,"Hola jose");
else{z=0; for(k=6;k>0;--k){vuelca[z]=tabla[1][k];z++;}}
if(strcmp(buffer,vuelca )==0) printf(lcd_putc,"Hola Lola");
else{z=0; for (k=6;k>0;--k){vuelca[z]=tabla[2][k];z++;}}
if(strcmp(buffer,vuelca )==0) printf(lcd_putc,"Hola Padre de Jose");
else{z=0; for(k=6;k>0;--k){vuelca[z]=tabla[3][k];z++;}}
if(strcmp(buffer,vuelca )==0) printf(lcd_putc,"Hola madre de Jose");
output_high(PIN_A0); //led on
output_high(PIN_B3); //activa buzzer 2 veces(beep)
delay_ms(450); //tiempo de escucha del beep
output_low(PIN_B3); // buffer off
delay_ms(5000);
output_low(PIN_A0); // Led off
}
else{
printf(lcd_putc,"Acceso Denegado\r\n");
//Secuencia de luces y sonidos//
output_high(PIN_a1); //led on
output_high(PIN_B3); //activa buzzer 2 veces(beep)
delay_ms(150); //tiempo de escucha del beep
output_low(PIN_a1); //led off
output_low(PIN_B3); //buffer off
delay_ms(150);
output_high(PIN_a1);
output_high(PIN_B3);
delay_ms(150);
output_low(PIN_a1);
output_low(PIN_B3);
delay_ms(150);
output_high(PIN_a1);
output_high(PIN_B3);
delay_ms(150);
output_low(PIN_a1);
output_low(PIN_B3);
delay_ms(150);
output_high(PIN_a1);
delay_ms(4000);
}
}
}