// 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;
// Esta trama de bytes corto en realidad es extremadamente largo, en este caso es como ejemplo.
PROGMEM const unsigned char rawData[] = {
0xFF, 0xD8, 0xFF, 0xE1, 0x00, 0x18, 0x45, 0x78, 0x69, 0x66, 0x00, 0x00
};
void setup()
{
pinMode(13, OUTPUT); // Donde está el Led 13.
pinMode(8, INPUT); // Entrada digital donde está el pulsador.
Serial.begin(115200);
}
void enviarImagen() {
for (unsigned int i = 0; i < sizeof(rawData); i++)
Serial.write(pgm_read_byte(&rawData[i]));
}
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");
enviarImagen(); // 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++;
}
}