Hola buena tarde
Soy nuevo en el tema de desarrollo, lo que deseo es implementar arduino para encender un led.
En Arduino tengo el siguiente código, si escribo 1 o 0 en la terminal del arduino me ejecuta correctamente lo que debe de hacer.
// CONECTAR LED VERDE EN PUERTO 13 Y A TIERRA
// CONECTAR LED ROJO EN PUERTO 12 Y A TIERRA
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600); // inicializa PUERTO SERIAL A 9600
pinMode(13, OUTPUT); // inicializa puerto 13 como salida
pinMode(12, OUTPUT); // inicializa puerto 12 como salida
}
// the loop routine runs over and over again forever:
void loop() {
char sensorValue = Serial.read(); //LECTURA SERIAL DE CARACTER
Serial.println(sensorValue);
delay(1000); // delay in between reads for stability
switch (sensorValue) {
case '1': //LECTURA DE VALOR EN FORMA DE CARACTER
Serial.println("aprovado"); //IMPRESION SERIAL APROVADO
digitalWrite(13, HIGH); //ENCIENDE LED VERDE DURANTE 3 SEGUNDOS
delay(2000);
digitalWrite(13, LOW); //APAGA LED VERDE
break; //SALE DEL CICLO
case '0': //CASO DE CARACTER 0
Serial.println("denegado"); //IMPRESION SERIAL DENEGADO
digitalWrite(12, HIGH); //ENCIENDE LED ROJO POR 3 SEGUNDOS
delay(2000);
digitalWrite(12, LOW); //APAGA LED ROJO
break; // SALE DEL CICLO
default: //EN CASO DE NO RECIBIR NADA
Serial.println("sin mensaje recibido");
delay(300);
break;
}
}
Ahora quiero saber cómo poder enviarle esos datos (0 y 1) desde JavaScript para que se encienda el led
Esto es lo que me arroja en consola y el led no enciende
Conexión establecida
Dato recibido: �
Dato recibido: sin mensaje recibido
Dato recibido: �
Dato recibido: sin mensaje recibido
Dato recibido: �
Dato recibido: sin mensaje recibido
Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en (<CODE/>)
El código de Arduino esta mal.
Prueba de este modo.
void loop() {
if (Serial.available() > 0) {
char sensorValue = Serial.read(); // LECTURA SERIAL DE CARACTER
Serial.println(sensorValue);
switch (sensorValue) {
case '1': // LECTURA DE VALOR EN FORMA DE CARACTER
Serial.println("aproBado"); // IMPRESION SERIAL APROVADO
digitalWrite(13, HIGH); // ENCIENDE LED VERDE DURANTE 3 SEGUNDOS
delay(2000);
digitalWrite(13, LOW); // APAGA LED VERDE
break; // SALE DEL CICLO
case '0': // CASO DE CARACTER 0
Serial.println("denegado"); // IMPRESION SERIAL DENEGADO
digitalWrite(12, HIGH); // ENCIENDE LED ROJO POR 3 SEGUNDOS
delay(2000);
digitalWrite(12, LOW); // APAGA LED ROJO
break; // SALE DEL CICLO
default: // EN CASO DE NO RECIBIR NADA
Serial.println("sin mensaje recibido");
delay(300);
break;
}
}
}
¿El codigo del void setup lo seguí dejando tal cual y probe el codigo que me compartiste y aún sigue sin encender el led al ejecutar el js
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600); // inicializa PUERTO SERIAL A 9600
pinMode(13, OUTPUT); // inicializa puerto 13 como salida
pinMode(12, OUTPUT); // inicializa puerto 12 como salida
}
Notas alguna falla en el codigo de Js?, al ejecutarlo no me enciende el led y me dice que se ha enviado el dato
Hola, estaba muy compliado de tiempo y por eso me demoré en probar tu problema.
Node.js se ha actualizado y eso que usas es viejo en varios aspectos.
Un código que funcionará es este
const {SerialPort} = require('serialport')
const {DelimiterParser} = require('@serialport/parser-delimiter')
const puerto = new SerialPort(
{
path: 'COM3',
baudRate: 9600
});
const parser = puerto.pipe(new DelimiterParser({ delimiter: '\n' }));
// Read the port data
parser.on("open", () => {
console.log('Serial port abierto');
});
parser.on('data', data =>{
var enc = new TextDecoder();
var arr = new Uint8Array(data);
ready = enc.decode(arr);
console.log('Recibido de arduino:', ready);
});
Como veras cambian los construtores y tambien el manejo de la librería serialport.
Esto es necesario o solo verias valores en hexadecimal
parser.on('data', data =>{
var enc = new TextDecoder();
var arr = new Uint8Array(data);
ready = enc.decode(arr);
console.log('Recibido de arduino:', ready);
});