Как ускорить функцию?

Тема в разделе "Arduino & Shields", создана пользователем Goblin, 11 янв 2019.

  1. Goblin

    Goblin Нуб

    Функция в цикле выполняется за секунду при этом не зависимо от варианта скетча.
    Подскажите с чем это связано и как ускорить работу.
    1ый вариант
    Код (C++):
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    #include "Wire.h"
    const uint64_t pipe2 = 0xF0F1F2F3F1LL;
    RF24 radio(9, 10); // CE, CSN
    int data = 0;
    String flags = " ";
    int flag  = 0;
    String resutX;
    String resutY;
    int xAngle  = 0;
    int yAngle  = 0;
    void setup() {
      //Serial.begin(9600);
      Serial.begin(1000000);
      radio.begin();
      delay(2);
      radio.setChannel(9);
      radio.setDataRate(RF24_1MBPS);
      // скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
      radio.setPALevel(RF24_PA_HIGH);  
      radio.openWritingPipe(pipe2);
    }

    void loop() {
        if (Serial.available() != 0) {
           long  start = millis();//начало таймера
          String ss = Serial.readString();  
         Serial.println(ss);
         resutX = ss.substring(0,3);//берём 3 символа    
         resutY = ss.substring(4,7);//берём 3 символа
         xAngle=atoi(resutX.c_str());//из Sting в it
         yAngle=atoi(resutY.c_str());//из Sting в it    
          if ( xAngle > 60)data = 101;
          else if ( xAngle < 40)data = 111;
          else if ( yAngle > 60 )data = 131;
          else if ( yAngle < 40 )data = 121;
          else data =  0;
        Serial.println(data);
        Serial.println(millis()-start);//время выполнения функции
        radio.write(&data, sizeof(data));
       }    
    }
    2ой вариент
    Код (C++):
    void loop() {
        if (Serial.available() != 0) {
           long  start = millis();
          String ss = Serial.readString();
         Serial.println(ss);    
        Serial.println(data);
        Serial.println(millis()-start);
        radio.write(&data, sizeof(data));
       }  
    }
     
  2. b707

    b707 Гуру

    виновата функция Serial.readString - в ней встроен таймаут 1 секунда
    Используйте для чтения функцию read() побайтно в цикле - задержки в секунду не будет
     
  3. Goblin

    Goblin Нуб

    Спасибо