Проблема с 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);

    }
  }
}

, 👍1

Обсуждение

вам нужно описать наблюдаемые результаты... вы не упомянули, печатается ли что-нибудь на самом деле в последовательном мониторе, @jsotola

Да, извините, наблюдаемые результаты: -код только с GPS выводит местоположение на последовательный монитор, поэтому GPS работает нормально -код с GPS и SD-картой показывает только информацию о создании и остановке файла, @Maciej


1 ответ


Лучший ответ:

0

SD использует SPI. В Uno SPI подключен к контактам 10–13. Вы также используете контакты 10 и 11 для последовательного порта программного обеспечения. Это не сработает. Для последовательного программного обеспечения необходимо использовать контакты, отличные от 10 и 11.

,

Оооо, это было так просто и глупо для меня. Ты спас мне жизнь! Большое спасибо. Сначала я поменял пины последовательного порта на 8 и 9, это не работает, но когда я меняю на 5 и 6, все работает отлично. Еще раз спасибо! :), @Maciej