запись по символьно из порта в массив - Arduino

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

  1. xoyushka

    xoyushka Нуб

    требуется решить задачу не знаю как.
    в порт записывается строка: Led_2_6666 (_ ) - пробел)
    как прочитать строку по символьно и записать значения в массивы
    если led_2 то mLed2[]={6,6,6,6}
    если led_3 то mLed3[]={6,6,6,6}
     
  2. DIYMan

    DIYMan Guest

    Вам сначала надо вычитать строку полностью, до терминатора (признак окончания строки), потом уже - разбирать её. Навскидку как-то так:

    Код (C++):
    String dataFromPort;

    void doParse()
    {
        if(!dataFromPort.length())
            return;
     
        // тут разбираете строку, как вам надо
        int idx = dataFromPort.indexOf(' ');
        if(idx > -1)
        {
            String command = dataFromPort.substring(0,idx);
            dataFromPort = dataFromPort.substring(idx+1);
            if(command == "Led")
            {
                // тут парсим остаток строки
                idx = dataFromPort.indexOf(' ');
                if(idx > -1)
                {
                    int ledIndex = dataFromPort.substring(0,idx).toInt();
                    dataFromPort = dataFromPort.substring(idx+1);
                    switch(ledIndex)
                    {
                        case 1:
                        break;
                     
                        case 2:
                        break;
                     
                        // .... и т.д.
                    }
                 
                }
            }
        }
    }

    void loop()
    {
        while(Serial.available())
        {
            char ch = Serial.read();
            if(ch == '\n' || ch == '\r')
            {
                doParse();
                dataFromPort = "";
            }
            else
                dataFromPort += ch;
        }
    }
    Остальное - допишете, я не сомневаюсь ;) Да и вообще - не стоит копировать мой код, лучше написать свой, а приведённое - использовать только для анализа, не более.

    З.Ы. Для вставки кода есть специальный значок в редакторе ;)
     
    arkadyf нравится это.
  3. DIYMan

    DIYMan Guest

    Скажу честно: лучший комментарий к каждой строке - это учебник по С++. Приведённый мной код - крайне прозрачен, и если у вас с ним проблемы - наверное, лучше начать с самых основ.
     
  4. xoyushka

    xoyushka Нуб

    как запсать то в массив символы?
     
  5. xoyushka

    xoyushka Нуб

    подскажите как из dataFromPort =1234 записать в int array[]={1,2,3,4}
     
  6. DetSimen

    DetSimen Guest

    попробуй оператор присваивания применить к каждому элементу массива
     
  7. ostrov

    ostrov Гуру

    array[0]=dataFromPort/1000;
    И так далее. Правда, начиная с сотен формула чуть сложнее. )
     
  8. Igor68

    Igor68 Гуру

    Код (C++):

    byte array[4];
    int cnt = 0;
    int rs;
    int dv = 1000;
    int prs = dataFromPort;
    while(cnt < 4)
    {
       rs = prs / dv;
       prs = prs - rs * dv;
       array[cnt] = (byte)(rs);
       dv /= 10;
       cnt++;
    }
     
    Приблизительно так... ну как пример