помогите пожалуйста с SD картой

Тема в разделе "Arduino & Shields", создана пользователем SFM, 10 май 2017.

  1. serg_admin

    serg_admin Гик

    Можно попробовать лог каждый раз закрывать, но может тормозить.
    Шилда для SD у меня сейчас нет.
    Код (C++):
    #include <SPI.h>
    #include <SD.h>

    #define CMD_MAX_TIME 10000
    const int chipSelect = 10;
    File logFile;
    void setup()
    {
      pinMode(SS, OUTPUT);
      SD.begin(chipSelect);
      logFile = SD.open("log.log", FILE_WRITE);
      Serial.begin(115200);
    }

    void loop()
    {
      File dataFile = SD.open("cat.cnc");
      if (dataFile){
        while (dataFile.available())
        {
          char rByte = dataFile.read();
          Serial.write(rByte);
          logFile.close();
          logFile = SD.open("log.log", FILE_WRITE);
          logFile.println(rByte); // Логирование
          if (rByte == 13)
          {
            rByte = Serial.read();
            logFile.println(rByte); // Логирование
            uint32_t time = millis();
            while ((rByte != 111) && ((time - millis()) < CMD_MAX_TIME)) { // Выход по timeOut
              rByte = Serial.read();
              logFile.println(rByte); // Логирование
            }
          }
        }
        dataFile.close();
      }
      else {Serial.println("error opening cat.cnc");}
    }
     
  2. SFM

    SFM Нерд

    не получтся. не нашол у себя 2 уно или 2 uart переходника. 2 лог файла получены за 2 захода и нет привязки по времени. могу через мсворд вбросить в 2 таблицы и обеденить, но ето ......
     
  3. SFM

    SFM Нерд

    спасибо заливаю. с шилдом в свое время тоже поигрался. интересно было сделать самому. сделал а он не работает :( сломал голову, и на делитянях собирал и на полевиках ..... не работает :( а потом подарили фотык с картой памяти на 2 гб о чудо карта опозналась
     
  4. serg_admin

    serg_admin Гик

    Можно здесь timeOut меньше поставить. тогда проблемы быстрее будет проскакивать. Но должно быть не короче времени выполнения самой длинной команды.
    Код (C++):
    #define CMD_MAX_TIME 10000
     
  5. SFM

    SFM Нерд

    лог получился странный. при 2 попитке повредил файловую систему. сейчас востановлю и пришлю файл. судя по всему автономке скеч ненравится
     
  6. SFM

    SFM Нерд

    лог реально странный попробую тайм 5000 поставить
     

    Вложения:

    • LOG.txt
      Размер файла:
      10,8 КБ
      Просмотров:
      472
  7. serg_admin

    serg_admin Гик

    Я могу завтра попробовать вывести лог через Software Serial.
     
  8. SFM

    SFM Нерд

    огромное спасибо. сейчас немного пороюсь в коде. хотя шанс на успех низкий
     
  9. SFM

    SFM Нерд

    извините протупил со скоростью. код прокручивается, только не ждет ответа станка. а в лог ересь пишится. без ожидания ответа, код до конца прокручивается
     
  10. serg_admin

    serg_admin Гик

    В лог вроде все как положено пишется.
    А то что проскакивает моя ошибка.
    Код (C++):
    #include <SPI.h>
    #include <SD.h>

    #define CMD_MAX_TIME 10000
    const int chipSelect = 10;
    File logFile;
    void setup()
    {
      pinMode(SS, OUTPUT);
      SD.begin(chipSelect);
      Serial.begin(115200);
    }

    void loop()
    {
      File dataFile = SD.open("cat.cnc");
      if (dataFile){
        while (dataFile.available())
        {
          char rByte = dataFile.read();
          Serial.write(rByte);
          logFile = SD.open("log.log", FILE_WRITE);
          logFile.print(rByte); // Логирование
          logFile.close();
          if (rByte == 13)
          {
            logFile = SD.open("log.log", FILE_WRITE);
            logFile.println(); // Логирование
            logFile.close();
            rByte = Serial.read();
            if (rByte != -1)
            {
              logFile = SD.open("log.log", FILE_WRITE);
              logFile.print(rByte); // Логирование
              logFile.close();
            }
            uint32_t time = millis();
            while ((rByte != 111) && ((millis() - time) < CMD_MAX_TIME)) { // Выход по timeOut
              rByte = Serial.read();
              if (rByte != -1)
              {
                logFile = SD.open("log.log", FILE_WRITE);
                logFile.print(rByte); // Логирование
                logFile.close();
              }
            }
            logFile = SD.open("log.log", FILE_WRITE);
            logFile.println(); // Логирование
            logFile.close();
          }
        }
        dataFile.close();
      }
      else {Serial.println("error opening cat.cnc");}
    }
    Теперь понятно почему там OK нет
     
  11. SFM

    SFM Нерд

    сейчас залью. теперь понимаю почему нихто не хочет писать. проще купить готовое чем так мучится.
     
  12. serg_admin

    serg_admin Гик

    Если бы была вся периферия под руками было бы значительно быстрее.
     
  13. SFM

    SFM Нерд

    продолжает прокручиватся сам. сейчас посмотрю что в логе
    G71



    M08



    G0 F500



    G1 F150



    M05 S3000



    M05



    G0 Y0.75 X8



    M03



    G1 Y0.75 X8.25



    M05
     
  14. serg_admin

    serg_admin Гик

    странно
    поменяй пока
    Код (C++):
    while ((rByte != 111) && ((millis() - time) < CMD_MAX_TIME))
    на
    Код (C++):
    while (rByte != 111 )
    Может тамаут криво работает
     
    SFM нравится это.
  15. SFM

    SFM Нерд

    сейчас попробую
     
  16. SFM

    SFM Нерд

    скорость резко упала, не прокручиватся сам *без станка. жду "тупика" или конца кода
     
  17. serg_admin

    serg_admin Гик

    Все понял, это оптимизатор. Было уже такое.
    Ну ладно, пока тайм оут не нужен.
     
  18. serg_admin

    serg_admin Гик

    Карточка у тебя какого класса?
     
  19. SFM

    SFM Нерд

    дождусь уже конца :) код прокручивается. так далеко еще не доходил
     
  20. serg_admin

    serg_admin Гик

    Как думаешь. Твоя сборка (карт-ридер) может давать помехи при 4-х мегагерцах