Buenas, estoy desarrollando un proyecto que consiste en un cliente de Twitter que obtenga los tweets de una cuenta de usuario y los mande por el puerto serie. Utilizo la placa Arduino UNO R3 y el Ethernet shield. La IDE que uso es la 1.0.2, el SO Windows (7 o XP, depende de donde estoy).
El código lo he sacado de aquí (
http://arduino.cc/forum/index.php/topic,93480.0.html) pero
lo he modificado un tanto (lo pongo al final del post), en vez de usar el del ejemplo que viene en la librería Ethernet (
http://arduino.cc/en/Tutorial/TwitterClient) porque ocupa menos, da menos problemas y tiene muchísima más funcionalidad. Funciona bien, el
grandísimo problema lo tengo al
recibir ciertos caracteres. Por ejemplo:
Cuando escribo este tweet en Twitter:
Probando la ñ la ¿ y la ¡ por ejemplo.
En la consola me aparece esto:
Probando la ñ la ¿ y la ¡ por ejemplo.
Y así con muchos otros.
Llevo varios días probando cientos de cosas para solucionarlo, aunque lo que he intentado que tenía más lógica es que una vez que se guarda todo el tweet en el string, reemplazar esos caracteres del string por los que quiero y después imprimirlo, pero no se me ocurre cómo implementarlo bien. Y llego a la conclusión de que es mejor dejar estos "arreglos chapuceros" e ir a la raíz del problema: la URL de la API de Twitter de la cual obtengo la información. He buscado y leído algo sobre esto (la codificación UTF-8, etc.) en estos sitios: (
https://dev.twitter.com/docs/counting-characters) y (
https://dev.twitter.com/discussions/8246), y encuentro algunas librerías (
https://github.com/twitter) como esta interesante (
https://github.com/twitter/twitter-text-js) que (creo) lo solucionaría, pero están para lenguajes que no conozco como Java o Ruby y ni idea de cómo traerlas a Arduino. ¡Y ya me desespero y me indigno de verdad, porque por usar esos caracteres (por ser español) tengo una gran dificultad para terminar este proyecto bien!

¿Alguien tiene alguna idea de cómo puedo solucionar esto? Se lo agradecería mucho.
EDIT:CÓDIGO:
/*
Creado originalmente por JO3RI.
Modificado por G3RMiCH.
***** MODIFICAR sólo los valores de las variables Ip, Dns, Gateway y Subnet *****
*/
#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>
byte Mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 };
byte Ip[] = { X, X, X, X }; //<---------MODIFICAR: Ver en cmd -> ipconfig /all y poner una distinta a la del PC (cambiar último número)
byte Dns[] = { X, X, X, X }; //<---------MODIFICAR: Ver en cmd -> ipconfig /all
byte Gateway[] = { X, X, X, X }; //<---------MODIFICAR: Ver en cmd -> ipconfig /all
byte Subnet[] = { X, X, X, X }; //<---------MODIFICAR: Ver en cmd -> ipconfig /all
EthernetClient client; //Crea un cliente que puede conectarse al servidor para enviar y recibir datos
TextFinder finder(client, 2); //Crea el objeto finder de la clase TextFinder
char URL[] = "api.twitter.com"; //URL del servidor al que se conecta
char usuarioTwitter[] = "tuitduino"; //<----------MODIFICAR: Nombre de usuario de Twitter
char usuario[16] = ""; //string para almacenar el Usuario
char tweet[255] = ""; //string para almacenar el Tweet
long retardo = 60000; //Retardo entre tweets (ms). No poner menos de 30 segundos.
void setup()
{
Serial.begin(9600); //Abre puerto serie y establece vel. transmisión datos a 9600 bps (bits/s = baudios)
Ethernet.begin(Mac, Ip, Dns, Gateway, Subnet); //Inicializa librería Ethernet y opciones de red
}
void loop()
{
Serial.println(F("Conectando al servidor..."));
if (client.connect(URL, 80))
{
Serial.println(F("Conectado."));
//Hace la solicitud GET HTTP a Twitter:
client.print("GET /1/statuses/user_timeline.json?screen_name=");
client.print(usuarioTwitter);
client.println("&count=1 HTTP/1.1");
client.println("HOST: api.twitter.com");
client.println();
while (client.connected())
{
if (client.available())
{
Serial.println(F("Obteniendo tweet..."));
if ( finder.getString("\"text\":\"", "\",\"source", tweet, 256) != 0 ) //Guarda en tweet el texto que encuentra entre "text":" y ","source
{
Serial.print("@");
Serial.print(usuarioTwitter); //Imprime el Usuario
Serial.print(": ");
Serial.println(tweet); //Imprime el Tweet
}
break;
}
}
delay(1);
client.stop(); //Corta la conexión con el servidor
Serial.print(F("Espera "));
Serial.print(retardo/1000);
Serial.println(F(" segundos...\n"));
delay(retardo);
}
}