Modelo Para Cronometro Arduino
Artigo: Modelo Para Cronometro Arduino. Pesquise 862.000+ trabalhos acadêmicosPor: AlexBle • 4/3/2014 • 428 Palavras (2 Páginas) • 1.078 Visualizações
#define botaoCronometro 0
#define botaoLap 1
#define rxPin 2
#define txPin 3
#define chaveCorridaReconhecimento 4
#define ledErro 6
#define ledCronometro 7
#define coordArqName "coord.txt"
#define lapArqName "lap.txt"
#include <SD.h>
#include <TinyGPS.h>
#include <SoftwareSerial.h>
Sd2Card card;
TinyGPS gps;
SoftwareSerial nss = SoftwareSerial(rxPin, txPin);
int fracional = 0;
int value = LOW;
int ultimoEstadoBotaoCronometro = HIGH;
int ultimoEstadoBotaoLap = HIGH;
int r = 5;
long startTime = 0;
float latitude;
float longitude;
bool iniciaCronometro = false;
bool newData = false;
String tempo = "";
String getTempo();
void corrida();
void lap();
void cronometro();
void imprimeCoord(File arquivo);
void imprimeLapArq();
void imprimeCoordArq();
void imprimeLap(File arquivo, float x, float y);
void procuraDadosArquivo(float x, float y, String tempo);
bool verificaPontoCircunferencia(float x, float y, float x0, float y0);
void imprimeDiferenca(double diferenca);
void erroCartao();
void erroGPS();
void setup() {
nss.begin(4800);
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
//inicia Leds
pinMode(ledCronometro, OUTPUT);
pinMode(ledErro, OUTPUT);
//inicia Botoes
pinMode(botaoCronometro, INPUT);
pinMode(botaoLap, INPUT);
pinMode(chaveCorridaReconhecimento, INPUT);
attachInterrupt(botaoCronometro, cronometro, CHANGE);
attachInterrupt(botaoLap, lap, CHANGE);
digitalWrite(botaoCronometro, HIGH);
digitalWrite(botaoLap, HIGH);
digitalWrite(chaveCorridaReconhecimento, HIGH);
digitalWrite(ledErro, LOW);
if (!SD.begin()) {
erroCartao();
}
}
void loop() {
if (card.init()) {
bool newData = false;
for (unsigned long start = millis(); millis() - start < 1000;) {
while (nss.available()) {
newData = gps.encode(nss.read());
}
}
if (newData) {
gps.f_get_position(&latitude, &longitude, NULL);
tempo = getTempo();
imprimeCoordArq();
if (!digitalRead(chaveCorridaReconhecimento)) {
corrida();
}
} else {
newData = false;
erroGPS();
}
} else {
erroCartao();
}
}
void cronometro() {
int acaoBotaoCronometro = digitalRead(botaoCronometro);
if (acaoBotaoCronometro == LOW && ultimoEstadoBotaoCronometro == HIGH && !iniciaCronometro && newData) {
iniciaCronometro = true;
startTime = millis();
digitalWrite(ledCronometro, HIGH);
delay(5);
} else if (acaoBotaoCronometro == LOW && ultimoEstadoBotaoCronometro == HIGH && iniciaCronometro && newData) {
iniciaCronometro = false;
digitalWrite(ledCronometro, LOW);
delay(5);
}
ultimoEstadoBotaoCronometro = acaoBotaoCronometro;
}
void lap() {
if (iniciaCronometro && digitalRead(chaveCorridaReconhecimento) && newData) {
int acaoBotaoLap = digitalRead(botaoLap);
if (acaoBotaoLap == LOW && ultimoEstadoBotaoLap == HIGH) {
imprimeLapArq();
delay(5);
}
ultimoEstadoBotaoLap
...