Проблема Arduino с использованием SoftwareSerial и SPI
Я использую внешний АЦП (через SPI), а также приемник GPS (последовательное программное обеспечение). Я попробовал каждый из них, и он работает нормально. Теперь, когда я пытаюсь объединить их обоих в один скетч, у меня получается только АЦП заставить работать, GPS что-то не получает.
void setup()
{
pinMode(ADS1220_CS_PIN, OUTPUT);
pinMode(ADS1220_DRDY_PIN, INPUT);
Serial.begin(115200);
ss.begin(9600);
//пока(!Последовательный);
//SPI.begin(); // пробуждаем шину SPI.
//SPI.setBitOrder(MSBFIRST);
//SPI.setDataMode(SPI_MODE1);
//ADS1220.begin();
Wire.begin();
delay(1000); // Даем время «разогреться»
delay(1000);
pre_time = millis(); //сохраняем текущее время, чтобы использовать его как «предыдущее» время
}
Я обнаружил, что в setup(), когда я закомментирую все эти функции SPI, GPS что-то возвращает. Что в этом плохого? большое спасибо за любую помощь
@Ralph, 👍-1
Обсуждение3 ответа
Лучший ответ:
SoftwareSerial очень неэффективен. AltSoftSerial лучше всего. Полный список альтернатив см. в этом ответе.
Возможно, вам захочется взглянуть на мою библиотеку NeoGPS. Она меньше, быстрее и точнее, чем все другие библиотеки. Примеры структурированы лучше. Вы не показываете весь свой скетч -_-, но структура цикла может стать вашей настоящей проблемой. Обязательно прочитайте страницу «Устранение неполадок», чтобы получить дополнительные рекомендации.
Спасибо за совет! Мне уже удалось решить свою проблему, просто изменив вывод Rx с 10 на 4, попробую AltSoftSerial и увижу разницу в производительности, спасибо!, @Ralph
эй, просто хочу сказать спасибо, что познакомил меня с AltSofSerial, очевидно, у меня были некоторые проблемы, и я догадывался, была ли проблема в библиотеке программного обеспечения, и это действительно было так, поскольку я передаю данные и в какой-то момент получаю их тоже. И это действительно быстрее!, @Ralph
Пожалуйста! Не могли бы вы нажать зеленый треугольник (Принять), чтобы указать, что этот ответ вам подходит? Спасибо!, @slash-dev
Есть ли способ напечатать более двух десятичных знаков в altsoftserial? я попробовал altSoft(float_num,4);
но он не работает, @Ralph
Вы имели в виду altSoft.print(float_num, 4);
?, @slash-dev
цифровой контакт 10 является ведомым для SPI на Arduino, возможно, именно поэтому., @robert kondratenko
Мне удалось решить эту проблему, просто заменив контакт Rx на цифровой контакт 4 с цифрового контакта 10. Я не знаю, в чем причина проблемы, но мне это помогло
Чтобы Arduino была ведущим устройством SPI, вывод SS (D10) должен быть выходом. Использование его в качестве программного последовательного входа (Rx) бесполезно. Если бы вы использовали его в качестве выхода Tx, с вами, скорее всего, все было бы в порядке. Я стараюсь использовать 10 в качестве SS для первого подключаемого устройства SPI, чтобы избежать этой ошибки.
- Дата и время GPS не отображаются правильно в Arduino Uno,NEO6M GPS модуль
- Ардуино получает данные датчиков от других arduino SPI
- Как использовать SPI на Arduino?
- AT-команда не отвечает на последовательный монитор
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- SIM800L не регистрируется в сети
- OVF в последовательном мониторе вместо данных
Я предлагаю отредактировать ваш вопрос, включив в него [Минимальный, полный и проверяемый пример](http://stackoverflow.com/help/mcve) кода, а не только фрагменты. Также номера деталей, ссылки на таблицы данных и принципиальную схему с указанием терминаторов и т. д., а также фотографии трассировок проекта и объема, если расположение имеет значение., @James Waldby - jwpat7
@jwpat7 извините за мой пост, но мне уже удалось решить эту проблему, просто изменив контакт Rx с 10 на цифровой контакт 4. Кстати, спасибо за информацию, в следующий раз получится лучше, @Ralph
Ральф, часто бывает так, что если попытаться предоставить всю информацию, то проблема будет решена :), @James Waldby - jwpat7