Помогите довести до ума.

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

  1. 127486

    127486 Нуб

    Всем доброго времени суток.
    Помогите доработать код.

    Код (Text):

    // библиотека для работы I²C
    #include <Wire.h>
    // библиотека для работы с модулями IMU
    #include <TroykaIMU.h>

    // создаём объект для работы с акселерометром
    Accelerometer accel;

    void setup()
    {
      // открываем последовательный порт
      Serial.begin(115200);
      // выводим сообщение о начале инициализации
      Serial.println("Start");
      // инициализация акселерометра
      accel.begin();
      // устанавливаем чувствительность акселерометра
      // 2g — по умолчанию, 4g, 8g
      accel.setRange(RANGE_2G);
      // выводим сообщение об удачной инициализации
      Serial.println("Finish");
    }

    void loop()
    {
      // вывод направления и величины ускорения в м/с² по оси X
      Serial.print(accel.readAX());
      Serial.print("\t");
      // вывод направления и величины ускорения в м/с² по оси Y
      Serial.print(accel.readAY());
      Serial.print("\t\t");
      // вывод направления и величины ускорения в м/с² по оси Z
      Serial.print(accel.readAZ());
      Serial.print("\t\t");
      Serial.println("");
      delay(100);
      /*
      // вывод направления и величины ускорения в м/с² по X, Y и Z
      float x, y, z;
      accel.readAXYZ(&x, &y, &z);
      Serial.print(x);
      Serial.print("\t\t");
      Serial.print(y);
      Serial.print("\t\t");
      Serial.print(z);
      Serial.println("");
      delay(1000);
      */
    }

     


    Просидел всю жизнь сознательную на паскале, а тут такое.

    Сами вопросы:
    Мне необходимо чтобы датчик работал не в цикле, а присылал данные по запросу (hAA).
    Могу ли я в реальном времени управлять чувствительностью датчика?
    Могу ли я в реальном времени провести калибровку сенсора с сохранением данных?

    Программа работы с датчиком, будет на компе по виндой крутиться, общение по эзернет.
     
  2. DIYMan

    DIYMan Guest

    1. Ясно;
    2. Да;
    3. Да.

    Хинт: читаете из Serial, когда в его буфере есть данные. Если прочитали строку (до символа '\n') - то смотрите, что за команда, по результату команды - делаете что нужно. Вот, набросал за 5 минут, дальше уже сами, плз:

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

    bool hasCommand()
    {
      while(Serial.available())
      {
        char ch = Serial.read();
        if(ch == '\r')
          continue;
     
        if(ch == '\n')
          return command.length();
     
        command += ch;
      }
      return false;
    }

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

    void loop()
    {
      if(hasCommand())
      {
        if(command == F("measure"))
        {
          Serial.println(F("START MEASURE!"));
        }
        else
        if(command.startsWith(F("calibrate")))
        {
          const char* value = strstr(command.c_str(),"="); // ищем разделитель, приходит "calibrate=1"
          if(value)
          {
            value++;
            int calibrationFactor = atoi(value);
            Serial.print(F("CALIBRATE SENSOR, FACTOR IS: "));
            Serial.println(calibrationFactor);
          }
        }
        command = "";
      }
    }
    Закачайте в дуньку, и попробуйте повводить в мониторе порта (настройка передачи конца строки должна быть "NL & CR" - это в окошке монитора порта настраивается) строки "measure" и "calibrate=1234"
     
    MihaNN52, Tomasina и arkadyf нравится это.
  3. 127486

    127486 Нуб

    Спасибо добрый человек.
    Щас пообедаю и начну ковырять.