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;
}
}
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.
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.
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.