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

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

  1. SFM

    SFM Нерд

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

    serg_admin Гик

    Скетч можно увидеть?
     
  3. SFM

    SFM Нерд

    скеч кривой. работает так как надо, не получится вставить обработчик собитый и где то он создаёт тупик.
    Код (C++):
    #include <SPI.h>
    #include <SD.h>
    const int chipSelect = 10;

    void setup()
    {
    }
    void loop()
    {
      Serial.begin(115200);
      while (!Serial) {}
      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())
      {
      Serial.write(dataFile.peek());
      if (dataFile.read()==13)
      {
      while (Serial.read()!=111);
      }
      }
      dataFile.close();}
      else {Serial.println("error opening cat.cnc");}
    }
     
    Последнее редактирование: 15 май 2017
  4. SFM

    SFM Нерд

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

    serg_admin Гик

    Чтение с файла выполняется быстрее чем запись в Serial. Желательно проверять доступное место в буфере Serial


    Что будет если гравер не пришлет 111?
     
  6. SFM

    SFM Нерд

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

    ардуина с карточкой будет ждать исполнения команды, и отчета об исполнении "111" - "ок"
    било бы неплохо подождать некое время, и отправить строчку еще раз, *может коммуникационные сложости. *ситуация штатная когда на станке нажать паузу.
     
  7. rkit

    rkit Гуру

    peek не сдвигает позицию в файле.У вас бесконечный цикл
     
  8. SFM

    SFM Нерд

    извините. я не работал с карточками память. для меня - ето квантовая физика. если файл будет прочитан до конца, и после того программа не выйдет из цыкла - результат удовлетворительный
     
  9. serg_admin

    serg_admin Гик

    Имеется ввиду, что
    Я имею ввиду, что SPI имеет скорость 4 мегабита, а Serial 9600-115200, соответственно длинна строчек недолжна превышать длину буфера Serial, 64 байта если не ошибаюсь.

    Там следом сразу read() идет. Не оптимально конечно. Но работать должно.
     
  10. rkit

    rkit Гуру

    Так и чего вы тогда хотите-то? Чтобы кто-то просто так сделал всё за вас?
     
  11. SFM

    SFM Нерд

    команда коротенькие типа "G0 Y128.5 X89.5" в конце буфера - пустота
     
  12. serg_admin

    serg_admin Гик

    Кстати чем файлы формируете. Дело в том, что кода 13 там может и не быть. Linux-овый перенос содержит код 10. Для Windows последовательность 10, 13
    У Вас как?
     
  13. SFM

    SFM Нерд

    помочь с кусочком кода. программа планировалась намного сложнее. если ето будет работать. вариантов 2. или попробую поставить екран енкодер ..... и полноценный интерфейс, или так и оставлю. рисует и пофиг
     
  14. SFM

    SFM Нерд

    можно и обыкновенным блокнотом. для теста им и делал. а так програма которая переобразовует картинку в G-код
    файл имеет такую структуру
    G71
    G1 F500
    (F-Burning speed)
    M05
    G0 Y0 X0
    M03
    G1 Y0 X0.5
    M05
    G0 Y0 X1
    M03
    G1 Y0 X5.5
    M05
    G0 Y0 X6.5
    M03
    G1 Y0 X7.5
    M05

    13 вроде хавеет. код в порту прокручивается. но в какой то момент виснет. может реагирует на число "13" в коде
     
  15. serg_admin

    serg_admin Гик

    Еще, откуда 111. Я как-то не задавался вопросом, что вернет станок по завершению G кода. Просто есть где-то дока, что вернется 111?
     
  16. SFM

    SFM Нерд

    111 - кажется код "ок" если все хорошо, станок должен отправить отчет о выполнении, конечно если корманда дошла, на что автономний модуль должен считать с карты и отрправить следуюцюю строку. а с документацией проболемка. коды вылавливал мониторя порт, когда компютер из станком общяется. тема интересная. удивительно что кроме меня её никто не поднимал
     
    Последнее редактирование: 10 май 2017
  17. serg_admin

    serg_admin Гик

    G коды документированы, а прошивка Marlin умеет брать файлы с SD поэтому ни кому не надо.
     
  18. serg_admin

    serg_admin Гик

    Посмотрел прошивку. Многие ответы содержат "o". Вообще неплохо записать протокол работы со станком на ту же карту в другой файл. Тогда будет видно где остановка.
    Код (C++):
    104 #define MSG_Enqueueing                      "enqueueing \""
    105 #define MSG_POWERUP                         "PowerUp"
    106 #define MSG_EXTERNAL_RESET                  " External Reset"
    107 #define MSG_BROWNOUT_RESET                  " Brown out Reset"
    108 #define MSG_WATCHDOG_RESET                  " Watchdog Reset"
    109 #define MSG_SOFTWARE_RESET                  " Software Reset"
    110 #define MSG_AUTHOR                          " | Author: "
    111 #define MSG_CONFIGURATION_VER               " Last Updated: "
    112 #define MSG_FREE_MEMORY                     " Free Memory: "
    113 #define MSG_PLANNER_BUFFER_BYTES            "  PlannerBufferBytes: "
    114 #define MSG_OK                              "ok"
    115 #define MSG_WAIT                            "wait"
    116 #define MSG_STATS                           "Stats: "
    117 #define MSG_FILE_SAVED                      "Done saving file."
    118 #define MSG_ERR_LINE_NO                     "Line Number is not Last Line Number+1, Last Line: "
    119 #define MSG_ERR_CHECKSUM_MISMATCH           "checksum mismatch, Last Line: "
    120 #define MSG_ERR_NO_CHECKSUM                 "No Checksum with line number, Last Line: "
    121 #define MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM "No Line Number with checksum, Last Line: "
    122 #define MSG_FILE_PRINTED                    "Done printing file"
    123 #define MSG_BEGIN_FILE_LIST                 "Begin file list"
    124 #define MSG_END_FILE_LIST                   "End file list"
     
     
  19. SFM

    SFM Нерд

    и просит ардуино мега .... можно конечно. может реально есть резон, но хотелось бы "самому", *с помощью написать.
     
  20. SFM

    SFM Нерд

    пойду застрелюсь.