Подключите Arduino к LiDAR через RS-232
Правка: мы так близко! Обновление внизу! Я не уверен, что это правильное место, чтобы задать вопрос, но поскольку вы так много помогли мне в прошлом, я подумал, что стоит попробовать.
Итак, как я уже говорил в моем последнем вопросе, я использую Arduino Leonardo для моделирования GPS-приемника.
Теперь Arduino подключен к Velodyne VLP-16 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
@MarayJay, 👍0
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), чтобы проверить, правильно ли выглядит протокол.
- GPS-симулятор Arduino: проблемы с программным обеспечением
- Как использовать SPI на Arduino?
- GPS-модуль uBlox Neo 6M не отвечает
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Как читать и записывать на устройство rs232 с/на Arduino
- Как отправить данные из Arduino Uno с SIM900 GPRS в Firebase
- Ошибка инициализации GPS DFRobot [Arduino Uno, SIM808]
- Невозможно использовать библиотеку клавиатуры с Arduino UNO даже после смены прошивки.
Спасибо за ваши подсказки. Я пытаюсь им ответить:, @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