Como enviar datos de tipo caracter a arduino desde Js y recibirlas en arduino

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

Espero me puedan ayudar les agradecería mucho

Su publicacion se MUEVE a su ubicacion actual ya que es mas adecuada.

¿Has intentado "googlear" algo como "javascript arduino"?

Tengo el siguiente código, pero al ejecutarlo no envía ningún dato

const SerialPort = require('serialport').SerialPort;
const Readline = require('@serialport/parser-readline').ReadlineParser;;

const port = new SerialPort({path: 'COM3', baudRate: 9600 });
const parser = port.pipe(new Readline({ delimiter: '\n' }));
port.on('open', () => {
  console.log('Conexión establecida');
});
parser.on('data', data => {
    console.log('Dato recibido:', data);
  });

  const enviarCaracter = (sensorValue) => {
    port.write(sensorValue);
    
  };
  enviarCaracter('1');


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

Edita tus dos posteos donde no usas etiquetas

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/>)


Hola, ya edité el posteos, gracias por la observación

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

Ok. Ahora lo pruebo bien y luego edito y amplio mi respuesta.

Claro, quedo atento a tu respuesta

@Surbyte amigo aun no logro solucionar este tema, no sé si tú ya lograste hacer que funcione

Saludos

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

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.