Por lo pronto se me ocurre que el valor que esté devolviendo la variable que monitorizas no te esté dando valores exactos (ej., 0, 1, 2, ...), sino decimales (ej., 0.5, 1.1,...) En ese caso, al no corresponderse de forma exacta no te hace lo que tu quieres... Pero supongo que eso ya lo has considerado, no?
en mi caso trabajaba con numeros decimales, así que lo hice de esta menera:
void WindSpeed(){
speedwind = ((2 * pi * radio * RPM)/60) / 1000; // Calculate wind speed on m/s
if (speedwind <= 0.3){ // Calculate Wind force depending of wind velocity
windforce = 0; // Calm
}
else if (speedwind <= 1.5){
windforce = 1; // Light air
}
else if (speedwind <= 3.4){
windforce = 2; // Light breeze
}
else if (speedwind <= 5.4){
windforce = 3; // Gentle breeze
}
else if (speedwind <= 7.9){
windforce = 4; // Moderate breeze
}
else if (speedwind <= 10.7){
windforce = 5; // Fresh breeze
}
else if (speedwind <= 13.8){
windforce = 6; // Strong breeze
}
else if (speedwind <= 17.1){
windforce = 7; // High wind, Moderate gale, Near gale
}
else if (speedwind <= 20.7){
windforce = 8; // Gale, Fresh gale
}
else if (speedwind <= 24.4){
windforce = 9; // Strong gale
}
else if (speedwind <= 28.4){
windforce = 10; // Storm, Whole gale
}
else if (speedwind <= 32.6){
windforce = 11; // Violent storm
}
else {
windforce = 12; // Hurricane (from this point, apply the Fujita Scale)
}
}
y funciona sin problemas.
No se si te sirve la idea... otra cosa no se me ocurre a si a voz de pronto...
[edit]Otra idea:
pon un serial.print(numEntrada) justo antes del primer if. De esa forma verás que valor te devuelve, y así poder saber si el error viene de antes, o si de verdad de trata de un problema en la cadena if-else.[/edit]
Pues con el case me hace lo mismo
El programa en sí consiste en:
Envio por una interfaz en java un numero a la placa arduino ,y segun el resultado del numero pues me debe hacer una u otra cosa
Pongo el codigo de java que envia el numero
numero lo envio desde java siendo un string , y en la placa arduino lo leo asi:
if (Serial.available()) {
int i = 0;
char buffer [33] ="";
while((buffer*=(char)Serial.read())!= '/' )*
{*
delay(2000);*
i++;*
}* lcd.clear() lcd.printIn(buffer); delay(2000); Donde '/' es el caracter de control, pero de esta forma en buffer no me sale nada :S "com7.sendSingleData(numero); segun la api envia tanto string,como char,como int,yo le mando el string y luego con el arduino intento que me lea caracter por caracter,aunque no se si lo esoy haciendo bien Y la velocidad tengo puesto 9600 en ambos programas
Bueno he hecho nuevas pruebas,le e estado enviando numeros y mostrandolos por pantalla haber si los enviaba bien,pero hay algun roblema y no se el porque,si le envio 0 si me muestra 0,si le envio 1 muestra el 6,si envio el 2 muestra el 24... vamos que o no me envia el numero bien o el arduino me lo lee erroneamente :S
He probado de varis maneras, enviando como string e intentar leyendo en arduino caracter a caracter ,con este metodo no consigo nada,salvo que la placa se me quede colgada, enviando enteros, que pasa lo que puse antes,si envio 0 me lee 0,si envio 1 me manda un 6 etc
Como me dices por bytes como seria? como se envia 1 por byte y como se lee ese 1 ?
¿No puedes definir una variable como "byte" o "unsigned char"?, de esta forma nos aseguramos que se envía un único byte. Si mandas un entero, no mandas un único byte. Me da a mi que el problema está en esto.
Pero si envio un byte desde java como leo desde arduino ese byte ,declaro un byte n; ? y como paso ese byte a cadena para poder mostrarlo por pantalla?
La función Serial.read() de arduino lee un único byte cada vez (un número comprendido entre el 0 y el 255). Tu puedes meter ese valor en un int o donde quieras, pero es un solo byte.
Si desde Java (o cualquier otro lenguaje) envias más de un byte, te encuentras con una situación no controlada.
Imagina que desde Java mandas un int, y que es un int de 16 bits, cuando lo mandes por el puerto serie, la función correspondiente mandará 2 bytes, sea cual sea el valor de dicha variable.
Lo que tienes que conseguir es asegurarte que desde JAVA mandas un único byte cada vez.
Lo lees con Serial.read() y lo guardas donde quieras (int, unsigned char...)
Si mandas un "1" en binario y quieres visualizarlo, lo primero que tienes que hacer es ponerlo en ASCII (le sumas 48 en decimal para los dígitos del 0 al 9).
Si mandas el número (un dígito) como un byte en ASCII, (48 para el 0, 49 para el 1...) Solo lo tienes que leer con SerialRead y meterlo en el Arrray.
Un string no es más que un array de char que termina con un delimitador (null)