Пишем скетчи, проектируем принципиальные схемы

Тема в разделе "Сделаю проект", создана пользователем Kamikadze, 28 мар 2019.

  1. Kamikadze

    Kamikadze Гик

    Пишем скетчи как для Ардуино так и для МК AVR (atmega128, atmega2560 и пр.)
    По мимо С++, пишем скрипты для VBA, 1C(внешние обработки).
    Проектируем принципиальные схемы TTL, высылаем как конечный продукт так и файлы для дальнейшего изготовления (Gerber)
    Сроки напрямую зависят от сложности проекта.
    Размер предоплаты и ее наличие так же зависит от объема работ.

    e-mail: unnnder@mail.ru
    сайт: www.ooosmartfarm.ru

    Портфолио:
    [​IMG] [​IMG] [​IMG]
     
    АндрейТир нравится это.
  2. Добрый день , нужно что бы данные которые сейчас записываются по кнопке, записывались каждый раз когда начинается запись в новый файл.
    Сколько будет стоить ?



    Код (C++):

    // библиотека для работы I²C
    #include <Wire.h>
    // библиотека для работы с модулями IMU
    #include <TroykaIMU.h>
    // библиотека для работы с устройствами по SPI
    #include <SPI.h>
    // библиотека для работы с SD-картой
    #include <SD.h>
    // библиотека для работы с GPS устройством
    #include <TroykaGPS.h>
    // создаём объект класса GPS и передаём в него объект Serial1
    GPS gps(Serial1);
    // создаём объект для работы с акселерометром
    Accelerometer accel;


    // пин светодиода
    #define LED_PIN             9

    // пин кнопки
    #define BUTTON_PIN          A4

    // пин CS micro-sd карты
    #define SD_CHIP_SELECT_PIN  8
    // интервал времени записи данных на карту
    #define INTERVAL            100
    // задаём размер массива для времени, даты, широты и долготы
    #define MAX_SIZE_MASS 16
    // массив для хранения текущего времени
    char time[MAX_SIZE_MASS];
    // состояние записи на карту памяти
    bool stateRec = false ;
    // запоминаем текущее время
    long startMillis = millis();
    // счётчк записи
    int counter = 0;

    void setup()
    {

    // устанавливаем светодиод в режим выхода
      pinMode(LED_PIN, OUTPUT);
      // устанавливаем кнопку в режим входа
      pinMode(BUTTON_PIN, INPUT_PULLUP);
     
      Serial1.begin(115200);
      delay(100);
       Serial1.write("$PMTK220,200*2C\r\n");
       accel.begin();

     
     
     
      SD.begin(SD_CHIP_SELECT_PIN);
     
    }
    void loop()
    {
      bool bp = false;
      // Фиксируем нажатие кнопки
      if (digitalRead(BUTTON_PIN)) {
        // меняем состояние «запись» / «не запись» на карту памяти
        stateRec = !stateRec;
         delay(10);
        // меняем состояние светодиода индикации
        digitalWrite(LED_PIN, stateRec);
        bp = true;
      }
       gps.readParsing();
       if (millis() - startMillis > INTERVAL && stateRec) {
              // сохраняем данные GPS и акселерометра на карту памяти
              saveSD(bp);
              // запоминаем текущее время
              startMillis = millis();
            }
     
    }

    // функция сохарение данных на карту памяти
    void saveSD(bool bp) {
    File dataFile = SD.open("dataGPS.csv", FILE_WRITE);
      if (bp){
     
        counter=0;
        ;
      }
     
    //секундомер


    static unsigned long x = 0;
    if (bp)
    x = millis();
    int number = ((millis() - x) / 1000) % 200;




    Serial.println( number);
       
           
      // если файл существует и открылся
      if (dataFile) {
         dataFile.print(counter++);
        dataFile.print("\t");
         dataFile.println(number);
     
     
       
       
        dataFile.close();
     
      }
      }
     
  3. a1000

    a1000 Гуру

    Как-то не совсем понятно сформулирована задача. Уточните что именно вы хотите.
     
  4. Получается сейчас запись идёт в один и тот же файл , а нужно что бы при нажатии кнопки создавался новый файл !
     
  5. Порядок работы : Нажимаю кнопку , создаётся файл ,открывается , начинается запись секундомера , нажимаю кнопку, запись останавливается. Следующие нажатие кнопки будет продолжаться запись в тот же файл с конца .
    А нужно что бы запись начиналась в новый файл.
     
  6. Kamikadze

    Kamikadze Гик

    А он у вас вообще корректно работает? Я местами логику в скетче потерял, особенно с переменной Х. Ну да ладно
    вы наверное что-то типо этого хотели увидеть
    Код (C++):
    // библиотека для работы I²C
    #include <Wire.h>
    // библиотека для работы с модулями IMU
    #include <TroykaIMU.h>
    // библиотека для работы с устройствами по SPI
    #include <SPI.h>
    // библиотека для работы с SD-картой
    #include <SD.h>
    // библиотека для работы с GPS устройством
    #include <TroykaGPS.h>
    // создаём объект класса GPS и передаём в него объект Serial1
    GPS gps(Serial1);
    // создаём объект для работы с акселерометром
    Accelerometer accel;
    //
    char StrFile[80];
    int FileNumber = 0;


    // пин светодиода
    #define LED_PIN             9

    // пин кнопки
    #define BUTTON_PIN          A4

    // пин CS micro-sd карты
    #define SD_CHIP_SELECT_PIN  8
    // интервал времени записи данных на карту
    #define INTERVAL            100
    // задаём размер массива для времени, даты, широты и долготы
    #define MAX_SIZE_MASS 16
    // массив для хранения текущего времени
    char time[MAX_SIZE_MASS];
    // состояние записи на карту памяти
    bool stateRec = false ;
    // запоминаем текущее время
    long startMillis = millis();
    // счётчк записи
    int counter = 0;

    void setup()
    {

    // устанавливаем светодиод в режим выхода
      pinMode(LED_PIN, OUTPUT);
      // устанавливаем кнопку в режим входа
      pinMode(BUTTON_PIN, INPUT_PULLUP);
     
      Serial1.begin(115200);
      delay(100);
       Serial1.write("$PMTK220,200*2C\r\n");
       accel.begin();

     
      SD.begin(SD_CHIP_SELECT_PIN);
    }
    void loop()
    {
      bool bp = false;
      // Фиксируем нажатие кнопки
      if (digitalRead(BUTTON_PIN)) {
        // меняем состояние «запись» / «не запись» на карту памяти
        stateRec = !stateRec;
        FileNumber++;
         delay(10);
        // меняем состояние светодиода индикации
        digitalWrite(LED_PIN, stateRec);
        bp = true;
      }
       gps.readParsing();
       if (millis() - startMillis > INTERVAL && stateRec) {
              // сохраняем данные GPS и акселерометра на карту памяти
              saveSD(bp);
              // запоминаем текущее время
              startMillis = millis();
            }
     
    }

    // функция сохарение данных на карту памяти
    void saveSD(bool bp) {
    sprintf (StrFile, "%s_%d.csv", "dataGPS", FileNumber);
    File dataFile = SD.open(StrFile, FILE_WRITE);
      if (bp){
     
        counter=0;
        ;
      }
    //секундомер


    static unsigned long x = 0;
    if (bp)
    x = millis();
    int number = ((millis() - x) / 1000) % 200;




    Serial.println( number);
     
           
      // если файл существует и открылся
      if (dataFile) {
         dataFile.print(counter++);
        dataFile.print("\t");
         dataFile.println(number);
     
     
     
     
        dataFile.close();
     
      }
      }
     
    АндрейТир нравится это.
  7. Да вроде то что нужно , будет нумерация файлов по нажатию ?
     
  8. Kamikadze

    Kamikadze Гик

    Да, только вот сюда вставьте итерацию
    Код (C++):
    if (millis() - startMillis > INTERVAL && stateRec) {
              // сохраняем данные GPS и акселерометра на карту памяти
              FileNumber++;
              saveSD(bp);
              // запоминаем текущее время
              startMillis = millis();
            }
    а из предыдущего фрагмента уберите, и название файла лучше сократить, вместо
    Код (C++):
    sprintf (StrFile, "%s_%d.csv", "dataGPS", FileNumber);
    лучше
    Код (C++):
    sprintf (StrFile, "%s_%d.csv", "dGPS", FileNumber);
    Потому что библиотека <SD.h>, с длинными именами файлов не дружит
     
    АндрейТир нравится это.
  9. Спасибо:) Вот так получилось то что мне нужно , если поставить без условия он каждую строку данных в новый файл записывал .
    Код (C++):
     if (millis() - startMillis > INTERVAL && stateRec) {
              // сохраняем данные GPS и акселерометра на карту памяти
               if (bp){
                 FileNumber++;
       }
              saveSD(bp);
             
     
    Последнее редактирование: 7 апр 2019
  10. Gelo

    Gelo Нуб

    На ровный, бетонный пол клеим криволинейную линию , к примеру желтым скотчем, метров 50. Человек садится за руль небольшой машинки (полотер, погрузчик и т.д.) и должен ровно проехать по этой линии, чтобы она была под продольной осью "машинки" и не съезжал с нее.
    Требуется используя ИСКРА НЕО, SD картридер, тройка шилд, а так же любые из датчиков линий (аналоговый или цифровой, или восьмиканальный датчик линии Zelo модуль) написать скетч , чтобы устройство отслеживало вышеуказанную линию, а если с нее съезжали записывало на sd карту к примеру:
    1 съезд-влево-2 секунды(время от ухода до возвращения на осевую линию),
    2 съезд-право- 4 сек.
    По идее я в конце должен взять sd вставить в комп и прочитать эту информацию, что бы к примеру из 10 человек выбрать с минимальным количеством съездов или в последствии видеть улучшение качества езды одного и того же человека.