Подключите Arduino к LiDAR через RS-232

Правка: мы так близко! Обновление внизу! Я не уверен, что это правильное место, чтобы задать вопрос, но поскольку вы так много помогли мне в прошлом, я подумал, что стоит попробовать.

Итак, как я уже говорил в моем последнем вопросе, я использую Arduino Leonardo для моделирования GPS-приемника.

Теперь Arduino подключен к Velodyne VLP-16 LiDAR

.

Вот что нужно лидару: Требования LiDAR

Я подключил это так: Схема

И написал следующий код:

#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 6); //232_TX,232_

int triggerFreq = 1;
unsigned long timestamp;
unsigned long triggerStartTime;
const unsigned long dt = 1000000/triggerFreq; //микро


unsigned long i;

float gprmc = 181721.000;

void setup() {
  pinMode(11, OUTPUT); // PPS
  pinMode(12, OUTPUT); // Индикатор msg_sent
  Serial.begin(9600);
  mySerial.begin(9600);
  triggerStartTime = micros();
}

void loop() {
  timestamp = micros()-triggerStartTime;
  if (timestamp>= dt*i+200000)
  {
    digitalWrite(12,HIGH);

    i +=1;
    gprmc += 1;
    mySerial.print("$GPRMC,");
    if (gprmc < 100000) mySerial.print(F("0"));
    mySerial.print(gprmc,3);
    mySerial.println(F(",A,4042.695,N,07400.796,W,,,080120,000.0,W*63"));
    Serial.print("$GPRMC,");
    if (gprmc < 100000) Serial.print(F("0"));
    Serial.print(gprmc,3);
    Serial.println(F(",A,4042.695,N,07400.796,W,,,080120,000.0,W*63"));
    digitalWrite(12,LOW);
  }
  else if (timestamp>=dt*i+100000)
  {
    digitalWrite(11,LOW);
  }
  else if (timestamp>=dt*i)
  {
    digitalWrite(11,HIGH);

  }

}

Вот ситуация сейчас:

  • Я вижу на плате, что сообщения отправляются (индикатор TX мигает)
  • Я также вижу, что импульс отправляется правильно (светодиод мигает)
  • Я не измеряю напряжение на выходном контакте TX (RS232 контакт 3) (я просто использую свой мультиметр, но обычно он реагирует на такие короткие импульсы напряжения миганием светодиода)
  • Я измеряю такой импульс на контакте 4 RS232
  • LiDAR не реагирует на отправленные мной сообщения

Теперь мой вопрос: вы видите ошибку в моей реализации? Сообщение отправлено корректно?

Большое спасибо за помощь! Я очень ценю это!

Правка: в руководстве LiDAR сказано:

Поддерживаемое предложение и синтаксис NMEA точно такие же, как и в проводном (последовательном) интерфейсе GPS. Поддерживаемые последовательности разделителей предложений включают (HEX 0D0A, стандарт), сами по себе и сами по себе.

Честно говоря, я не очень хорошо разбираюсь в подобных проблемах, поэтому не уверен, что эти разделители уже отправляются?

Редактировать №2: Хорошо, следующая ситуация:

  • На самом деле я не уверен, что изменилось. Код тот же, что и выше
  • Лидар теперь распознает НЕКОТОРЫЕ сообщения (я могу видеть только положение, поэтому я отредактировал код, чтобы немного менять положение каждую секунду, а лидар обновляет свое положение нерегулярно, но примерно каждые 10 секунд)
  • Если кто-нибудь знает объяснение, я был бы очень рад узнать. В противном случае я просто продолжу попытки и буду держать вас в курсе!

Поэтому следующий код частично работает. Это означает: LiDAR распознает определенные сообщения... кажется, что это всегда одни и те же сообщения (я увеличивал позицию каждую секунду, это позиции):

  • 3015.2746
  • 3015.2766
  • 3015.2971
  • 3015.3107
  • 3015.3117

Я отобразил все случаи, когда что-то было отправлено, и я не смог найти никаких различий между сообщениями, которые работали, и теми, которые не работали.

Еще одно дополнение: Если я попытаюсь увеличить pos+=0.0001, это не сработает... кажется, что я могу изменить только до 3 знаков после запятой. Я не понимаю, почему, поскольку float использует 4 байта, это не должно быть проблемой для хранения ?! справка

Хорошо, вот код на данный момент:

#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 6); //232_TX,232_

int triggerFreq = 1;
unsigned long timestamp;
unsigned long triggerStartTime;
const unsigned long dt = 1000000/triggerFreq; //микро
unsigned long ts_pps_high;
unsigned long ts_pps_low;
unsigned long ts_msg_high;
unsigned long ts_msg_low;


unsigned long i;

int hh = 04;
int mm = 51;
int ss = 00;
float pos = 3015.2307;
bool msg;


void setup() {
  // поместите сюда код установки для однократного запуска:
  pinMode(11, OUTPUT); // PPS
  pinMode(12, OUTPUT); // Индикатор msg_sent
  Serial.begin(9600);
  mySerial.begin(9600);
  triggerStartTime = micros();
}

void loop() {
  timestamp = micros()-triggerStartTime;
  if (timestamp>= dt*i+350000)
  {
    pos +=0.001;
    digitalWrite(12,HIGH);
    i +=1;
    if (ss == 59)
    {
      ss=0;
      if (mm==59)
      {
        mm=0;
        hh+=1;
      }
      else mm+=1;
    }
    else ss+=1;

    ts_msg_high = micros();
    mySerial.print("$GPRMC,");
    if (hh<10) mySerial.print(F("0"));
    mySerial.print(hh);
    if (mm<10) mySerial.print(F("0"));
    mySerial.print(mm);
    if (ss<10) mySerial.print(F("0"));
    mySerial.print(ss);
    mySerial.print(".000,A,");
    mySerial.print(pos,4);
    mySerial.println(",N,09749.2872,W,0.67,161.46,030913,,,A*7C");

    // Печать отладочных сообщений
    digitalWrite(12,LOW);
    ts_msg_low=micros();
    Serial.print("PPS at: ");
    Serial.print(ts_pps_high);
    Serial.print("\t PPS low after: ");
    Serial.print(ts_pps_low-ts_pps_high);
    Serial.print("\t MSG high after: ");
    Serial.print(ts_msg_high-ts_pps_high);
    Serial.print("\t MSG low after: ");
    Serial.print(ts_msg_low-ts_pps_high);
    Serial.print("$GPRMC,");
    if (hh<10) Serial.print(F("0"));
    Serial.print(hh);
    if (mm<10) Serial.print(F("0"));
    Serial.print(mm);
    if (ss<10) Serial.print(F("0"));
    Serial.print(ss);
    Serial.print(".000,A,");
    Serial.print(pos,4);
    Serial.println(",N,09749.2872,W,0.67,161.46,030913,,,A*7C");
  }
  else if (timestamp>=dt*i+100000)
  {
    digitalWrite(11,LOW);
    if (msg==true)
    {
      msg = false; 
      ts_pps_low = micros();
    }

  }
  else if (timestamp>=dt*i)
  {
    digitalWrite(11,HIGH);  
    if (msg==false)
    {
      msg = true;
      ts_pps_high = micros();
    }
  }

}

Вы также можете увидеть мои результаты:

PPS at: 2001060  PPS low after: 100000   MSG high after: 350016  MSG low after: 427132$GPRMC,045103.000,A,3015.2336,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 3001060  PPS low after: 100004   MSG high after: 350004  MSG low after: 427112$GPRMC,045104.000,A,3015.2346,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 4001056  PPS low after: 100000   MSG high after: 350004  MSG low after: 427116$GPRMC,045105.000,A,3015.2355,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 5001060  PPS low after: 100004   MSG high after: 350004  MSG low after: 427112$GPRMC,045106.000,A,3015.2365,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 6001056  PPS low after: 100004   MSG high after: 350004  MSG low after: 427116$GPRMC,045107.000,A,3015.2375,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 7001060  PPS low after: 100004   MSG high after: 350004  MSG low after: 427120$GPRMC,045108.000,A,3015.2385,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 8001056  PPS low after: 100004   MSG high after: 350020  MSG low after: 427132$GPRMC,045109.000,A,3015.2395,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 9001060  PPS low after: 100000   MSG high after: 350016  MSG low after: 427160$GPRMC,045110.000,A,3015.2404,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 10001052     PPS low after: 100008   MSG high after: 350020  MSG low after: 427164$GPRMC,045111.000,A,3015.2414,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 11001064     PPS low after: 100000   MSG high after: 350020  MSG low after: 427164$GPRMC,045112.000,A,3015.2424,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 12001056     PPS low after: 100008   MSG high after: 350004  MSG low after: 427152$GPRMC,045113.000,A,3015.2434,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 13001056     PPS low after: 99996    MSG high after: 350020  MSG low after: 427164$GPRMC,045114.000,A,3015.2443,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 14001056     PPS low after: 100008   MSG high after: 350008  MSG low after: 427156$GPRMC,045115.000,A,3015.2453,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 15001052     PPS low after: 100004   MSG high after: 350020  MSG low after: 427164$GPRMC,045116.000,A,3015.2463,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 16001052     PPS low after: 100000   MSG high after: 350016  MSG low after: 427164$GPRMC,045117.000,A,3015.2473,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 17001056     PPS low after: 100004   MSG high after: 350020  MSG low after: 427164$GPRMC,045118.000,A,3015.2482,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 18001052     PPS low after: 100000   MSG high after: 350016  MSG low after: 427164$GPRMC,045119.000,A,3015.2492,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 19001056     PPS low after: 100004   MSG high after: 350020  MSG low after: 427160$GPRMC,045120.000,A,3015.2502,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 20001060     PPS low after: 100000   MSG high after: 350004  MSG low after: 427148$GPRMC,045121.000,A,3015.2512,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 21001052     PPS low after: 100004   MSG high after: 350020  MSG low after: 427168$GPRMC,045122.000,A,3015.2521,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 22001064     PPS low after: 100004   MSG high after: 350004  MSG low after: 427148$GPRMC,045123.000,A,3015.2531,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 23001052     PPS low after: 100008   MSG high after: 350020  MSG low after: 427172$GPRMC,045124.000,A,3015.2541,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 24001052     PPS low after: 100008   MSG high after: 350024  MSG low after: 427168$GPRMC,045125.000,A,3015.2551,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 25001056     PPS low after: 100000   MSG high after: 350016  MSG low after: 427168$GPRMC,045126.000,A,3015.2561,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 26001052     PPS low after: 100008   MSG high after: 350024  MSG low after: 427160$GPRMC,045127.000,A,3015.2570,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 27001056     PPS low after: 100000   MSG high after: 350020  MSG low after: 427156$GPRMC,045128.000,A,3015.2580,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 28001060     PPS low after: 100008   MSG high after: 350004  MSG low after: 427144$GPRMC,045129.000,A,3015.2590,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 29001056     PPS low after: 100000   MSG high after: 350020  MSG low after: 427156$GPRMC,045130.000,A,3015.2600,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 30001056     PPS low after: 100004   MSG high after: 350020  MSG low after: 427164$GPRMC,045131.000,A,3015.2609,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 31001056     PPS low after: 100008   MSG high after: 350004  MSG low after: 427148$GPRMC,045132.000,A,3015.2619,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 32001056     PPS low after: 99996    MSG high after: 350012  MSG low after: 427164$GPRMC,045133.000,A,3015.2629,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 33001056     PPS low after: 100008   MSG high after: 350020  MSG low after: 427164$GPRMC,045134.000,A,3015.2639,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 34001056     PPS low after: 100000   MSG high after: 350016  MSG low after: 427164$GPRMC,045135.000,A,3015.2648,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 35001060     PPS low after: 100004   MSG high after: 350000  MSG low after: 427144$GPRMC,045136.000,A,3015.2658,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 36001060     PPS low after: 100000   MSG high after: 350004  MSG low after: 427148$GPRMC,045137.000,A,3015.2668,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 37001060     PPS low after: 100004   MSG high after: 350004  MSG low after: 427144$GPRMC,045138.000,A,3015.2678,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 38001064     PPS low after: 100004   MSG high after: 350004  MSG low after: 427144$GPRMC,045139.000,A,3015.2687,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 39001060     PPS low after: 100008   MSG high after: 350004  MSG low after: 427152$GPRMC,045140.000,A,3015.2697,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 40001052     PPS low after: 100008   MSG high after: 350024  MSG low after: 427160$GPRMC,045141.000,A,3015.2707,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 41001052     PPS low after: 100000   MSG high after: 350016  MSG low after: 427168$GPRMC,045142.000,A,3015.2717,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 42001060     PPS low after: 100004   MSG high after: 350004  MSG low after: 427148$GPRMC,045143.000,A,3015.2727,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 43001056     PPS low after: 100000   MSG high after: 350020  MSG low after: 427164$GPRMC,045144.000,A,3015.2736,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 44001052     PPS low after: 100004   MSG high after: 350020  MSG low after: 427164$GPRMC,045145.000,A,3015.2746,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 45001064     PPS low after: 100004   MSG high after: 350004  MSG low after: 427144$GPRMC,045146.000,A,3015.2756,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 46001052     PPS low after: 100004   MSG high after: 350020  MSG low after: 427172$GPRMC,045147.000,A,3015.2766,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 47001056     PPS low after: 100004   MSG high after: 350020  MSG low after: 427164$GPRMC,045148.000,A,3015.2775,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 48001056     PPS low after: 100000   MSG high after: 350016  MSG low after: 427164$GPRMC,045149.000,A,3015.2785,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 49001060     PPS low after: 100004   MSG high after: 350004  MSG low after: 427144$GPRMC,045150.000,A,3015.2795,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 50001052     PPS low after: 100000   MSG high after: 350016  MSG low after: 427160$GPRMC,045151.000,A,3015.2805,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 51001060     PPS low after: 100004   MSG high after: 350004  MSG low after: 427148$GPRMC,045152.000,A,3015.2814,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 52001056     PPS low after: 100000   MSG high after: 350020  MSG low after: 427164$GPRMC,045153.000,A,3015.2824,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 53001064     PPS low after: 100004   MSG high after: 350000  MSG low after: 427144$GPRMC,045154.000,A,3015.2834,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 54001056     PPS low after: 100004   MSG high after: 350020  MSG low after: 427164$GPRMC,045155.000,A,3015.2844,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 55001060     PPS low after: 100004   MSG high after: 350020  MSG low after: 427172$GPRMC,045156.000,A,3015.2854,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 56001068     PPS low after: 100004   MSG high after: 350000  MSG low after: 427144$GPRMC,045157.000,A,3015.2863,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 57001060     PPS low after: 99996    MSG high after: 350012  MSG low after: 427160$GPRMC,045158.000,A,3015.2873,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 58001064     PPS low after: 100004   MSG high after: 350004  MSG low after: 427148$GPRMC,045159.000,A,3015.2883,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 59001056     PPS low after: 100000   MSG high after: 350024  MSG low after: 427132$GPRMC,045200.000,A,3015.2893,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 60001060     PPS low after: 100004   MSG high after: 350020  MSG low after: 427124$GPRMC,045201.000,A,3015.2902,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 61001064     PPS low after: 100008   MSG high after: 350004  MSG low after: 427116$GPRMC,045202.000,A,3015.2912,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 62001060     PPS low after: 100008   MSG high after: 350008  MSG low after: 427124$GPRMC,045203.000,A,3015.2922,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 63001060     PPS low after: 100012   MSG high after: 350008  MSG low after: 427120$GPRMC,045204.000,A,3015.2932,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 64001052     PPS low after: 100000   MSG high after: 350020  MSG low after: 427136$GPRMC,045205.000,A,3015.2941,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 65001060     PPS low after: 100008   MSG high after: 350004  MSG low after: 427120$GPRMC,045206.000,A,3015.2951,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 66001064     PPS low after: 100000   MSG high after: 349996  MSG low after: 427116$GPRMC,045207.000,A,3015.2961,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 67001060     PPS low after: 100004   MSG high after: 350004  MSG low after: 427120$GPRMC,045208.000,A,3015.2971,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 68001060     PPS low after: 100000   MSG high after: 350004  MSG low after: 427112$GPRMC,045209.000,A,3015.2980,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 69001052     PPS low after: 100004   MSG high after: 350020  MSG low after: 427164$GPRMC,045210.000,A,3015.2990,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 70001064     PPS low after: 100004   MSG high after: 350004  MSG low after: 427136$GPRMC,045211.000,A,3015.3000,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 71001060     PPS low after: 100004   MSG high after: 350004  MSG low after: 427148$GPRMC,045212.000,A,3015.3010,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 72001064     PPS low after: 100004   MSG high after: 350004  MSG low after: 427144$GPRMC,045213.000,A,3015.3020,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 73001056     PPS low after: 100000   MSG high after: 350016  MSG low after: 427164$GPRMC,045214.000,A,3015.3029,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 74001064     PPS low after: 99988    MSG high after: 350004  MSG low after: 427148$GPRMC,045215.000,A,3015.3039,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 75001052     PPS low after: 100000   MSG high after: 350020  MSG low after: 427164$GPRMC,045216.000,A,3015.3049,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 76001060     PPS low after: 100004   MSG high after: 350000  MSG low after: 427144$GPRMC,045217.000,A,3015.3059,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 77001056     PPS low after: 100008   MSG high after: 350004  MSG low after: 427148$GPRMC,045218.000,A,3015.3068,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 78001060     PPS low after: 100008   MSG high after: 350004  MSG low after: 427152$GPRMC,045219.000,A,3015.3078,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 79001052     PPS low after: 100008   MSG high after: 350020  MSG low after: 427164$GPRMC,045220.000,A,3015.3088,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 80001052     PPS low after: 100000   MSG high after: 350016  MSG low after: 427164$GPRMC,045221.000,A,3015.3098,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 81001056     PPS low after: 100008   MSG high after: 350020  MSG low after: 427164$GPRMC,045222.000,A,3015.3107,N,09749.2872,W,0.67,161.46,030913,,,A*7C
PPS at: 82001060     PPS low after: 100000   MSG high after: 350016  MSG low after: 427172$GPRMC,045223.000,A,3015.3117,N,09749.2872,W,0.67,161.46,030913,,,A*7C

, 👍0


1 ответ


1

Некоторые подсказки для проверки, хотя я могу лишь расплывчато комментировать ошибку (EDIT: некоторые подсказки имеют смысл только в более старой версии вопроса):

  • Вы установили для SoftwareSerial контакт 7 для RX и контакт 6 для TX, но индикатор TX на плате подключен к аппаратному UART, который используется Serial. Таким образом, индикатор TX реагирует на ваши отладочные сообщения, отправленные через Serial.print() на ПК. Контакты TX и RX на вашей плате Arduino всегда подключены к аппаратному UART, который всегда управляется Serial и не может быть запрошен SoftwareSerial.
  • «SoftwareSerial TX pin» вашего Arduino (примечание: TX-контакт, который вы установили с помощью SoftwareSerial mySerial(7, 6);), должен быть подключен к RX модуля GPS. Помните: если вы передаете что-то по линии передачи одного устройства, это должно быть получено по линии приема другого устройства (T означает передачу, R — прием, а X — для этого вы должны пересечь линии). (Этот намек игнорирует то, что у вас есть экран RS232, я понял это позже.)
  • В документах указано, что ваша запись gprmc принимается в формате ччммсс или ччммсс.с. Тем не менее, вы отправляете строку с тремя знаками после точки. Я не уверен, что я что-то неправильно истолковал здесь.
  • Если вы просто добавляете 1 к gprmc каждую секунду, вы в конечном итоге будете отправлять эквивалент "18 часов, 17 минут, 61 секунду" через 40 секунд выполнения (поскольку ожидается формат hhmmss), который может или не может сбить с толку чип GPS.
  • Является ли скорость 9600 бод правильной для GPS-приемника? Где-то в документах должна быть подсказка об этом (я ожидаю не менее 115 200 на устройствах, которым меньше 20 лет...).
  • Импульсная линия может следовать отрицательной логике, т. е. обычно она имеет ВЫСОКИЙ уровень, и для импульса ее необходимо перевести в НИЗКИЙ уровень. Проверьте в таблице данных, нужен ли импульс LOW, и в этом случае вам нужно поменять местами HIGH и LOW на импульсной линии.
  • Что такое контакт 12 (msg_sent) и зачем он нужен? В схемах он не упоминается. Я могу только предположить, что это может сигнализировать вашему экрану RS232 о том, что сообщение было отправлено на экран RS232, и теперь UART RS232 может очистить свой буфер, т.е. фактически отправить сообщение по проводу на чип GPS. Если это действительно так, вы сигнализируете экрану RS232 о том, что сообщение было отправлено, прежде чем вы фактически отправите сообщение.
  • Попробовать без экрана RS232? RS232 — это просто спецификация «последовательного протокола», которая допускает уровни напряжения до 25 В плюс несколько дополнительных сигнальных линий. По схеме и разводке вижу, что микросхема GPS не использует никаких лишних линий и ожидает уровень сигнала 5В. С SoftwareSerial вы уже выводите «последовательный протокол» с уровнем сигнала 5 В с ваших контактов GPIO. Издалека кажется, что экран RS232 добавляет больше потенциальных точек отказа в связь. У вас есть преобразователь Serial-to-USB для фактической проверки выхода вашего щита RS232?
  • Ваши разделители не отправлены. Hex 0D0A - это просто CRLF, или «возврат каретки, перевод строки» или «стандартные символы разрыва строки в текстовых файлах в DOS и Windows». Это означает: последний mySerial.print() должен быть изменен на mySerial.println(), который аналогичен mySerial.print(), но в конце добавляется разрыв строки.
  • Возможно, это сработает, если вы соедините контакт, обозначенный GPS_RXD_CNT на схеме, с контактом 6 вашего Arduino, удалив при этом любые собственные провода от TX и RX вашего Arduino.
  • Плавающие числа не хранят 3 десятичных знака после запятой. ", они хранят значащие двоичные разряды плюс положение точки. Это означает: если количество значащих мест велико, вы теряете точность в конце. Преобразованное в десятичное число, 32-битное число с плавающей запятой имеет точность только 6-7 знаков после запятой. Число, подобное (десятичному) 100000,01, потеряет свою последнюю единицу и даст 100000,0; это также верно для 1000000,1 (=1000000,0), 10000001000,0 (=10000000000,0) и 0,000010000001 (=0,00001). Таким образом, если вы прибавите 0,1 к 1234567,0, вы получите 1234567,0 — или, в крайнем случае: 1234567000000,0 + 11111,0 = 1234567000000,0. (Числа не приходят мне в голову, реальность может ввести некоторое округление между десятичным и двоичным представлением, это просто для того, чтобы понять суть - кроме того, ваш десятичный вывод не покажет это точно, потому что двоичное представление является точным только для дробей степеней двойки после точки).

Кроме того, вы можете добавить несколько вызовов Serial.println() для каждого из ваших вызовов digitalWrite(), выводя что-то вроде "контакт 11 (PPS) теперь ВЫСОКИЙ». Затем используйте Serial Monitor Arduino IDE (не забудьте установить его скорость передачи данных на 9600), чтобы проверить, правильно ли выглядит протокол.

,

Спасибо за ваши подсказки. Я пытаюсь им ответить:, @MarayJay

- Действительно, я установил для softwareSerial значения Pin7 и 6. Это потому, что у меня есть экран RS-232, установленный поверх Arduino, который выполняет связь. У него есть собственный светодиод TX, который мигает, когда данные отправляются через RS-232. Так что это должно быть правильно - Может быть, моя схема была немного запутанной. я подключил Arduino Tx к Lidar RX, так что это тоже должно работать (я проверил соединение). Я обновлю свою схему., @MarayJay

- Ты прав. Однако в другой части документа говорится >"Запись GPRMC может быть настроена для форматов ЧЧММСС, ЧЧММСС.с, ЧЧММСС.сс и ЧЧММСС.сссс." Так что это тоже должно быть правильно... - Да, хороший отзыв! Я изменил это и отредактирую свой вопрос. Но все равно не работает :С, @MarayJay

@MarayJay «может быть настроен для» может означать, что вам придется сообщить чипу GPS точный формат перед его использованием. Кроме того, я не уверен, действительно ли вам нужен щит RS232. Возможно, вы можете просто напрямую подключить контакт 6 Arduino к плате GPS., @orithena

В руководстве к LiDAR сказано, что ожидается связь через RS-232 (более высокое напряжение). Но, честно говоря, на данный момент я уже не уверен. Мне просто нужно, чтобы это работало, @MarayJay

@MarayJay Добавлено больше подсказок для проверки ^^, @orithena

@MarayJay Ты уже добился успеха? :), @orithena

спасибо за все ваши подсказки и поддержку! :O К сожалению, у меня не хватило времени... Сегодня я должен был представить работающую систему, и мне пришлось потратить свое время на другие вещи, так как это лишь очень малая часть моего проекта. теперь крайний срок истек, и после нескольких ночных смен у меня, честно говоря, нет сил заниматься этим дальше. Но если я или кто-нибудь из нашей лаборатории найду способ, я дам вам знать! :), @MarayJay