Проблема 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 что-то возвращает. Что в этом плохого? большое спасибо за любую помощь

, 👍-1

Обсуждение

Я предлагаю отредактировать ваш вопрос, включив в него [Минимальный, полный и проверяемый пример](http://stackoverflow.com/help/mcve) кода, а не только фрагменты. Также номера деталей, ссылки на таблицы данных и принципиальную схему с указанием терминаторов и т. д., а также фотографии трассировок проекта и объема, если расположение имеет значение., @James Waldby - jwpat7

@jwpat7 извините за мой пост, но мне уже удалось решить эту проблему, просто изменив контакт Rx с 10 на цифровой контакт 4. Кстати, спасибо за информацию, в следующий раз получится лучше, @Ralph

Ральф, часто бывает так, что если попытаться предоставить всю информацию, то проблема будет решена :), @James Waldby - jwpat7


3 ответа


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

2

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


1

Мне удалось решить эту проблему, просто заменив контакт Rx на цифровой контакт 4 с цифрового контакта 10. Я не знаю, в чем причина проблемы, но мне это помогло

,

-1

Чтобы Arduino была ведущим устройством SPI, вывод SS (D10) должен быть выходом. Использование его в качестве программного последовательного входа (Rx) бесполезно. Если бы вы использовали его в качестве выхода Tx, с вами, скорее всего, все было бы в порядке. Я стараюсь использовать 10 в качестве SS для первого подключаемого устройства SPI, чтобы избежать этой ошибки.

,