Извините заранее за то, что, по моему мнению, будет очень простой проблемой, но я застрял на ней в течение нескольких часов, и я не смог решить, как исправить это, основываясь на том, что я нашел здесь, или на google.
У меня есть arduino, подключенный к GPS и радио, и я пытаюсь транслировать сигнал GPS на свое радио. То, что я пытаюсь сделать сейчас, - это получить предложение NMEA от GPS в переменном "текст", но я запутался в этой ошибке, что, я думаю, связано с массивами.
Моя ошибка возникает в этой строке: sprintf(text, char(c));
Я пробовал несколько разных вещей, но сейчас я застрял. Любая помощь могла бы быть полезна.
#define RADIOPIN 13
#include <string.h>
#include <util/crc16.h>
#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 2);
#define GPSECHO true
Adafruit_GPS GPS(&mySerial);
char datastring[80];
char text[80];
void setup() {
Serial.begin(115200);
GPS.begin(9600);
GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
GPS.sendCommand(PMTK_SET_NMEA_UPDATE_5HZ);
delay(3000);
pinMode(RADIOPIN,OUTPUT);
}
void loop(){
gpscheck();
}
void gpscheck(){
char c = GPS.read();
if (c) {
// Serial.print(c);
sprintf(text, char*(c));
Serial.print(text);
}
}
Вы можете прочитать ссылку sprintf
. Затем вы увидите, что второй аргумент представляет собой строку.
Итак, было бы хорошо:
sprintf(text, "%c", c);
Чтобы быть в безопасности, вы можете использовать snprintf
вместо этого, чтобы уменьшить риск переполнения буфера.
Конечно, для одного символа вы также можете сделать
text[0] = c;
text[1] = '\0'; /* Terminate string */
sprintf(text, char*(c));
Если вы хотите напечатать символ
simply use printf("%c",c);
если вы хотите скопировать это в текст
sprintf(text,"%c", c);
GPS.read()
вернет только один символ или строку?sprintf(text, char*(c));
неправильно! Читайте о его использовании здесь .