0 голосов
Здравствуйте! Я Вам очень благодарен за помощь в предыдущем вопросе. Начал программировать так как сижу в карантине. Чтоб не сойти с ума, только начинаю открывать этот мир. Делаю некий скетч там есть функция клиента NTP после непродолжительной работы функция ожидания и формирования полученного пакета вываливается в ошибку. Чем это может быть вызвано? И как обойти?
Заранее благодарен.

\Arduino\libraries\WiFiNINA_Generic\src\utility\spi_drv.cpp::309]-W-Error waiting START_CMD
(23 баллов) 3 5
Покажите код, пожалуйста.

2 Ответы

+1 голос
 
Лучший ответ

Скорее всего при отладке ваш код выглядел так. Выполнялась  только первая строка при условии, а вторая строка выполнялась постоянно. 

if (myTimer1.isReady())
   Serial.println("Timer 1!");
       waitpacket();

Правильно было бы так

if (myTimer1.isReady())
{
   Serial.println("Timer 1!");
       waitpacket();
}

Функция myTimer1.isReady() возвращает логическую единицу?

(3 тыс. баллов) 9 20 41
выбран
Спасибо! Вы правы (хотя это была описка) надо было задать время запуска функции ожидания,  после отправки пакетов, не используя delay. Долго тормозил, прежде чем понял запускать по таймеру (раз в полсекунды), но ограничения накладывать по millis (запускать) через небольшую паузу (после отправки пакетов начинать обрабатывать пакет и гасить функцию через секунду после отправки пакетов.
0 голосов
oid loop()
{
   startprocedure();
   fadeselect();
   selectpumpvalue();
   buttons();
   
   if (myTimer1.isReady())
   // Serial.println("Timer 1!");
       waitpacket();
   
  if (myTimer2.isReady())
    //Serial.println("Timer 2!");
      lcdprint();
       
    
  if (myTimer3.isReady())
    //Serial.println("Timer 3!");
     ntptask();
     
     }

Выпадает вот этот блок:

void waitpacket()
   {
    //Serial.println("WAITPACKET  AFTER  PAUSE");
    if (Udp.parsePacket()) {
    Serial.println("packet received");
    // We've received a packet, read the data from it
    Udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer

    //the timestamp starts at byte 40 of the received packet and is four bytes,
    // or two words, long. First, esxtract the two words:

    unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
    unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
    // combine the four bytes (two words) into a long integer
    // this is NTP time (seconds since Jan 1 1900):
    unsigned long secsSince1900 = highWord << 16 | lowWord;
    Serial.print("Seconds since Jan 1 1900 = ");
    Serial.println(secsSince1900);

    // now convert NTP time into everyday time:
    Serial.print("Unix time = ");
    // Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
    const unsigned long seventyYears = 2208988800UL;
    // subtract seventy years:
    unsigned long epoch = secsSince1900 - seventyYears;
    // print Unix time:
    Serial.println(epoch);

    // print the hour, minute and second:
    Serial.print("The UTC time is ");       // UTC is the time at Greenwich Meridian (GMT)
    Serial.print((epoch  % 86400L) / 3600); // print the hour (86400 equals secs per day)
    Serial.print(':');
    if (((epoch % 3600) / 60) < 10) {
      // In the first 10 minutes of each hour, we'll want a leading '0'
      Serial.print('0');
    }
    Serial.print((epoch  % 3600) / 60); // print the minute (3600 equals secs per minute)
    Serial.print(':');
    if ((epoch % 60) < 10) {
      // In the first 10 seconds of each minute, we'll want a leading '0'
      Serial.print('0');
    }
    Serial.println(epoch % 60); // print the second   
      }
}
(23 баллов) 3 5
Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.

    За этот месяц ещё никого.

    ...