Нужна помощь в программировании.

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

  1. Rinox

    Rinox Нуб

    Помогите разобраться в данном скетче, т.к. нужно срочно сделать прибор для считывания ускорения и последующем снятии данных с eeprom памяти ардуино. Прошу не закидывать меня камнями, времени на изучения среды нет.

    Сам прибор представляет из себя arduino nano на CH340g и модуля MPU6050. Цель - закрепить всё в корпусе ракеты, запустить и потом построить график ускорения.
    От знакомого, который делал практически такую же работу достался скетч, но, к сожалению, сам я разобраться не могу и поэтому прошу помощи здесь.


    Сам скетч:


    Код (C++):
    #include "Wire.h"
    #include "I2Cdev.h"
    #include "MPU6050.h"
    #include "EEPROM.h"

    MPU6050 accelgyro;

    int16_t ax, ay, az;
    int16_t gx, gy, gz;
    int p;
    int i;
    int switchPin=8;
    int ledPin=13;
    int hi;
    int low;

    void setup() {
    pinMode(switchPin,INPUT);
    pinMode(switchPin,OUTPUT);
    Serial.begin(9600);
    accelgyro.initialize();
    delay(1000);   //замедление
    }

    void loop() {
    i=0;
    p=0;
    do{
      if(digitalRead(switchPin)==HIGH)
        {
        digitalWrite(ledPin, HIGH);
        Serial.println("eee");
         p=0;
         do{
           accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
           az=int(az)+18350; // число > 255 разбиваем на 2 байта (макс. 65536)
            byte hi = highByte(az); // старший байт
            byte low = lowByte(az); // младший байт
            EEPROM.write(p, hi);  // записываем в ячейку 1 старший байт
            p=p+1;
            EEPROM.write(p, low); // записываем в ячейку 2 младший байт
            p=p+1;
            delay(200);
           }while(p<1024);
           p=0;
           i=0;
          }
       else
       {
        digitalWrite(ledPin, LOW);
        hi=EEPROM.read(p);
        p=p+1;
        low=EEPROM.read(p);
        int n = word(hi, low);
        n=n-18350;
        Serial.print(i);
        Serial.print("\t");
        Serial.println(n);
        p=p+1;
        i=i+1;
       }
    }while(p<1024);
    }


    Также не знаю, как запустить программу отдельно от компьютера при питании от кроны.
    Собственно весь вопрос в том, как начать запись показаний и как потом их снять.
     
  2. BAR__MEN

    BAR__MEN Вселенский Няш Администратор

    От кроны программа работает так же как и от компьютера
    На восьмом пине висит переключатель (судя по коду - с фиксацией)
    Когда на восьмом пине 5 вольт - записываются показания в eeprom, если же на пине замля (т.е 0 вольт) - считываются данные из eeprom и отправляются в serial порт
     
    Rinox нравится это.
  3. Rinox

    Rinox Нуб

    А что может представлять из себя переключатель?
     
  4. BAR__MEN

    BAR__MEN Вселенский Няш Администратор

    Тумблер, или кнопка с фиксацией..
     
  5. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Может это какой-то контакт , срабатывающий при ускорении. Включили прогу - крутит вхолостую на вывод. Началось ускорение - пошла записывать пока ускоряется. Может блокировка пока ракета не вышла из направляющих - обычный нажимной микрик.. Короче - экономит память от ненужной записи. А светодиод - помогает искать ракету в темноте.
    ПС. Только не понимаю, зачем в сетапе контакт переключателя конфигурируется на вывод. Он ведь работать не будет. Или я не шарю ?
     
    Последнее редактирование: 8 апр 2019
  6. Rinox

    Rinox Нуб

    Получается, mpu 6050 подключается на 3.3v, a4,a5,gnd. Батарея в свою очередь плюсом подключается на vin и через тумблер на 8 pin, а минус кидается на этот же gnd[​IMG]
     
  7. Rinox

    Rinox Нуб

    думаю, чтобы не забивать память ненужными данными питание подавалось непосредственно перед запуском.
     
  8. BAR__MEN

    BAR__MEN Вселенский Няш Администратор

    Вроде схема такая.. Untitled Sketch_bb.png
     
    Rinox нравится это.
  9. Rinox

    Rinox Нуб

    Замечательно! Спасибо большое, теперь во всём разобрался.
     
  10. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Как спец говорю - поставьте вместо зеленого провода с микрика резистор 100 - 1000 ом. Береженого бог бережет.
     
    BAR__MEN нравится это.
  11. BAR__MEN

    BAR__MEN Вселенский Няш Администратор

    Точно.. Про резистор я подумал и забыл:confused: