Hola muy buenas, necesito una pequeña pero gran ayuda.
Verán, estoy diseñando un proyecto de tesis que se trata de un sistema de botón de pánico, el cual si se presiona un botón y este envía un mensaje o una cadena de caracteres con un PIC para ser leído por el ARDUINO y así realizar ciertas acciones (lo mas sencillo por ejemplo seria prender un LED para que todo estuviese bien).
La parte del envió de la cadena de caracteres la hago a través, como dije, de un PIC16F628A via puerto serial. Si presiono el botón A (por ejemplo) este envía un carácter, la letra A, o envía una serie de caracteres (la letra A, después la B y después la C). Les dejo el código en Asembler por si lo quieren ver.
CÓDIGO PIC16F628A
__CONFIG _CP_OFF & _WDT_OFF & _LVP_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT &
_MCLRE_OFF
LIST P = PIC16F628A;
#include "P16F628A.inc";
ORG 0x00
CBLOCK 0x0C
cont1
cont2
cont10
contador
ENDC
movlw 7
movwf CMCON
CONFIGINICIAL:
clrf PORTA ;Valor Incial PORTA
clrf PORTB ;Valor Inicial PORTB
bsf STATUS,RP0
movlw b'00000111' ;3 Puertos De Entrada RA0, RA1, RA2
movwf TRISA
movlw b'00000010' ; RB0=Entrada, RB1=Entrada, RB2=Salida
movwf TRISB
movlw b'10000111' ;Habilidar Los Retardos
movwf OPTION_REG
movlw b'00100100' ;Habilitar La Transmision Async
movwf TXSTA
movlw 0x19 ;0x19=9600 BPS
movwf SPBRG
bcf STATUS,RP0
movlw b'10010000' ;Habilita La Recepcion Async
movwf RCSTA
ESTABILIZACION:
call RETARDO_50MS
call RETARDO_50MS
call RETARDO_50MS
movf RCREG,W
movf RCREG,W
movf RCREG,W
goto INICIO
INICIO:
call LIMPIAR
B1:
btfss PORTA,0; Se Encendio el Boton 1?
goto B2
goto BOTON1
B2:
btfss PORTA,1; Se Encendio el Boton 2?
goto B3
goto BOTON2
B3:
btfss PORTA,2; Se Encendio el Boton 3?
goto INICIO
goto BOTON3
BOTON1:
bsf PORTB,5
movlw 'B'
call ENVIAR_DATOS
movlw '1'
call ENVIAR_DATOS
call RETARDO_50MS
call RETARDO_50MS
call RETARDO_50MS
call RETARDO_50MS
call RETARDO_50MS
goto INICIO
BOTON2:
bsf PORTB,6
movlw 'B'
call ENVIAR_DATOS
movlw '2'
call ENVIAR_DATOS
call ENVIAR_DATOS
call RETARDO_50MS
call RETARDO_50MS
call RETARDO_50MS
call RETARDO_50MS
call RETARDO_50MS
goto INICIO
BOTON3:
bsf PORTB,7
movlw 'B'
call ENVIAR_DATOS
movlw '3'
call ENVIAR_DATOS
call RETARDO_50MS
call RETARDO_50MS
call RETARDO_50MS
call RETARDO_50MS
call RETARDO_50MS
goto INICIO
ENVIAR_DATOS:
movwf TXREG
bsf STATUS,RP0
ESPERAR:
btfss TXSTA,TRMT
goto ESPERAR
bcf STATUS,RP0
return
RETARDO_50MS:
movlw d'61'
movwf TMR0
bcf INTCON,T0IF ;
PREGUNTA:
btfss INTCON,T0IF ;
goto PREGUNTA
clrw
return
RETARDO_1SEG:
movlw d'2'
movwf cont2
CICLO_EXTERNO:
movlw d'9'
movwf cont10
CICLO_INTERNO:
call RETARDO_50MS
decfsz cont10
goto CICLO_INTERNO
decfsz cont2
goto CICLO_EXTERNO
return
LIMPIAR
bcf PORTB,5
bcf PORTB,6
bcf PORTB,7
clrf TXREG
return
END
Hasta acá todo bien, cuando envió un solo carácter a través del PIC, leerlo con el Arduino es facil por ser uno solo y se pueden realizar varias acciones. Pero por ejemplo como recibo una cadena de caracteres del PIC y guardarla en un vector, por ejemplo, si se envía la letra A después la B y después la C, como guardo eso en un vector, para después comparar o hacer acciones, es ahí donde me confundo. Les dejo el código en Arduino para ver si me ayudan. La intención seria guardar esos datos como si fuese una palabra como tal. Por ejemplo
Se envio A después B y después C a traves del PIC
Y esos caracteres se recibieron en el Arduino y se guardaron, como una palabra ABC.
CODIGO ARDUINO
void setup()
{
LED1 = 2;
LED2 = 3;
LED3 = 4;
pinMode(0, INPUT);
pinMode(1, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
Serial.begin(9600);
}
int LEDPIN, LED1, LED2, LED3, VALOR;
char CADENA[4];
byte POSICION=0;
void loop()
{
if(Serial.available())
{
memset(CADENA, 0,sizeof(CADENA));
while (Serial.available()>0)
{
delay(5);
CADENA[POSICION]=Serial.read();
POSICION++;
}
VALOR=atoi(CADENA);
Serial.println(CADENA);
POSICION=0;
}
}
Sin mas que decir muchas gracias y buenas noches