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

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

  1. serg_admin

    serg_admin Гик

    Нет вы лучше протокол обмена на карточку пишите. Просто откройте еще один файл и пишите в него все, что отправили и получили. А если у Вас Leonardo то можно просто на второй Serial выводить.
     
  2. SFM

    SFM Нерд

    у меня бюджетненько. ардуино уно или про мини *2 шилда в наявности. и промини планировал на автономку. станок жлобски сделан из 4 лексмарков, и лазера от двд *0.5 вт. все шилды електроника механика - ручная работа. а вот с програмами :( проблема будет закатать лог на карту :(
    сейчас оброс електроникой авыглядел както так
    http://os1.i.ua/3/7/14123877_5cccb4f5.jpg http://os1.i.ua/3/7/14154167_2adcda72.jpg
     
    Последнее редактирование: 10 май 2017
  3. serg_admin

    serg_admin Гик

    Почему проблема закатать лог? Глаза боятся руки делают.
    Там 3-4 строчки.

    Если ты все это собрал то и программу соберешь.
     
  4. serg_admin

    serg_admin Гик

    Что движками управляет? Я только материнку вижу.
     
  5. SFM

    SFM Нерд

    железо - не проблема, а вот програма.
    нужно в лог загнать одновременно RX ? TX ?
    вариант внаглую поцепить еще 2 ардуины на порт и с монитора порта выдрать текст. ето - запросто. а написать -шансов мало
     
  6. SFM

    SFM Нерд

    http://os1.i.ua/3/7/14005883_cf4efef9_5757c1fb.jpg шилд старый. сейчас он оброс рассыпухой. прийду с работы могу сфотографировать. если интересно могу сбросить ссылку на фотоальбом. там часть моих работ. восновном ремонт и чуть чуть проектов на ардуино
     
    Последнее редактирование: 10 май 2017
  7. serg_admin

    serg_admin Гик

    Код (C++):
    #include <SPI.h>
    #include <SD.h>
    const int chipSelect = 10;
    File logFile;

    void setup()
    {
      logFile = SD.open("log.log", FILE_WRITE);
      Serial.begin(115200);
    }

    void loop()
    {
      pinMode(SS, OUTPUT);
      if (!SD.begin(chipSelect))
      {
         //Serial.println("Card failed, or not present"); return;
      }
      File dataFile = SD.open("cat.cnc");
      if (dataFile){
        while (dataFile.available())
        {
          char rByte = dataFile.read();
          Serial.write(rByte);
          logFile.println(rByte); // Логирование
          if (rByte == 13)
          {
            rByte = Serial.read();
            logFile.println(rByte); // Логирование
            while (rByte != 111) {
              rByte = Serial.read();
              logFile.println(rByte); // Логирование
            }
          }
        }
        dataFile.close();
      }
      else {Serial.println("error opening cat.cnc");}
    }
     
     
  8. serg_admin

    serg_admin Гик

    А, что за прошивка на нем? Туда нельзя SD карту приклеить?
     
  9. SFM

    SFM Нерд

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

    SFM Нерд

    так и не скажу, пока не приду домой. самая последняя которая поддерживает уно-мини. там все ноги заняты, автономку на сериал пробую навесить.
    а нету команды, которая б построчно считывала карту ? типа прочесть-отправить в порт 5, 10.... строку ? нет ответа еще раз отправить 5 строку, нет ответа .....
    уже жалею что полез. 2 недели рою.
     
  11. serg_admin

    serg_admin Гик

    Позиционировать можно только побайтно. Но строчку можно держать в памяти, вместо того, что бы читать каждый раз. Но лучше лог посмотреть.

    Он хоть начинал работать. В смысле первые несколько команд выполнял?
     
  12. SFM

    SFM Нерд

    пару десятков строчек исполняет. выбрасивает ошибки, идет дальше, но на чем то стопорится.

    и с портом игрался ардуину с картой в юсб оно код я "ок" она мне следующий код.... работало как часы а вот со станком - траблы
     
  13. SFM

    SFM Нерд

    тестирую на прошивке Grbl 0.8c
    к сожалению файл так и не был создан на карте памяти. пробовал создать текстовый файл log.log после "тупика" выдернув карту памяти обнаружил что он пуст, пробовал несколько раз. лог создал из окна терминала. отправлено 119 строк, тестовый станок отреагировал на 114 в етой прошивке скорость порта 9600
    обещаные фото, качество не очень - фоткал мобилкой. какая прошивка - не могу посмотреть, станок недопечатал. на ходу фотографировал.
    http://os1.i.ua/3/7/14549167_cbd2fdcf.jpg http://os1.i.ua/3/7/14549168_b74d8dee.jpg http://os1.i.ua/3/7/14549169_d22ab6a8.jpg http://os1.i.ua/3/7/14549170_b54cd8c2.jpg
     

    Вложения:

    • rx.txt
      Размер файла:
      614 байт
      Просмотров:
      609
    • tx.txt
      Размер файла:
      1,2 КБ
      Просмотров:
      505
    Последнее редактирование: 10 май 2017
  14. serg_admin

    serg_admin Гик

    Получилось ответов меньше чем команд.
    И похоже обмен не очень надежный потому, что некоторые команды то пропускает то ошибку дает. Соответсвенно если 'o' потеряется то все. Предлагаю сделать максимальный timeOut на команду

    Поправил немного.

    - Наверное должен создаваться Лог
    - Добавил TimeOut

    Код (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.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");}
    }
     
  15. SFM

    SFM Нерд

    спасибо. сейчас залью
     
  16. SFM

    SFM Нерд

    увы файл небыл создан, создал руками, после теста - файл пустой. видими небыло каоманды закрить поток, или записать все у файл. остановился на строчке G0 Y2 X10.25 как и в предыдущий раз
     
  17. serg_admin

    serg_admin Гик

    Если ни чего не менял через 10 секунд должен дальше пойти.
     
  18. SFM

    SFM Нерд

    вобще ничего не менял. проведу еще тест. подожду еще.
     
  19. SFM

    SFM Нерд

    на 22 строчки продвинулся код. но как спасти лог ? я смотрю через монитор порта. может нажать ресет ? или карту на ходу дёрнуть ?
     
  20. serg_admin

    serg_admin Гик

    А tx.txt один к одному сливается? В конце файла нет новой строки. Т.е. команда как бы не завершена.