Paso 5: Uso de la tarjeta SD en gps2.ino
Configuración de la tarjeta sd:
El defecto chip select patillas y el chipSelect real necesitan para la salida.
Se accede a la tarjeta SD con una instrucción de inicio que incluye los pines utilizados por la carta de la mesa de gps.
La velocidad de la tarjeta se encuentra en SPI_Full_SPEED.
En caso de error parpadea led hacia fuera una señal-detalles del error en el encabezado del bosquejo.
Si debug se establece en true en la configuración, monitor Serial también se envían los mensajes.
Si la tarjeta ok inicializa la variable hascard se establece en true.
.
Asegúrese que el pasador seleccione predeterminado chip es
de salida, incluso si no lo usas:
pinMode(SS,OUTPUT); Seleccione pin de defecto mega
pinMode(chipSelect,OUTPUT);
digitalWrite(chipSelect,LOW);
a ver si la tarjeta está presente y puede ser inicializada:
if (!. SD.begin(chipSelect, 11, 12, 13)) {}
if(debug) Serial.println (F ("tarjeta init. no se pudo!"));
error(1);
} else {}
Si (! card.init (SPI_FULL_SPEED, chipSelect, 11, 12, 13)) {}
error(2);
{if(debug)}
Serial.println (F ("error de inicialización. Cosas para ver: "));
Serial.println (F ("* es una tarjeta?"));
Serial.println (F ("* es el cableado correcto?"));
Serial.println (F ("* cambió el pin chipSelect para que coincida con su escudo o módulo?"));
}
} else {}
hascard = true;
if(debug) Serial.println (F ("tarjeta init. tenido éxito"));
}
}
Seleccionar el archivo de la SD para el registro de:
Cuando se llama el openfile de subrutina se presiona el botón de la derecha .
Esto examina la carpeta gps en busca de un nombre de archivo no utilizados en la secuencia GPSLOGnn.TXT, donde nn = 0 a 99.
Si se encuentra un archivo, establezca foundit en true.
Si (! hascard) {vuelta;} / / no continúe si una tarjeta no existe o no existe
byte me;
char nombre [18];
strcpy (filename, "/ gps/GPSLOG00. TXT");
nombre de archivo [17] = char(0);
Boolean foundit = false;
para (i = 0; i < 100; i ++) {}
nombre de archivo [11] = '0' + i / 10;
nombre de archivo [12] = '0' + % 10;
if (!. {SD.exists(filename))}
foundit = true; rotura;
}
}
Si todos los nombres de archivo están en uso, foundit será false y el usuario se pregunta si debe borrarse la primera 50. Si esto no es aceptable, hascard se establece en false para que no puedan los intentos en el registro.
Si (! foundit) {}
thisbutton int = -1;
LCD.Clear();
LCD.Print ("Dir completa-borrar?");
lcd.setCursor(0,1);
LCD.Print ("Sel:Ok derecho: No");
{}
thisbutton = read_LCD_buttons();
} while(thisbutton == btnNONE);
LCD.Clear();
Si (thisbutton == btnSELECT) {}
LCD.Print("Deleting");
para (i = 0; i < 50; i ++) {}
nombre de archivo [11] = '0' + i / 10;
nombre de archivo [12] = '0' + % 10;
Si (SD.exists(filename)) SD.remove(filename);
}
i = 0;
nombre de archivo [11] = '0' + i / 10;
nombre de archivo [12] = '0' + % 10;
} else {}
error(4);
hascard = false;
retorno;
}
}
Puede abrir el archivo:
En el caso de un error en la salida de información Serial y el error código señalado por el estado de led.
Si tiene éxito, la primera línea del archivo es de salida. Se trata de los encabezados de columna.
Observe el uso de logfile.flush(). Esto asegura que toda la salida se envía en el archivo de la SD antes de continuar.
logfile = SD.open (filename, FILE_WRITE);
Si (! logfile) {}
{if(debug)}
Serial.Print ("no se pudo crear");
Serial.println(FileName);
}
error(3);
hascard = false;
} else {}
registro = true;
MyFile = nombre de archivo;
logfile.println (pad ("tiempo", 13) + Depa ("fecha", 9) + lpad("Longitude",10)
+ lpad("Latitude",10) + lpad("Altitude",9) + "m" + lpad("Geoid",9) + "m" + lpad("Speed",7) + "millas por hora llevando");
logfile.Flush();
if(debug) {Serial.print ("escritura a"); Serial.println(FileName);}
}
.
el Depa y el cojín son texto acolchado funciones:
.
Lpad (cadena temp, de byte L) {} de la secuencia
mylen bytes = temp.length();
Si (mylen > (L - 1)) vuelta temp.substring(0,L-1);
para (byte i = 0; i < (L-mylen); i ++) temp = "" + temp;
devolver a temp;
}
.
String pad (byte temp, cadena L) {}
mylen bytes = temp.length();
Si (mylen > (L - 1)) volver
Temp.substring(0,L-1);
para (byte i = 0; i < (L-mylen); i ++) temp = temp + "";
devolver a temp;
}
.
Escribir en el archivo:
El bucle principal lee el gps y salidas de los valores a un archivo si el registro se lleva a cabo. (Una "L" se muestra en la parte inferior derecha de la pantalla LCD).
.
Formatean de los valores para producir columnas de ancho fijo.
.
Dtostrf(float,w,dp,buf) función es una función de biblioteca de Arduino que toma una variable float y la convierte en una cadena, de ancho w con dp decimales. buf es un buffer de caracteres que debe ser lo suficientemente grande como para manejar la conversión.
Definí buf con "char buf [20];" en el sketch de cabecera.
El archivo se vacía antes de continuar.
.
ogfile.Print(PAD(myTime,13)); incluye milisegundos
logfile.Print(PAD(myyear,9));
logfile.Print(dtostrf(longitude,10,5,BUF));
logfile.Print(dtostrf(Latitude,10,5,BUF));
logfile.Print(dtostrf(altitudem,9,1,BUF)); logfile.print ("m");
logfile.Print(dtostrf(Geoid,9,1,BUF)); logfile.Print ("m");
logfile.Print(dtostrf(speedmph,7,2,BUF)); logfile.Print ("mph");
logfile.Print(dtostrf(Heading,6,1,BUF)); logfile.println ("deg");
logfile.Flush();
.
Cierre el archivo:
Si la tarjeta no está disponible volver, de lo contrario lave todos los resultados restantes a la tarjeta antes de cerrar el archivo.
void closefile() {}
Si (! hascard) volver;
logfile.Flush();
logfile.Close();
registro = false;
if(debug) Serial.println ("El archivo" MiArchivo + "cerrada");
}