Controlar la intensidad de un LED con un archivo de texto de una tarjeta SD

2

Quiero controlar la intensidad de un LED leyendo un archivo de texto. Aquí hay un ejemplo de un archivo de texto:

255,100,255,50,100,20,10,200,50,90,85,200,0,0,0,255

Mi equipo: Arduino Uno , microSD shield , power LED shield y tarjeta microSD.

Lo que quiero es: durante 60 segundos, la intensidad de la luz de mi LED es i y después de eso, la intensidad es i+1 , etc. En este ejemplo, esa sería una intensidad de 255, luego una de 100, luego 255, etc. Sé cómo leer un archivo de texto y abrir un archivo de texto con la biblioteca SD, pero no sé cómo analizar mi archivo de texto y obtener la buena intensidad en el momento t . Así que quiero algo como esto:

# Open and read the file from the SD card
# For t to the end of the file
      intensity = intensity at t
      analogWrite(led,intensity)
      delay(60000)
# For each time t, I want to have the intensity I on my screen
      Serial.println(intensity);

A continuación, quiero hacer eso para dos LED con dos matrices diferentes en el mismo archivo de texto.

¿Cómo puedo hacer esto?

    
pregunta user22115

2 respuestas

2

Se encuentra en los foros de Arduino, muestra cómo tomar un archivo CSV (valor separado por comas) como el suyo, leyéndolo en una matriz:

  File configFile = SD.open("CONFIG.TXT");
  if(configFile){
    for(int i=0;i<10;i++)
      config[i]=configFile.parseInt();
    configFile.close();
  }

También la página de referencia de la biblioteca Arduino SD La clase de archivos de la biblioteca SD se hereda de la Stream Class y la mayoría, si no todas, sus funciones se aplican a la clase de archivos SD. incluyendo ParseInt ():

  

parseInt () devuelve el primer número entero válido (largo) de la posición actual. Los caracteres iniciales que no son enteros (o el signo menos) se omiten. parseInt () se termina con el primer carácter que no es un dígito.

Para hacer una longitud de archivo arbitraria, desearía usar una combinación del tamaño de clase de archivo () y el formato disponible () y de dígitos fijos. En lugar de 255,4,30,255,0, , asegúrate de que cada número que agregues se rellene con cero a 3 dígitos para que obtengas 255,004,030,255,000, . Luego, simplemente puede tomar el archivo.size (), dividir por 4, y su bosquejo arduino sabrá cuántos números hay en el archivo.

Te dejo el resto sobre cómo resolverlo. No tienes que leerlo en una matriz, por ejemplo. Y si desea usarlo para dos leds diferentes, posiblemente podría interpolar sus datos, por lo que 255,240,000,010,100,255 sería para led1, led2, led1, led2, y así sucesivamente.

    
respondido por el Passerby
1

Para hacerlo más fácil, es posible que desee escribir datos sin procesar en el archivo de texto (un byte por valor). Esto tiene el inconveniente de que no es tan fácil de leer en un editor de texto y debe editarse con una herramienta de hexadecimal (hay un complemento agradable para Notepad ++). En tal caso, puede abrir el archivo y leer el archivo por bytes, donde cada byte es su nuevo valor.

Si realmente quieres hacerlo con texto legible, debes recurrir al uso de las herramientas C estándar, como strtok y sscanf. Espero que estén disponibles con Arduino, tal vez tengas que agregar stdio.h. En este caso, use strtok para dividir su cadena en tokens (dividir en cada coma), luego use sscanf para convertir la representación textual en una representación numérica.

    
respondido por el Tom L.

Lea otras preguntas en las etiquetas