despues de capturar la debo pasarla a String y por ejemplo si quisiera pararme en la posicion 5 y cambiar el valor como puedo hacerlo despues de recibirlo?
ingeniero_henrym:
Hola buen Dia,
Estoy tratando de capturar la siguiente trama en un vector la cual esta en hexadecimal:
0 57 55 ff 75 5d 75 5d 55 d7 5f 7d 5f fd 5d 57 5f fd 5d 57 5f d5 5d 77 75 f5 7d 5f 7f 75 7f 77 7d 5d 7f 55 5d 57 75 57 5f 57 5f 55 5f 55 5f d7 5d 55 5f fd 5d 5d 5f fd 5d 55 5f
despues de capturar la debo pasarla a String y por ejemplo si quisiera pararme en la posicion 5 y cambiar el valor como puedo hacerlo despues de recibirlo?
No puede escribir en castellano en un foro en inglés ni viceverza. (lea las normas del foro).
Bueno vamos a su problema.
Trama en hexa, use un puntero a char definido asi
char *buf;
supongamos esto
#define MAX_BUFFER 100 // maximo 100 bytes
// Almacenamos el estado como variable global
int estado=LOW;
int estado_transf=LOW;
// Almacenamos también el número de milisegundos anterior
unsigned long momento_anterior=0;
unsigned long bytes_recibidos=0;
void setup()
{
Serial.begin(9600);
// Queremos que un led parpadee mientras trabajamos
pinMode(STATUS_LED, OUTPUT);
// Queremos salida por el led de transferencia
pinMode(TRANSF_LED, OUTPUT);
}
int serialGetString(char *string, int max)
{
unsigned i=0;
char sIn;
// Queremos que la cadena se rellene hasta max-2 para que en el carácter
// max-1 (el último) podamos meter el terminador \0
--max;
while (Serial.available() && i<max)
{
sIn=Serial.read();
string[i++]=sIn;
// La recepción tiene una latencia, se produce a través de una interrupción, que a lo mejor se ejecuta
// un poco después del Serial.available() por lo que el dato no entraría, por eso hacemos una pequeña espera
delayMicroseconds(500);
}
string[i++]='\0';
return i;
}
void loop ()
{
int recibe;
unsigned long momento_actual=millis();
char buf[MAX_BUFFER];
// No bloqueante, si hay algo para leer entramos, si no, no.
if(Serial.available())
{
serialGetString(buf, MAX_BUFFER);
// Escribimos el buffer completo
Serial.println((char*)buf);
}
// No usamos delay para el parpadeo porque nos entorpece la comunicación con el serial
if (momento_actual-momento_anterior>=BLINK_DELAY)
{
// Cambiamos el estado siguiente. Si era HIGH (1) ahora será
// LOW (0). He leído en algún lado que el valor de HIGH no
// siempre es 1; pero en este caso sí es así.
estado=!estado;
// Escribimos el estado actual del led
digitalWrite(STATUS_LED, estado);
// Establecemos el momento anterior como actual.
momento_anterior=momento_actual;
}
}