Problema con la salida digital de mi Arduino Nano.

Buenas, hice un pequeño programa para Arduino que simplemente lo que hace es recibir un numero vía puerto serie desde Labview i dependiendo del número que llegue, pondrá en ON o OFF la salida digital 3, mi problema es que esa salida digital, debería estar a 5V cuando le hago el digitalWrite HIGH, lo he medido con el tester y me aparece que salen 1'32V, no entiendo porque la salida me da eso, agradecería que alguien me ayudara si lo sabe, gracias. Adjunto el .ino

String(Status);

void setup() {
  pinMode(3, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()>0) {
    Status = Serial.read();
  }
    if (Status == "49") {
      digitalWrite(3, HIGH);
    }
    if (Status == "50") {
      digitalWrite(3, LOW);
    }
    else {
      digitalWrite(3,LOW);
      return;
    }  
}

provaEV.ino (341 Bytes)

Hola. He cargado el programa en mi UNO para comprobar el voltaje que me ofrece ese pin y estaba en las mismas, por lo que inmediatamente he pensado que pueda haber algo raro en la salida...

Efectivamente, hay un bucle de activación y desactivación de la salida 3. No te puedo decir de dónde viene porque mis conocimientos en comunicaciones serie son limitados, pero algo está activando y desactivando la salida. Ahora mismo, es lo más que puedo decirte. :wink:

Ya sé lo que pasa o creo saber lo que pasa. Pego el código para que la gente pueda verlo rápidamente.

String(Status);

void setup() {
  pinMode(3, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()>0) {
    Status = Serial.read();
  }
    if (Status == "49") {
      digitalWrite(3, HIGH);
    }
    if (Status == "50") {
      digitalWrite(3, LOW);
    }
    else {
      digitalWrite(3,LOW);
      return;
    }  
}

He modificado el código y he quitado las tres últimas líneas: el ELSE, el digitalWrite y el RETURN. Ahora el código funciona y la salida 3 se activa con un 1 y se apaga con un 2, comprobado y pasado por el osciloscopio. :wink:

Los códigos de mneos de 9k deben verse en el post.
Lee las normas del foro

Esto esta mal

String(Status);

Debe ser asi

String Status;

Luego viendo todo el código veo otros errores sumados al anterior.

int Status;

void setup() {
  pinMode(3, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()>0) {
    Status = Serial.read();
  }
    if (Status == 49) {
      digitalWrite(3, HIGH);
    }
    if (Status == 50) {
      digitalWrite(3, LOW);
    }
    else {
      digitalWrite(3,LOW);
      return;
    }  
}

Este código tiene que ver con que envias SUPONGO un 1 y un 2 como entero y luego algo que no sea 1 y 2.
Si es asi, el código que te puse estaría bien.
Si realmente envias 49 como cadena de caracteres deberias usar otra cosa diferente a un Serial.read() porque Serial.read() solo lee de un caracter x vez.

Un Serial.readString() podría ser mas adecuado con tu código, eso espera a que presiones dos digitos 49 y un ENTER que se traduce en un LINE FEED.