Снятие данных с акселерометра и их запись на флешку

Тема в разделе "Arduino & Shields", создана пользователем luksor666, 16 фев 2015.

  1. luksor666

    luksor666 Нуб

    Я хочу подключить подключить arduino pro mini к телефонному аккумулятору, а к pro mini картридер и гироскоп(mpu 6050) проблема оказалась с кодом я не знаю как написать код что бы все записывалось на флешку, мне нужно что бы в текстовый документ записывались ускорения по 3м осям и данные с акселерометра.Вот мой четные попытки( Помогите. Сделал так подключил гироскоп, картридер, pro, аккум. Проверяю результат карта вообще не работает. Что за бред??
    Код (Text):

    /*
    **pro mini + mpu 6050:
    GND=GND, VIN=VCC, SDA=A4, SCL=A5

    **pro mini + sd card module:
    GND=GND, 5V=VCC, SDCS=D4, MOSL=D11, SCK=D13, MISO=D12

    **pro mini + akkum:
    GND=GND, RAW=5V
    */

    #include "SD.h"
    #include "Wire.h"                
    #include "I2Cdev.h"
    #include "MPU6050.h"
    MPU6050 accelgyro;
    File MPUFile;  // Файл в который будут записаны показания с датчика

    int16_t ax, ay, az;  // define accel as ax,ay,az
    int16_t gx, gy, gz;  // define gyro as gx,gy,gz
               
    #define LED_PIN 13
    bool blinkState = false;

    void setup() {
      Wire.begin();      // присоединиться к шине I2C
      Serial.begin(38400);    //  инициализировать последовательную связь
      Serial.println("Initializing I2C devices...");
      accelgyro.initialize();  

      // проверка соединения
      Serial.println("Testing device connections...");
      Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");

      pinMode(LED_PIN, OUTPUT);  // настроить LED pin
      // Инициализируем СД карту
      Serial.print("Initializing SD card...");
      if (!SD.begin(4)) {
        Serial.println("initialization failed!");
        return;}
       
      Serial.println("initialization done.");
      // Открываем (или создаем, если его нет) файл для записи данных с датчика
      MPUFile = SD.open("Test.txt", FILE_WRITE);
         
            if (MPUFile){
               accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
               Serial.print("a/g:\t");
               MPUFile.println(ax);
               Serial.print("\t");
               MPUFile.print(ay);
               Serial.print("\t");
               MPUFile.print(az);
               Serial.print("\t");
               MPUFile.print(gx);
               Serial.print("\t");
               MPUFile.print(gy);
               Serial.print("\t");
               MPUFile.println(gz);
               
               // Закрываем файл:
               MPUFile.close();
               Serial.println("done.");
         }
    }

    void loop() {
    }
     
    делал по этому примеру, тут только датчик другой
    Код (Text):
    #include <SD.h>
    #include <dht.h>
    DHT sensor = DHT();  // Датчик температуры и влажности
    File sensorDataFile;  // Файл в который будут записаны показания с датчика
    char* SENSOR_DATA_FILE_NAME = "1.txt";  // Название файла

    void setup()
    {
      Serial.begin(9600);
      // Подключаем сенсор к 0 аналоговому порту
      sensor.attach(A0);
      // Ждем готовность сенсора
      delay(1000);
      // SPI SS пин должен быть OUTPUT
      pinMode(10, OUTPUT);
     
      // Инициализируем СД карту
      Serial.print("Initializing SD card...");
      if (!SD.begin(4)) {
        Serial.println("initialization failed!");
        return;
      }
      Serial.println("initialization done.");
     
      // Открываем (или создаем, если его нет) файл для записи данных с датчика
      sensorDataFile = SD.open(SENSOR_DATA_FILE_NAME, FILE_WRITE);
      for (int i = 0; i < 10; i++)
      {
        // Проводим 10 замеров
        sensor.update();
        // Записываем удачные результаты в файл и в порт
        if (sensor.getLastError() == DHT_ERROR_OK && sensorDataFile)
        {
          char msg[128];
          sprintf(msg, "Current humidity = %d%% temperature = %dC",
                  sensor.getHumidityInt(), sensor.getTemperatureInt());
          Serial.println(msg);
          sensorDataFile.println(msg);
        }
        delay(2000);
      }
      sensorDataFile.close();
      Serial.println("Finished.");
    }

    void loop()
    {
    }
     
  2. luksor666

    luksor666 Нуб

  3. Megakoteyka

    Megakoteyka Оракул Модератор

    Примеры библиотеки SD запускать пробовали? Например, datalogger.
     
  4. luksor666

    luksor666 Нуб

    Да все примеры работали:
    Примеры для гироскопа работали, примеры для sd все работали.
    Но все это работало отдельно! А когда все это совместил работать не стало. Ошибки компилятор не выводит. А результата нет все вместе подключил сначала на флешку просто ничего не записалось, а при второй попытке она вообще перестала работать! Комп эту флешку вообще не видит, телефон видит, через скетчь cardinfo просит форматировать(типа раздел не может найти). Но это ладно флешку другую возьму, а вот что с кодом? Он правильный? Флешка была на 16гб, sdhc
     
  5. vvr

    vvr Инженерище

    Код (Text):
    MPUFile = SD.open("Test.txt", FILE_WRITE);
       
            if (MPUFile){
              accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
              Serial.print("a/g:\t");
              MPUFile.println(ax);
              Serial.print("\t");
              MPUFile.print(ay);
              Serial.print("\t");
              MPUFile.print(az);
              Serial.print("\t");
              MPUFile.print(gx);
              Serial.print("\t");
              MPUFile.print(gy);
              Serial.print("\t");
              MPUFile.println(gz);
             
              // Закрываем файл:
              MPUFile.close();
              Serial.println("done.");
    в луп перекиньте
     
  6. vvr

    vvr Инженерище

    Попробуй так

    Код (Text):
    MPUFile = SD.open("Test.txt", FILE_WRITE);
    if (MPUFile)
    {
      Serial.println("Test.txt:");
      while (dataFile.available())
      {
        accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
        Serial.print(ax);
        Serial.print("\t");
        Serial.print(ay);
        Serial.print("\t");
        Serial.println(az);
      }
      MPUFile.close();
    }
     
  7. luksor666

    luksor666 Нуб

    Не работает, а это (Serial.print) не в ком порт выводит?
    Я просто плохо понимаю программирование.
    Может конфликт каких нибудь модулей?
     
  8. vvr

    vvr Инженерище

    попробуй так, у меня просто MPU ещё не приехал и проверить не могу
    Код (Text):

    #include "SD.h"
    #include "Wire.h"              
    #include "I2Cdev.h"
    #include "MPU6050.h"
    MPU6050 accelgyro;
    File MPUFile;
    int16_t ax, ay, az;
    int16_t gx, gy, gz;

    void setup() {
      Wire.begin();    
      Serial.begin(9600);  
      Serial.println("Initializing I2C devices...");
      accelgyro.initialize();
      Serial.println("Testing device connections...");
      Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
      Serial.print("Initializing SD card...");
      if (!SD.begin(4)) {
        Serial.println("initialization failed!");
        return;
      }
      Serial.println("initialization done.");
    }

    void loop()
    {
      accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
      MPUFile = SD.open("Test.txt", FILE_WRITE);
      if (MPUFile)
      {
        MPUFile.write(ax);
        MPUFile.write(ay);
        MPUFile.write(az);
        MPUFile.write(gx);
        MPUFile.write(gy);
        MPUFile.write(gz);
        Serial.print(ax);
        Serial.print("\t");
        Serial.print(ay);
        Serial.print("\t");
        Serial.print(az);
        Serial.print("\t");
        Serial.print(gx);
        Serial.print("\t");
        Serial.print(gy);
        Serial.print("\t");
        Serial.println(gz);
      }
      MPUFile.close();
    }
     
     
  9. luksor666

    luksor666 Нуб

    Попробовал не работает. Но я сомневаться начал что дело в коде.Дело в том что карта которую комп не видит на 16гб, он через скетч cardinfo показывает что ее нужно форматировать! А когда я пытался использовать другую карту на 32мб FAT(должно быть вроде FAT 16 или 32) скетч cardinfo вообще ее не видит, а компьютер нормально видит. Вообщем я не понимаю что не так(( Мне на одном форуме написали что возможно это конфликт модулей(лишний модуль подключил) , сказали оф документы почитать только не сказали по чему док почитать. Смотрел все библиотеки которые подключал, все даташиты ничего не нашел. На днях попробую другую карту с преподом может он что то скажет. Спасибо вам за помощь. Если хотите могу потом сюда написать результат что было не так) Если выясним
     
  10. vvr

    vvr Инженерище

    ну конечно отпишись