arduino mega + nodemcu

Тема в разделе "Arduino & Shields", создана пользователем Maks2186, 22 окт 2017.

  1. Maks2186

    Maks2186 Нуб

    Всем привет! Хочу спросить совета у местных гуру.

    Делаю связь ардуины с модулем nodemcu.
    На модуле такой код:
    Код (C++):

    void setup() {
      Serial.begin(9600);
    }

    String out = "CV:1234";

    void loop() {
      // put your main code here, to run repeatedly:
    Serial.println(out);
    delay(1000);
    }
    Данные идут, принимаю на сериал3 меги, и выдаю принятые данные в монитор порта - все ок.

    Далее хочу разбить строку - отделить числа от букв, следующим кодом:
    Код (C++):
     String input = "";

      while (Serial3.available())
      {
        input = input + (char)(Serial3.read());
        Serial.print(input);
      }
    //Что ниже не работает...
       if (input.startsWith("CV:")) {
        String Voltage =  input.substring(3);
        Voltage.trim();
        int Vol = Voltage.toInt();
        Serial.print(Vol);
      }  
    Но код не работает. Куда копать?
     
  2. rkit

    rkit Гуру

    Проверяйте, что там пришло
     
  3. brokly

    brokly Гик

    Код (C++):
       while (Serial3.available()) {
         char temp=Serial3.read();
         if (temp>' ') {
           input += temp;
         }
       }

       int start=input.indexOf(F("CV:"));
       int Vol=0;
       if (start>-1){
         if (input.length()>=(start+7)) {
            input=input.substring(start+3);
            Vol=input.toInt();  
         }
       }
     
    Не оптимально конечно, но все же....
     
    Последнее редактирование: 23 окт 2017
    Maks2186 нравится это.
  4. Maks2186

    Maks2186 Нуб

    Все ровно не работает..:(
     
  5. brokly

    brokly Гик

    Надеюсь этот кусок кода у вас в лупе ?
    Ну выдайте на печать что у вас в input.
     
    Maks2186 нравится это.
  6. Maks2186

    Maks2186 Нуб

    Блин.

    А почему я создал функцию, поместил этот код в нее и вызвал в лупе и не работает. Поместил код тупо в луп и работает:(
     
  7. brokly

    brokly Гик

    Функцию в студию ;)
    Вангую, в функции объявите переменную input, как статик :)

    static String input;

    Но это ооочень не айс, неумирающие стринги засирают память.
     
    Maks2186 нравится это.
  8. Maks2186

    Maks2186 Нуб

    Да это я тупой, не так написал. Сейчас все работает. Спасибо!

    Буду разбираться дальше.
     
  9. Maks2186

    Maks2186 Нуб

    Еще вопрос, передаю CV:123456, но вылезает откуда то отрицательное число. Как с ним побороться?
    Выделение_002.png
     
  10. DIYMan

    DIYMan Guest

    Для начала - выучить максимальные диапазоны, которые вмещает переменная типа int. В вашем случае - в неё не влезает переданное число, ибо диапазон значений знакового int - смотрите: -32767 - 32767, подробности: http://www.cplusplus.com/reference/climits/

    Понимаете, да? Либо расширяйте тип до long, либо (что будет лучшим вариантом) - ознакомьтесь с началами.
     
    Maks2186 нравится это.
  11. brokly

    brokly Гик

    Вам уже дали правильный совет. Объявите: uint32_t vol
     
    Maks2186 нравится это.