Помогите разобраться с управлением сверлильным станком

Тема в разделе "Arduino & Shields", создана пользователем Sparkfire, 30 окт 2015.

  1. Tomasina

    Tomasina Сушитель лампочек Модератор

    Команда на поворот ШД на n градусов не всегда означает что он действительно повернулся на этот угол, особенно в случае со сверлильным станком (сверло заклинило, или стружка попала под Х-направляющую - ШД не погорит, он просто прокрутится в магнитном поле, координаты же уползут). Поэтому дублирование энкодером лишним не будет. Но его применение можно отложить на последний этап.
     
    Sparkfire, DrProg и Megakoteyka нравится это.
  2. Sparkfire

    Sparkfire Гик

    Ультразвуковой датчик покупался в надежде, что он точнее, я же не сталкивался с такими вещами раньше. Оказалось, его можно настроить и точнее, если его показания делить не на 58 , а на 5,69. Этим достигается во-первых, показ в миллиметрах, во-вторых, если использовать вспомогательную линейку, на расстоянии 300 мм, он и показывает 300. Но при приближении меньше 100 мм начинает безбожно врать.
    Но я сразу это понял, и в ТЗ нет ни слова о таком датчике.
    Кстати, вчера разработал дизайн и расположение элементов на приборной панели. Саму панель закажу, мне её вырежут на ЧПУ из пластика 4 мм либо из алюминия 1,5мм. Добавил индикаторы вращения моторов(светодиоды на стрелочках).
    Потихоньку моё детище обретает форму. Этот станочек - пробная версия перед постройкой настоящего большого станка с ЧПУ, с 6 степенями свободы(X,Y,Z стандартные, А крутящаяся бабка со шпинделем, и эти 2 оси, что сейчас изобретаю. Они будут называться В и С. Такой большой станок(2400х1200) уже вряд ли будет целиком на ардуине, боюсь, скорости обмена не хватит, но эти 2 оси могут остаться как есть.
    Вот такие планы.
     
  3. DrProg

    DrProg Вечный нерд

    Ардуины разные бывают.
     
    ИгорьК нравится это.
  4. Sparkfire

    Sparkfire Гик

    Что-то пропали остальные расчетчики. Но это, может и к лучшему.

    Из тех троих претендентов, что прислали мне свои расчеты понравилось одно решение. НО...

    Пока проект заморожу, на некоторое время, с кодом попробую разобраться сам, все равно ШД пока не пришли, будут ехать еще недели три.
    Быть может и сам разберусь что да как.
    Всем спасибо за оперативность, но было важно еще сохранить относительную бюджетность изделия.

    Боюсь, начинает не хватать выходов на Меге...

    Решением обязательно поделюсь.

    На данный момент бьюсь над вводом трехзначных чисел в ЛСД дисплей. В 7сегментник уже вводил, и проблем с этим нет, только это несколько не то, что надо.

    Предятавляю, что надо разложить число на 100хА+10хВ+С , только не понимаю, какввести все сразу.
     
  5. Sparkfire

    Sparkfire Гик

    Снова привет)

    Есть кусок кода для ввода трехзначного числа.
    Подскажите, где ошибка, ввожу с клавы 4х4, все цифры вводятся, только :

    1. Нет порядка ввода, может ввестись третья, потом первая, потом вторая, соответственно.
    2. При попытке получить Переменную (Х1=100*Ха1+10*Ха2+Ха3) , и вывести ее в другую область LCD? получается немного не то число, почти всегда на 200 меньше чем надо.

    Код (C++):
    void loop(){
     
         
      char pressed_Xa1=keypad.getKey();
          if(pressed_Xa1)
        {
          lcd.setCursor(2, 0);
            lcd.print(pressed_Xa1);
        }
          char pressed_Xa2=keypad.getKey();
           if(pressed_Xa2)
        {
          lcd.setCursor(3, 0);
          lcd.print(pressed_Xa2);
        }      
           char pressed_Xa3=keypad.getKey();
          if(pressed_Xa3)
        {
          lcd.setCursor(4, 0);
          lcd.print(pressed_Xa3);
          }

        }
     
  6. Sparkfire

    Sparkfire Гик

    По наитию, понимаю, что ошибка где-то в функции keypad.getKey() , но данных по ней не могу найти.
     
  7. Megakoteyka

    Megakoteyka Оракул Модератор

    Вы вводите первую цифру, а программа в это время считывает вторую или третью - вот вам и ошибка. При вводе каждой цифры нужно добавлять ее в младший разряд числа, а остальные разряды сдвигать, а завершение ввода подтверждать отдельной кнопкой.
     
  8. Sparkfire

    Sparkfire Гик

    После каждой введенной цифры нажимать Кнопку?
    То есть, чтоб записать 345, нужно нажать 3*4*5* ?
     
  9. Megakoteyka

    Megakoteyka Оракул Модератор

    Нет, только в конце. И по этому же нажатию сбросить переменную, в которую происходит накопление числа, чтобы в следующий раз начать собирал число заново.
     
  10. Sparkfire

    Sparkfire Гик

    Можете показать пример? На основе части кода, дальше сам попробую. Мне надо будет вводить три-четыре трех и четырехзначных переменных. Увидеть бы только куда копать.
     
  11. Sparkfire

    Sparkfire Гик

    Деление числа на разряды. Это понятно, То же самое я и сделал, только у меня они называются по другому и объявляются иначе.

    Стоп.
    Что-то начинает вырисовываться... Принцип понял. Но лучше все-же посмотреть..
     
  12. Sparkfire

    Sparkfire Гик

    Нет. Не получается разбить число на разряды, хоть ты тресни.
    Что-то накопал про функцию sprintf(), только как с ней обращаться, так и не понял.

    Выручайте, други, ткните носом в направление ковыряния))
     
  13. Gippopotam

    Gippopotam Нерд

    А что именно не получается? Делите число на 100, целая часть - количество сотен, остаток делите на 10, целая часть - количество десятков, остаток - единицы. Собираете наоборот.
     
  14. Sparkfire

    Sparkfire Гик

    Нет, сами разряды, этопонятно. Вот разделить способ ввода, чтоб ардуино знала, что я сейчас введу три цифры, именно первое, второе и третье. Может счётчик нажатий какой-то нужен.
     
  15. Sparkfire

    Sparkfire Гик

    Чувствую, истина где-то рядом.
     
  16. Gippopotam

    Gippopotam Нерд

    Зря вы отказались заплатить :)
     
    Sparkfire нравится это.
  17. Megakoteyka

    Megakoteyka Оракул Модератор

    Примерно такой алгоритм:
    Код (C++):
    int value = 0;

    void loop()
    {
      if(нажата_кнопка_с_цифрой)
      {
        value *= 10;
        value += цифра_на_кнопке;
      }
      if(нажата_кнопка_OK)
      {
        берем собранное число из переменной value;
        value = 0;
      }
    }
    Можно еще добавить счетчик нажатий и после, скажем, 4х нажатий перестать формировать число, иначе вылезем за пределы int.
     
    Sparkfire нравится это.
  18. Megakoteyka

    Megakoteyka Оракул Модератор

    Ардуина не может знать, что вы сейчас захотите что-то ввести. Либо нужно все время ожидать ввода, либо переходить в режим ввода чисел по какой-то команде, например, по нажатию определенной кнопки. А если хотите вводить разные параметры, то нужно как-то дать понять контроллеру,какой именно параметр вы сейчас хотите ввести. Короче, нужно сделать меню, в котором можно выбрать редактируемый параметр и ввести его с клавиатуры.
     
    Sparkfire нравится это.
  19. Sparkfire

    Sparkfire Гик

    Может и зря, время тоже не бесконечное. Но раз начал сам, теперь уже и довести хочется самому. Да и , между нами, девочками, думал все эти штучки-дрючки окажутся дешевле. Может админов попросить перенести тему в другой раздел? Или можно оставить тут? Тема, думаю, не умрет. Многим будет интересно.
     
  20. Megakoteyka

    Megakoteyka Оракул Модератор

    Готово. Первое сообщение подправьте, а то народ будет советовать идти обратно в "Закажу проект".