Salve a tutti,
Ho appena costruito una pista per Slot Car e volevo ampliare il plastico con un piccolo Display I2C 16x2 su quale viene segnato il tempo dell'ultimo giro ed il tempo migliore effettuato. Poi salvare su microSD il giro record che verrà richiamato al prossimo avvio della pista.
Il mio problema stà nel fatto che riesco a salvare su microSD il file "bestlap.txt" con tutti i giri migliori, ma non riesco a richiamare l'ultimo valore della lista all'interno del ".txt" per visualizzarla su Display.
Ho già dato un'occhiata nel forum... per esempio questo " Lettura file su SD card e inserimento su stringa - Software - Arduino Forum ", ma non riesco ad incastrarlo nel mio sketch...
Grazie in anticipo,
Fede.
Ecco lo Sketch:
// Timer per Slot Car a corsia singola
// con salvataggio Record su SD
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <SD.h> Includere per registrazione file
File file; // Denominazione per registrazione file
//variables
const byte lightPin = 0;
const byte speakerPin = 9;
int lightSensor = 0;
unsigned long lapMillis = 0;
unsigned long startMillis = millis();
unsigned long bestMillis = 9999999;
float lapTime = 0.00;
float bestLap = 0.00;
boolean firstTrigger = true;
boolean newBest = false;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
// Lettura Tempo Record
!SD.begin(53);
file = SD.open("bestlap.txt", FILE_READ);
lcd.begin();
lcd.setCursor(0, 0);
lcd.print("Migliore: ");
lcd.setCursor(0, 1);
lcd.print(bestLap.);
file.close();
delay(5000);
// lcd.begin();
lcd.setCursor(0, 0);
lcd.print("Pronti! ");
lcd.setCursor(0, 1);
lcd.print(" ");
Serial.begin(9600);
pinMode(speakerPin, OUTPUT);
digitalWrite(speakerPin, LOW);
}
void loop()
{
//Lettura fotoresisteza
lightSensor = analogRead(lightPin);
//Se l'auto è stata rivelata
if(lightSensor < analogRead(1)){
//Determinazione del giro in millisecondi
lapMillis = millis() - startMillis;
startMillis = millis();
lapTime = lapMillis / 1000.00;
//Stampa su display al passaggio su fotocellula
if (firstTrigger == true){
lcd.setCursor(0, 0);
lcd.print("Partenza! ");
}
//stampa su display se non ancora passato su fotocellula
if (firstTrigger != true){
Serial.print("lapTime: ");
Serial.println(lapTime);
Serial.print("lapMillis: ");
Serial.println(lapMillis);
//Stampa il tempo sul giro
lcd.setCursor(0, 0);
lcd.print("Last: ");
lcd.print(lapTime);
lcd.print(" ");
}
//Se l'ultimo giro è migliore dell'ultimo giro
if(lapMillis < bestMillis && firstTrigger != true)
{
bestMillis = lapMillis;
bestLap = lapTime;
Serial.print("bestLap: ");
Serial.println(bestLap);
//print best lap time
lcd.setCursor(0, 1);
lcd.print("Best: ");
lcd.print(bestLap);
lcd.print(" ");
newBest = true;
}
//Suono Piezo e Lampeggio Led
if(newBest == true)
{
digitalWrite(speakerPin, HIGH);
delay(25);
digitalWrite(speakerPin, LOW);
delay(25);
digitalWrite(speakerPin, HIGH);
delay(25);
digitalWrite(speakerPin, LOW);
delay(25);
digitalWrite(speakerPin, HIGH);
delay(25);
digitalWrite(speakerPin, LOW);
delay(25);
digitalWrite(speakerPin, HIGH);
delay(25);
digitalWrite(speakerPin, LOW);
newBest = false;
// Salvataggio Tempo Record
!SD.begin(53);
file = SD.open("bestlap.txt", FILE_WRITE);
file.println(bestLap);
file.close();
}
else
{
digitalWrite(speakerPin, HIGH);
delay(150);
digitalWrite(speakerPin, LOW);
}
firstTrigger = false;
Serial.println("----------------");
}
}