Считывания с CD карты массива (бюджет 1000р)

Тема в разделе "Закажу проект", создана пользователем Artclonic, 25 янв 2018.

  1. Artclonic

    Artclonic Гик

    Может можно "подготовить" данный файл в екселе для отработки "змейкой" Макросом.
    PSПро "принципиальную разницу" мне ни кто не сказал.... отдал блин 500 руб...бесполезно...

    Размер строки-можно задать переменной
    Строку наверное можно идентифицировать на четную и нечетную.
     
  2. b707

    b707 Гуру

    Да, имхо, предварительная подготовка файла может решить задачу.
    Можно, к примеру. в файл добавить команду разворота каретки - тогда можно вообще не парится ни размером строк, ни их четностью и нечетностью. Уйти от матриц. получить вообще линейный файл - хоть вся картика в одну строку.
     
  3. Artclonic

    Artclonic Гик

    Это не проблемма, с макрасами мне полегче...
    т.е. будет вот так

    r -разворот влево
    n -разворот вправо
    тогда
    1
    2
    4
    6
    7
    r -разворот влево
    5
    1
    6
    7
    1
    n -разворот вправо

    и т.д.
    Но как мой ШД поймет (а вернее изменит motor1.step(1, BACKWARD, SINGLE); на
    motor1.step(1, FORWARD, SINGLE);) что надо изменять направления?????????
     
  4. b707

    b707 Гуру

    странный вопрос - у вас же есть в файле команды "r" и "n" - разворот вправо и влево... Вот по этой команде и меняйте FOEWARD на BACKWARD
     
  5. Artclonic

    Artclonic Гик

    Тогда это должно быть так?
    r -движение влево
    n -движение вправо

    1
    r
    2
    r
    4
    r
    6
    r
    7
    r

    5
    n
    1
    n
    6
    n
    7
    n
    1
    n
     
  6. b707

    b707 Гуру

    нет, зачем? Оставьте так, как вы только что предлагали

    n -разворот вправо
    1
    2
    4
    6
    7
    r -разворот влево
    5
    1
    6
    7
    1
    n -разворот вправо
    ...

    Пока у вас не пришла новая команда R или N - направление движения шаговика прежнее.
     
  7. Artclonic

    Artclonic Гик

    Я так не запрограммирую...
    Подправьте мне код готов отблагодарить
     
  8. b707

    b707 Гуру

    какой код?
    Код DIYMan-а править не надо, он подойдет без изменений. И 500р не пропадут :)
    Вам только нужно добавить к 30 командам рисования 30-ю фломастерами еще 2 команды - условно "шаговик FORWARD" и "шаговик BACKWARD"
     
  9. Artclonic

    Artclonic Гик

    Я вообще не очень тупой... но я не пойму.. Если в тестовом файле команда (1) или (2), то программа отработает ту или иную операцию. Если команда "шаговик FORWARD", то он что постоянно крутится будет????? Мне надо что б он крутился не всегда а после выполнения каждой команды, до изменения "каретки".

    А еще я не вижу где мне забить "действия" в зависимости от той или оной команды... не соображу...
     
  10. Artclonic

    Artclonic Гик

    Возьмите 500 р))))))))))

    К стати вот такой вариант - все понятно! Команда крутиться или туда или сюда! Все ясно!!!
    r -движение влево
    n -движение вправо
    е - движение другого двигателя

    1
    r
    2
    r
    4
    r
    6
    r
    7
    r

    5
    n
    1
    n
    6
    n
    7
    n
    1
    n
    е
     
    Последнее редактирование: 26 янв 2018
  11. b707

    b707 Гуру

    ну. я вашего кода не видел. Но могу предположить что-то подобное:
    Код (C++):
    Команда из файла                    Действия
    R                               STEP = FORWARD (шагаем в направлении FORWARD)
    1                                флом 1, STEP 1    (поставить точку фломастером 1, сделать шаг )
    3                                флом 3, STEP 1
    4                                флом 4, STEP 1
    N                                STEP = BACKWARD  (меняем FORWARD на BACKWARD)
     
  12. Artclonic

    Artclonic Гик

    Да, только шагать двигателем нужно после каждого "флома". Да так именно!
     
  13. Artclonic

    Artclonic Гик

    Тут команды прописывать?
    Код (C++):
    #include "Parser.h"
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    // НАСТРОЙКИ
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    #define SD_CS_PIN 4 // пин Chip Select для SD-карты
    #define PROGRAM_FILENAME F("program.txt") // имя файла с микропрограммой
    #define COMMAND_DELIMITER '\t' // разделитель между командами
    #define SERIAL_SPEED 57600 // скорость работы Serial
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    // обработчик следующей команды из файла
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    void ON_COMMAND(int command)
    {
      // тут что-то делаем с командой, пока - просто выводим в Serial
      Serial << F("Command to execute: ") << command << ENDLINE;
     
    }
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    void setup()
    {
      Serial.begin(SERIAL_SPEED);
      if(!SD.begin(SD_CS_PIN))
      {
        Serial << F("CAN'T INIT SD!") << ENDLINE;
        while(true);
      }

      Parser.setup(COMMAND_DELIMITER);

      if(!Parser.load(PROGRAM_FILENAME))
      {
        Serial << F("CAN'T LOAD PROGRAM!") << ENDLINE;
        while(true);
      }

    }
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    void loop()
    {
      // обновляем парсер
      if(!Parser.isDone()) // пока есть команды - просим выполнить следующую.
      {
        // такой механизм позволяет избавиться от блокирующего исполнения, т.к. просить выполнить следующую команду можно
        // неблокирующе, по факту выполнения предыдущей. В простейшем случае - можно в событии ON_COMMAND делать блокирующую работу
        // (т.е. не выходить из функции, пока не будет выполнено требуемое действие), тогда всё выполнение пойдёт линейно.
        Parser.processNextCommand();
      }

    }
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
     
  14. b707

    b707 Гуру

    так у меня после каждого флома идет step
     
  15. Artclonic

    Artclonic Гик

    Да, увидел! Простите!!! Увидел!
     
  16. Artclonic

    Artclonic Гик

    Куда прописать то отклики на команды и сами команды?
     
  17. b707

    b707 Гуру

    да, в процедуре ON_COMMAND(). насколько я вижу.
    Но это лучше к автору :)
     
  18. DIYMan

    DIYMan Guest

    Просто по номеру команды понимать, не вводите лишней ненужной семантики в структуру хранимых данных ;)
     
  19. Artclonic

    Artclonic Гик

    Все изыскания рухнули....
    Уважаемый DIYMan можно змейкой все такти????
     
  20. b707

    b707 Гуру

    Усложнение семантики упрощает парсинг - это как качели, тут надо найти равновесие. Имхо, введение команд направления сильно упрощает задачу,.
     
    DIYMan нравится это.