Cordial saludo, apenas me estoy preparando para trabajar con arreglos y tengo este problema..
("aclaro" en otro post me ayudaron a guardar los datos en eeprom y como esto es distinto abri un nuevo tema)
estoy leyendo una tarjeta rfid la estoy comparando y si es igual activo una salida, lo estoy haciendo con un programa que trabaja bien pero esta en arduino el cual no me gusta mucho y deseo hacerlo en "ccs" busco vuestra ayuda para realizarlo. (adaptar el codigo)
aqui los creditos del programa en el cual me apoyo(https://www.itead.cc/blog/rdm6300-arduino-door-control-system)
notas.. el programa tiene un sensor magnetico y un servo no los requiero por eso comento esas lineas, solo necesito la salida para acivar el led.
dejo el programa original en arduino y mi intento en ccs. Gracias de antemano
Arduino
long Password1=11402124;//Please type the card's ID number
long Password2=7927290;//Please type the card's ID number
int flag=0,RX_Flag=0;//serial port sign
char Code[14];
long Num=0;//decode data
//int serpin=7;//pin of servo
//int Door=0; //variable para el sensor magnetico
void Read_ID(void)
{
int i=0;
char temp;
for(i=0;(Serial.available()>0);i++)//
//while(Serial.available()>0)
{
temp=Serial.read();
Serial.print(temp);
delay(2);
Serial.println(i);
if(temp==0X02) //recieve the ssrt bit
{
flag=1;i=0;RX_Flag=0;//
}
if(flag==1)//detect the start bit and recieve data
{
if(temp==0X03)//detect the end code,
{
flag=0; //zero clearing
if(i==13) RX_Flag=1;//
else RX_Flag=0;
break;
}
Code[i]=temp;
}
}
flag=0;//
}
/*/
void pulse( int serpin,int angle)
{
int width;//
width=(angle*11)+500;//
digitalWrite(serpin,HIGH);//
delayMicroseconds(width);//
digitalWrite(serpin,LOW);//
delay(20-width/1000);
}
*/
void setup()
{
pinMode(13,OUTPUT);
pinMode(serpin,OUTPUT);
Serial.begin(9600);
Serial.println("This is a test for access control system");
delay(100);
Serial.println(Password1);
}
void loop()
{
int i;
RX_Flag=0;
while(1)
{
Read_ID();
if(RX_Flag==1)
{
for(i=5;i<11;i++)//
{
Num<<=4;
if(Code[i]>64) Num+=((Code[i])-55);
else Num+=((Code[i])-48);
Serial.println(Num);
}
Serial.println(Num);
if((Num==Password1)||(Num==Password2))//识别成功
{
digitalWrite(13,HIGH);
delay(5);
/*
for(int i=0;i<=50;i++)//
{
pulse(serpin,20);//
}
delay(2000);
while(analogRead(Door)>400);
delay(1000);
*/
digitalWrite(13,LOW);
delay(5);
*/
for(int i=0;i<=50;i++)//
{
pulse(serpin,180);//
}
*/
}
// else 识别失败
// {
// digitalWrite(13,LOW);
// for(int i=0;i<=50;i++)//
// {
// pulse(serpin,90);//
// }
// }
while(Serial.read()>0);//
RX_Flag=0;//
Num=0;//
}
}
}
En CCS // me compila pero no tengo nada a la salida serial
/*
ZOLUTION
*/
#include <16f1827.h>
#include <stdlib.h>
#USE DELAY(internal=4000000)
#FUSES NOPROTECT,NOWDT
#fuses nobrownout,nomclr
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,ERRORS)
//usando el pin de recepcion
#bit RXDTSEL = 0x11D.7 // 0X11D HACE REFERENCIA AL REGISTRO APFCON0 bit 7
#bit TXCKSEL = 0x11E.0 // 0X11D HACE REFERENCIA AL REGISTRO APFCON1 bit 0
#USE fast_io (A) // Optimizamos E/S del PORTB ( muy importante para ahorrar memoria )
#USE fast_io (B)
#BYTE porta= 0X0C
#BYTE portb= 0X0D
#define LED PIN_B0
// ******* variable globales ********
long Password1=6457979;//Please type the card's ID number
int flag=0,RX_Flag=0;//serial port sign
char Code[14];
long Num=0;//decode data
//int serpin=7;//pin of servo
//int Door=0; // entrada analoga A0
// ***********************************
// ***** INTERRUPCIONES : RDA Recepción USART ****
/*
#int_rda
void rda_handler(void)
{
Command=getc(); // recibe el comando ...
}
*/
// ****************************************
// Ejecutar según comando recibido /////////
void Read_ID(void);
void main()
{
RXDTSEL=0;// PIN CON VARIAS FUNCIONES EN 0 FUNCIONA COMO RX
TXCKSEL=0; // PIN CON VARIAS FUNCIONES EN 0 FUNCIONA COMO TX
//setup_adc_ports(NO_ANALOGS);
set_tris_b(0b00000010);
output_B(0x00);
printf("This is a test for access control system"); delay_ms(100);
output_low (LED);
while(TRUE); // final del Bucle infinito
{
int i;
long temp=0; //,time=0;
RX_Flag=0;
while(true)
{
Read_ID();
if(RX_Flag==1)
{
for(i=5;i<11;i++)//
{
Num<<=4;
if(Code[i]>64) Num+=((Code[i])-55);
else Num+=((Code[i])-48);
}
// if((Num==Password1)||(Num==Password2)||(Num==Password3))//识别æˆåŠŸ si alguna coincide
if(Num==Password1)//识别æˆåŠŸ
{
output_low (LED);
delay_ms(10000);
output_high (LED);
delay_ms(5);
}
RX_Flag=0;//
Num=0;//
}
}
}
}
//****************************
void Read_ID(void)
{
int i=0;
char temp;
for(i=0;(kbhit()>0);i++)//
//while(Serial.available()>0)
{
delay_ms(2);
if(temp==0X02) //recieve the ssrt bit
{
flag=1;i=0;RX_Flag=0;//
}
if(flag==1)//detect the start bit and recieve data
{
if(temp==0X03)//detect the end code,
{
flag=0; //zero clearing
if(i==13) RX_Flag=1;//
else RX_Flag=0;
break;
}
Code[i]=temp;
}
}
flag=0;//
}
// *****************************************