Проблема с GPS-регистратором
У меня возникли проблемы с GPS-регистратором. Вы используете Arduino Uno, NEO-6M, SD-карту. Проблема в цикле функции void. Я вхожу внутрь, но застреваю в «цикле while», даже не попадаю внутрь этого цикла. Вот код, который я использую:
#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <SPI.h>
#include <SD.h>
#define SD_CS 4
#define FILE_BASE_NAME "Trac"
TinyGPS gps;
SoftwareSerial serial(10, 11);
File myFile;
const uint8_t BASE_NAME_SIZE = sizeof(FILE_BASE_NAME) - 1;
char fileName[] = FILE_BASE_NAME "00.csv";
void setup(){
Serial.begin(9600);
serial.begin(9600);
Serial.println("SD card initialization...");
if(!SD.begin(SD_CS))
{
Serial.println("Failed! Check card");
//while(1);
}
Serial.println("Initialization done");
while (SD.exists(fileName)){
if (fileName[BASE_NAME_SIZE + 1] != '9')
{
fileName[BASE_NAME_SIZE + 1]++;
}
else if (fileName[BASE_NAME_SIZE] != '9')
{
fileName[BASE_NAME_SIZE + 1] = '0';
fileName[BASE_NAME_SIZE]++;
}
else{
Serial.println("Can't create file name");
//return;
}
}
myFile = SD.open(fileName, FILE_WRITE);
if (!myFile) {
Serial.println("open failed");
//return;
}
Serial.print("opened: ");
Serial.println(fileName);
}
void loop(){
while (serial.available())
{
int c = serial.read();
if (gps.encode(c))
{
long lat, lon;
unsigned long fix_age;
gps.get_position(&lat, &lon, &fix_age);
Serial.print("Latitude:");Serial.println(lat);
Serial.print("Longitude:");Serial.println(lon);
myFile = SD.open(fileName, FILE_WRITE);
myFile.print(lat);
myFile.print(", ");
myFile.print(lon);
myFile.println("");
myFile.close();
}
}
}
Если я использую этот код, он дает мне широту и долготу:
#include <SoftwareSerial.h>
#include <TinyGPS.h>
TinyGPS gps;
SoftwareSerial nss(10, 11);
void setup(){
nss.begin(9600);
Serial.begin(9600);
}
void loop()
{
while (nss.available())
{
int c = nss.read();
if (gps.encode(c))
{
long lat, lon;
unsigned long fix_age;
gps.get_position(&lat, &lon, &fix_age);
Serial.print("Szerokosc:");Serial.println(lat);
Serial.print("Dlugosc:");Serial.println(lon);
}
}
}
@Maciej, 👍1
Обсуждение1 ответ
Лучший ответ:
SD использует SPI. В Uno SPI подключен к контактам 10–13. Вы также используете контакты 10 и 11 для последовательного порта программного обеспечения. Это не сработает. Для последовательного программного обеспечения необходимо использовать контакты, отличные от 10 и 11.
Оооо, это было так просто и глупо для меня. Ты спас мне жизнь! Большое спасибо. Сначала я поменял пины последовательного порта на 8 и 9, это не работает, но когда я меняю на 5 и 6, все работает отлично. Еще раз спасибо! :), @Maciej
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
вам нужно описать наблюдаемые результаты... вы не упомянули, печатается ли что-нибудь на самом деле в последовательном мониторе, @jsotola
Да, извините, наблюдаемые результаты: -код только с GPS выводит местоположение на последовательный монитор, поэтому GPS работает нормально -код с GPS и SD-картой показывает только информацию о создании и остановке файла, @Maciej