Sensor magnetico Ayuda

El problema es que el sensor magnetico siempre esta activado o desactivado osea que al juntarlos me imprime un valor en el puerto serial y al separarlo otro valor, entonces está todo el rato imprimiendo valores en el puerto serial, lo que quiero es que si están juntas sus partes me imprima un solo valor y si están separadas otro pero solo uno, estoy haciendo un programa de escritorio con vb.net que me guarde los estados de los sensores magneticos y de fuerza, el problema es que con tantos valores que me envía el sensor magnetico, el serial.readline de vb no me toma el valor de sensor de fuerza cuando lo imprime. Estaba intentando con Serial.read de arduino pero no me funciona les muestro mi codigo ojalá me puedan ayudar.

int led_pin1=13; int sensor_mag=0; int sensor_fuerza=1;

//variables int valor_fuerza=0; int valor_sensor=0; int valor_serial=0;

void setup() { pinMode(led_pin1, OUTPUT); digitalWrite(led_pin1, HIGH); //pinMode(sensor_mag, INPUT); Serial.begin(9600); }

void loop() { //toma los valores analogicos de los sensores valor_sensor=analogRead(sensor_mag); valor_fuerza=analogRead(sensor_fuerza);

//lee los valores del puero serial valor_serial=Serial.read();

//si el valor del sensor magnetico es superior a 100 que imprima 10 si no 11 if(valor_sensor>100){

//si el valor que se tomo del puerto serial es 10 que no haga nada y si no que imprima 10 if (valor_serial=10){} else{ Serial.println(10); } } //si no es superior a 100 else{ //si el valor del puerto serial es 11 que no haga nada si no que imprima 11 if (valor_serial=11){} else{ Serial.println(11); } }

//condicion para el sensor de fuerza if(valor_fuerza>100){ Serial.println("f1");

} delay(500); }

POR FAVOR NECESITO AYUDA ESTOY DESARROLLANDO MI PROYECTO DE TITULO!!!!!

Hola ,no me ha quedado muy claro que es lo que quieres hacer exactamente,pero lo habitual para usar Serial.read() es precederlo de un condicional tipo if(Serial.available() > 0 ) { Si es cierto ya puedes usar Serial.read} o bien while (Serial.available() > 0 ) { Si es cierto ya puedes usar Serial.read} de esta manera te aseguras que realmente hay datos en el buffer de entrada para leer(Serial.available() devuelve el numero de bytes disponibles para leer en el buffer).Con Serial.read() lo que haces es leer un solo byte del buffer,y si no me equivoco, recoges en la variable su codigo Ascii y no el caracter en si a no ser que la variable que recoge el valor la declares como tipo char y no int.

No sé si yo me he aclarado del todo tampoco, pero veamos. Si el sensor magnético está constantemente enviando por puerto serial, no queda otra que ir leyéndolo para que el buffer no se sature. Lo que no quiere decir que haya que imprimirlo cada vez que se recibe, sino [u]cada vez que cambia el estado.[/u]. Lo que deberías hacer es utilizar una variable global para guardar el último estado recibido e imprimirla sólo si el nuevo estado es diferente al último estado, en cuyo caso último estado pasará a valer nuevo estado:

int estado_antiguo=0; // 10=abierto, 11= cerrado, 0 = no definido. 
int estado_nuevo;
int valor_sensor;
loop(void){
    valor_sensor=analogRead(sensor_mag);
    if (valor_sensor>100)
        estado_nuevo=10;
    }
    else {
        estado_nuevo=11;
    }
    if (estado_nuevo != estado_antiguo){
        Serial.println(estado_nuevo);
        estado_antiguo=estado_nuevo;
    }
}

Supongo que algo así es a lo que te refieres. Otra cosa. Recuerda que no es lo mismo =(asignación) que ==(comparación). Lo digo porque en tus if has utilizado lo primero :roll_eyes: