Hola un saludo para todos! soy de Argentina, les cuento que estoy armando un proyecto con un arduino mega 2560 R3.
Tengo un problema que me esta trabando y no puedo avanzar. Si alguien me puede ayudar desde ya muchas gracias.
Necesito leer números de una memoria SD y usarlos en el codigo como tiempos de retardo, ejemplo : si escribo un "5" en la SD cuando lo leo lo tengo que tomar como "5" y retardar la ejecución de una sentencia "5" seg. tal cual lo escribi en la memoria. El problema es que cuando los leo, los toma como ascii y me toma un "53" que es el "5" en decimal segun la tabla ascii. Por lo tanto me retarda 53 seg.
Los datos los leo y los imprimo de la siguiente manera:
Esta es una parte del código:
// Numero escrito en datalog.txt = 5
File dataFile = SD.open("datalog.txt");
if (dataFile){
Serial.println("Dato Leido: ");
while (dataFile.available()) {
a = dataFile.read ();
Serial.print("Valor de a = ");
Serial.println(a); }
dataFile.close();
// Valor de a = 53 ( esto me devuelve con la lectura)
Como puedo hacer para tomar el numero tal cual lo escribí en la SD? y que no me lo tome como un caracter ascii.
Si alguien me puede ayudar Muchas gracias.
Hola,
tú (te trataría de vos, pero se me hace muy difícil) en la SD estás escribiendo caracteres alfanuméricos, y si el retardo es mayor que 9 tendrás problemas. Puedes usar letras empezando por la A mayúscula, código ascii 65
Antes de escribir en la SD calculas
char caracter;
int retardo;
// 'A' = retardo 0
// 'B' = retardo 1
// para retardo 3
retardo = 3;
caracter = 'A' + retardo;
y lo escribes en la SD
Y después, cuando leas 'caracter' de la SD vuelves a recalcular
retardo = caracter - 'A';
Hola curro92, Gracias por tu respuesta!, disculpa pero no entiendo bien como lo estas armando. Si entiendo lo que decís de que si uso caracteres alfanuméricos tendré problemas cuando los retardos sean mayores a 9 por eso conviene reemplazarlos por letras. Pero el tema es que los números si van a ser mayores que 9.
Te comento de manera mas clara lo que estoy armando.
La idea es la siguiente: Voy a tomar una canción y sacar los tiempos justos que me interesen del tema. escribirlos manualmente en una planilla excel.
El minuto, segundo y milisegundo justo donde se genera un "golpe" por ejemplo. La columna de salida y de dirección son otros parámetros que tmb voy a escribir de a cuerdo a la consola que voy a usar en ese momento del tema y el numero de salida que va activar esa consola en ese momento. No se si me explico bien, Básicamente voy a tener "X" consolas direccionadas cada una con 32 salidas. Cada determinado tiempo voy a activar una salida de cada consola que va ser la que me figure en la planilla.
Planilla excel confeccionada de la siguiente manera:
Minutos Segundos Milisegundos Salida Dirección Consola
0 10 5 1 1 // ( en el minuto 0, segundo 10, milisegundo 5, se va activar la salida 1 de la consola dirección 1 )
1 35 3 32 5 // ( en el minuto 1, segundo 35, milisegundo 3, se va activar la salida 32 de la consola dirección 5 )
2 16 4 20 2 // ( en el minuto 2, segundo 16, milisegundo 4, se va activar la salida 20 de la consola dirección 2 )
Después guardo esta planilla en modo texto en una memoria SD como "datalog.txt" quedando de la siguiente manera:
0 10 5 1 1
1 35 3 32 5
2 16 4 20 2
Luego tomo esos tiempos y los comparo con el reloj real. Todo a partir de que le doy "play" al reproductor de música y al contador del arduino.
mientras va corriendo el tiempo hago los retardos correspondientes, y en el momento que corresponda activo las salidas de las consolas que correspondan.
El problema es que cuando tomo los valores me los toma de la siguiente manera:
Valores escritos en la SD: 0 10 5 1 1
Valores leídos por el arduino: 48 32 49 48 32 53 32 49 32 49 ( los 32 son los espacios)
No puedo tomar los valores tal cual los escribo en la SD. Ese es el problema.
Eso es básicamente lo que estoy armando. Espero me hayas entendido y me puedas ayudar.