Problema Led RGB arduino y android

Buenas noches.

Tengo conectados una aplicación que he creado en Android (muy sencilla) y un arduino uno. He conseguido que se comuniquen entre los dos. A la hora de enviar un comando simple no tengo ningún problema, por ejemplo le envío una A para encender una bombilla o una a para que se apague. Hasta ahí todo bien, el problema esta a la hora de mandarle mas de un carácter. Por ejemplo quiero mandar un valor entre 0 y 255 para indicar la intensidad de rojo en un led RGB. He probado a mandar desde Android la cadena A;255;255;255, pero luego no se como partirla para que me guarde en una variable la A, en otra el primer 255, en otra el segundo y en otra el tercero.Estas variables tienen que ser de valor int.Aquí os dejo una de las pruebas que he hecho.

readString = 0;
if (Serial.available()>0){
char c = Serial.read();
if(c!=';'){
readString += c; //replaces readString.append(c);
if(cont==0){
input = readString;
}else{
if(cont==1){
color0=readString;
}else{
if(cont==2){
color1=readString;
}else{
color2=readString;
}
}
}
}else{
cont += cont;
readString = 0;
}
}

Espero su contestación, muchas gracias.

Buenas tardes, he conseguido avanzar algo con el codigo del arduino, pero sigue sin funcionarme al 100 %.

Esto lo he conseguido enviándole la siguiente cadena: "$" + color0 + "#", donde color0 seria un numero entre 0 y 255. Por ejemplo la cadena seria $150#.

El problema viene cuando le envío un cero por ejemplo, que no me lo coge como cero, ya que sino no se tendría que encender la luz. Me coge por defecto siempre un valor mínimo, al igual que tampoco llega hasta el valor máximo. Aquí os dejo el código para ver si veis algún error.

input = Serial.read();
if(input =='$'){
color0 = 0;
input1 = 0;
input1 = Serial.read();
while (input1 != '#'){
color0 = color0 + input1;
input1 = Serial.read();
}
color(color0,0,0);
}

y aquí la función que lo recoge.

void color(int azul, int rojo, int verde){

//Escritura de PWM del color Azul
analogWrite(5, azul);

//Escritura de PWM del color Rojo
analogWrite(4, rojo);

//Escritura de PWM del color Verde
analogWrite(3, verde);
}

Les agradecería su ayuda.

Un saludo y gracias

Hola . A ver si alguien me podía echar una manita , tengo que entregar el proyecto y estoy atascado .A lo mejor es una pregunta sencilla pero estoy empezando con esto y realmente lo mio es mas aplicaciones android ,por eso estoy totalmente perdido con el arduino . La aplicación desde la Tablet android se conecta perfectamente , 5 led individuales que tengo se encienden y apagan sin problema , el RGB se enciende pero aquí es donde esta el problema en la Tablet tengo unas barras de desplazamiento que son las que me tienen que aumentar y disminuir intensidad y colores del RGB y es lo que me falla. Si hace falta insertar mas código o algo no tendría problema en ponerlo .
Gracias y un saludo a todos.

Hola,

Para debug te recomiendo que envies por puerto serial los valores R, G y B que escribes, asi puedes darte cuenta si esta recibiendo correctamente los numeros.

Me parece que tu código esta bien, pero recuerdo que hace poco comparti un codigo RGB con una amiga y a ella le funcionaba distinto, era porque yo tenia un led catodo común (negativo comun a gnd enciende con 255), y ella tenia un led anodo común (positivo comun a vcc y enciende con 0), en ese caso te recomiendo que hagas una prueba encendiendo cada color por separado y poniendole un delay para estar seguro que esta bien conectado.

Saludos.

Muchas gracias por contestar Luis_AM3C.

Lo primero, ¿como puedo enviar los datos para ver lo que estoy recibiendo? Ya que no me puedo meter en el modo consola, porque le envío los datos via Wifi desde la aplicación que tengo creada en Android, y el jumper lo tengo en modo XBEE.

Y lo segundo, ¿que diferencia existe entre un led catodo comun o un led anodo comun? Es que no estoy muy puesto en este tema :slight_smile:

De momento consigo crear los colores, pero no terminan de funcionar. También me he dado cuenta esta tarde que según en que pin de la placa estuviese conectado cada una de las patas del RGB, no funcionaba. Lo he tenido que conectar en las entradas digitales, pero en la que tienen el simbolo ~, que estos son de PWD no?

Espero tu contestacion, y muchas gracias de nuevo

Un saludo

Estoy en una situacion parecida, ¿conseguiste resolverlo?

El problema es que android (java) envía los datos del tipo nativo byte (8 bits) con valores desde -128 a +127, siendo el primer bit el signo si no estoy equivocado.
Por lo tanto no puedes recibir un byte con valor superior a éste, por ejemplo 200, por que no entra dentro de su rango.

La única solución que se ocurre es enviar un short de 16 bits pero estoy probando esto y no consigo descifrarlo por que tambien tiene en su rango números negativos.

Creo que ya está, súmale +256 al byte que llega si es negativo

Gracias por tu aportación alperez, pero ya no he podido comprobar eso que me dices, ya que he tenido que entregar el proyecto.
De todas formas si me compro alguno para este verano ya lo probare.

Muchas gracias y un saludo

Yo aun no he tenido éxito, no sé como resolverlo

Ya tengo el proyecto en casa. Lo tengo para todo el verano, entonces iré probando cosas haber si consigo que funcione correctamente. Si consigues algún avance, ya me contaras.

Un saludo