He usado la imagen de que tiene muchos escrito la palabra Texto indicado arriba.
El código me cabe bien la trama de bytes. Por ahora enviar al puerto serie no me sirve, da error, pero dejo el código aquí. Loque hace es básico, encender y apagar un Led con un botón.
Lo que hay que modificarlo para enviar la foto al puerto serie del PC.
// Enviar tramas de byte al puerto serie.
int estadoBoton=0; // Guardará el estado del botón HIGH o LOW.
int anteriorBoton=0;
char caracter;
String comando;
int flagMensaje=0;
unsigned char rawData[] = {
0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0xD9,
0x08, 0x03, 0x00, 0x00, 0x00, 0x68, 0xE3, 0xD8, 0x7C, 0x00, 0x00, 0x00,
0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72,
0x65, 0x00, 0x41, 0x64, 0x6F, 0x62, 0x65, 0x20, 0x49, 0x6D, 0x61, 0x67,
0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xC9, 0x65, 0x3C, 0x00, 0x00,
0x03, 0x26, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4D, 0x4C, 0x3A, 0x63, 0x6F,
0x6D, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x2E, 0x78, 0x6D, 0x70, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3C, 0x3F, 0x78, 0x70, 0x61, 0x63, 0x6B, 0x65,
0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6E, 0x3D, 0x22, 0xEF, 0xBB, 0xBF,
0x22, 0x20, 0x69, 0x64, 0x3D, 0x22, 0x57, 0x35, 0x4D, 0x30, 0x4D, 0x70,
0x43, 0x65, 0x68, 0x69, 0x48, 0x7A, 0x72, 0x65, 0x53, 0x7A, 0x4E, 0x54,
0x63, 0x7A, 0x6B, 0x63, 0x39, 0x64, 0x22, 0x3F, 0x3E, 0x20, 0x3C, 0x78,
0x3A, 0x78, 0x6D, 0x70, 0x6D, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6D, 0x6C,
0x6E, 0x73, 0x3A, 0x78, 0x3D, 0x22, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x3A,
0x6E, 0x73, 0x3A, 0x6D, 0x65, 0x74, 0x61, 0x2F, 0x22, 0x20, 0x78, 0x3A,
0x78, 0x6D, 0x70, 0x74, 0x6B, 0x3D, 0x22, 0x41, 0x64, 0x6F, 0x62, 0x65,
0x20, 0x58, 0x4D, 0x50, 0x20, 0x43, 0x6F, 0x72, 0x65, 0x20, 0x35, 0x2E,
0x36, 0x2D, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2E, 0x31, 0x35,
0x36, 0x37, 0x39, 0x37, 0x2C, 0x20, 0x32, 0x30, 0x31, 0x34, 0x2F, 0x30,
0x38, 0x2F, 0x32, 0x30, 0x2D, 0x30, 0x39, 0x3A, 0x35, 0x33, 0x3A, 0x30,
0x32, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3E, 0x20,
0x3C, 0x72, 0x64, 0x66, 0x3A, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6D, 0x6C,
0x6E, 0x73, 0x3A, 0x72, 0x64, 0x66, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70,
0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x77, 0x33, 0x2E, 0x6F, 0x72,
0x67, 0x2F, 0x31, 0x39, 0x39, 0x39, 0x2F, 0x30, 0x32, 0x2F, 0x32, 0x32,
0x2D, 0x72, 0x64, 0x66, 0x2D, 0x73, 0x79, 0x6E, 0x74, 0x61, 0x78, 0x2D,
0x6E, 0x73, 0x23, 0x22, 0x3E, 0x20, 0x3C, 0x72, 0x64, 0x66, 0x3A, 0x44,
0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x72,
0x64, 0x66, 0x3A, 0x61, 0x62, 0x6F, 0x75, 0x74, 0x3D, 0x22, 0x22, 0x20,
0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x78, 0x6D, 0x70, 0x3D, 0x22, 0x68,
0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F,
0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x78, 0x61, 0x70, 0x2F, 0x31,
0x2E, 0x30, 0x2F, 0x22, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x78,
0x6D, 0x70, 0x4D, 0x4D, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F,
0x2F, 0x6E, 0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F,
0x6D, 0x2F, 0x78, 0x61, 0x70, 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x6D, 0x6D,
0x2F, 0x22, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3A, 0x73, 0x74, 0x52,
0x65, 0x66, 0x3D, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6E,
0x73, 0x2E, 0x61, 0x64, 0x6F, 0x62, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0x2F,
0x78, 0x61, 0x70, 0x2F, 0x31, 0x2E, 0x30, 0x2F, 0x73, 0x54, 0x79, 0x70,
0x65, 0x2F, 0x52, 0x65, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65,
0x66, 0x23, 0x22, 0x20, 0x78, 0x6D, 0x70, 0x3A, 0x43, 0x72, 0x65, 0x61,
0x74, 0x6F, 0x72, 0x54, 0x6F, 0x6F, 0x6C, 0x3D, 0x22, 0x41, 0x64, 0x6F,
0x62, 0x65, 0x20, 0x50, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F, 0x70,
0x20, 0x43, 0x43, 0x20, 0x32, 0x30, 0x31, 0x34, 0x20, 0x28, 0x57, 0x69,
0x6E, 0x64, 0x6F, 0x77, 0x73, 0x29, 0x22, 0x20, 0x78, 0x6D, 0x70, 0x4D,
0x4D, 0x3A, 0x49, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44,
0x3D, 0x22, 0x78, 0x6D, 0x70, 0x2E, 0x69, 0x69, 0x64, 0x3A, 0x35, 0x31,
0x30, 0x35, 0x43, 0x43, 0x37, 0x42, 0x43, 0x45, 0x36, 0x35, 0x31, 0x31,
0x45, 0x36, 0x41, 0x45, 0x44, 0x46, 0x41, 0x33, 0x45, 0x43, 0x35, 0x38,
0x42, 0x46, 0x39, 0x39, 0x41, 0x38, 0x22, 0x20, 0x78, 0x6D, 0x70, 0x4D,
0x4D, 0x3A, 0x44, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x49, 0x44,
0x3D, 0x22, 0x78, 0x6D, 0x70, 0x2E, 0x64, 0x69, 0x64, 0x3A, 0x35, 0x31,
0x30, 0x35, 0x43, 0x43, 0x37, 0x43, 0x43, 0x45, 0x36, 0x35, 0x31, 0x31,
0x45, 0x36, 0x41, 0x45, 0x44, 0x46, 0x41, 0x33, 0x45, 0x43, 0x35, 0x38,
0x42, 0x46, 0x39, 0x39, 0x41, 0x38, 0x22, 0x3E, 0x20, 0x3C, 0x78, 0x6D,
0x70, 0x4D, 0x4D, 0x3A, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46,
0x72, 0x6F, 0x6D, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3A, 0x69, 0x6E,
0x73, 0x74, 0x61, 0x6E, 0x63, 0x65, 0x49, 0x44, 0x3D, 0x22, 0x78, 0x6D,
0x70, 0x2E, 0x69, 0x69, 0x64, 0x3A, 0x35, 0x31, 0x30, 0x35, 0x43, 0x43,
0x37, 0x39, 0x43, 0x45, 0x36, 0x35, 0x31, 0x31, 0x45, 0x36, 0x41, 0x45,
0x44, 0x46, 0x41, 0x33, 0x45, 0x43, 0x35, 0x38, 0x42, 0x46, 0x39, 0x39,
0x41, 0x38, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3A, 0x64, 0x6F,
0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x49, 0x44, 0x3D, 0x22, 0x78, 0x6D,
0x70, 0x2E, 0x64, 0x69, 0x64, 0x3A, 0x35, 0x31, 0x30, 0x35, 0x43, 0x43,
0x82
};
void setup()
{
pinMode(13,OUTPUT); // Donde está el Led 13.
pinMode(8,INPUT); // Entrada digital donde está el pulsador.
Serial.begin(115200);
}
void loop()
{
estadoBoton=digitalRead(8); // Leer entrada digital número 8.
// Si el pulsador está pulsado, se enciende el Led 13 y
// envía comando HIGH por el puerto serie.
if(estadoBoton != anteriorBoton) // Comprueba si ha habido un cambio en el estado del botón.
{
flagMensaje = 0; // Resetea la bandera a 0.
anteriorBoton = estadoBoton; // Guarda el estado actual del botón.
}
if (estadoBoton == HIGH && flagMensaje == 0) // Comprueba que el botón esté pulsado y que no se haya enviado el mensaje.
{
digitalWrite(13,HIGH);
Serial.write("ON");
//Serial.write(rawData); // Enviar imagen o foto hacia el puerto serie al PC.
delay(50);
if(flagMensaje == 0) // Si se envío el mensaje aumenta la variable a 1 para no enviarlo la próxima vez.
flagMensaje++;
}
// De lo contrario, Led 13 epagado y envía LOW al puerto serie.
else if(flagMensaje == 0) // Si el botón no está presionado y aún no se envía el mensaje.
{
digitalWrite(13,LOW);
Serial.write("OFF");
delay(50);
if(flagMensaje == 0) // Si se envió el mensaje aumenta la variable en 1 para no enviarla la próxima vez.
flagMensaje++;
}
}
Compilado da:
El Sketch usa 3534 bytes (10%) del espacio de almacenamiento de programa. El máximo es 32256 bytes.
Las variables Globales usan 212 bytes (10%) de la memoria dinámica, dejando 1836 bytes para las variables locales. El máximo es 2048 bytes.
Por ahora, el tema de las memorias andan bien.
Sigo experimentando...
Nota: He recortado la mitad de las tramas de byte porque en el foro no cabe.