es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Potenciómetro con Arduino enviado a Javascript.

Actualmente estoy haciendo un ejercicio para enviar los datos del potenciómetro a través de un Arduino a una página web. Preferiría hacer esto a través de la API Web Serial y no de un servidor de nodos o algo así.

Mi código de Arduino es el siguiente:

void setup() {
Serial.begin(9600);
}

void loop() {
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
delay(1);
}

Esto muestra los valores en el monitor serial sin problema.

El código de JavaScript es así (en un script, incrustado en HTML):

var b = document.getElementById(‘button’);
b.addEventListener(‘click’, async () => {
// Pedir al usuario que seleccione cualquier puerto serial.
const port = await navigator.serial.requestPort();
await port.open({ baudRate: 9600 });
console.log(‘working’);

while (port.readable) {
const reader = port.readable.getReader();

try {
  while (true) {
    const { value, done } = await reader.read();
    console.log({ value });

    if (done) {
      break;
    }
  }
} catch (error) {
  console.log('error');
} finally {
  reader.releaseLock();
}

}
});

Significa que tengo un botón que me permite conectar a USB donde está el Arduino, y está pasando un flujo de información, pero no es realmente utilizable.

{value: Uint8Array(4)}
value: Uint8Array(4) [13, 10, 55, 57, buffer: ArrayBuffer(4), byteLength: 4, byteOffset: 0, length: 4]

Como no es el valor de la posición del potenciómetro, supongo que se requiere algún tipo de mapeo, pero no veo cómo hacerlo. Además, esto actualmente solo funciona en Google Chrome debido a la API Web Serial.

¿Alguna idea de cómo recibir correctamente los datos del potenciómetro?

Gracias. Saludos.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en JavaScript, Arduino y Web Serial API, para recibir correctamente los datos del potenciómetro a través de Web Serial API, es necesario asignar los datos recibidos al valor real del potenciómetro.

    En el código de Arduino, las lecturas del potenciómetro se envían a través de Serial utilizando la función Serial.println(). Por defecto, el tipo de datos enviado es cadena. Por lo tanto, es necesario convertir los datos recibidos en JavaScript de un Uint8Array a una cadena y luego analizar el valor entero de la lectura del potenciómetro.

    Puede intentar modificar el código de JavaScript de esta manera:

    var b = document.getElementById('button');
    b.addEventListener('click', async () => {
      // Solicitar al usuario que seleccione cualquier puerto serial.
      const port = await navigator.serial.requestPort();
      await port.open({ baudRate: 9600 });
      console.log('working');
      while (port.readable) {
        const reader = port.readable.getReader();
        try {
          while (true) {
            const { value, done } = await reader.read();
            console.log(value);
            // Convertir los datos recibidos a cadena
            const strValue = new TextDecoder().decode(value);
            // Analizar el valor entero de la lectura del potenciómetro
            const potValue = parseInt(strValue.trim());
            console.log({ potValue });
            if (done) {
              break;
            }
          }
        } catch (error) {
          console.log('error');
        } finally {
          reader.releaseLock();
        }
      }
    });
    

    Esto debería registrar los valores reales del potenciómetro en la consola. Luego puede usar estos valores según sea necesario en su página web.

    Es importante tener en cuenta que la Web Serial API actualmente solo es compatible con el navegador Google Chrome, y deberá habilitar una opción para usarla. Para hacerlo, vaya a chrome://flags y busque la opción “Habilitar la API de serie web” y habilítela.

Comments are closed.