Счетчик длинны намотанной верёвки
- Войдите на сайт для отправки комментариев
Вс, 02/02/2020 - 22:00
Приветствую! На работе для её упрощения хочу собрать станок для намотки верёвки. Нужно задать число оборотов двигателю (условно один оборот = одному метру) и по достижению заданного метража выключить мотор.
Другими словами Button1 = 5 (метрам) Button2 = 10 (метрам). Я нажимаю на Button 1 и движок начинает вращаться, обороты считываются герконом. После 5 оборотов двигатель останавливается и все значения сбрасываются
const uint8_t btn = 2; // кнопка пуска мотора const int ger = 4; // геркон счётчик const uint8_t motor = 3; // мотор const uint8_t btn_7 = 5; // кнопка 7 метров int count_7 = 0; int ger_old7 = 1; int count = 0;// переменная для подсчёта срабатывания геркона int ger_old = 1;// предыдущее значение входа герконa для определения срабатывания void setup() { pinMode(btn, INPUT_PULLUP); pinMode(motor, OUTPUT); pinMode(ger, INPUT_PULLUP); pinMode(btn_7, INPUT_PULLUP); Serial.begin (9600); } void loop() { boolean BTN = !digitalRead(btn);//Кнопка на 5 оборотов if(BTN == 1) { digitalWrite(motor, 1); } if ((digitalRead(ger)==LOW)&&(ger_old==1)) { count = count + 1; Serial.println(count); } { ger_old = digitalRead(ger); delay (10); } if (count == 5) { digitalWrite(motor, 0); count = 0; } boolean BTN_7 = !digitalRead(btn_7);// код для кнопки 7 метров. if (BTN_7 == 1) { digitalWrite(motor, 1); } if ((digitalRead(ger)==LOW)&&(ger_old7==1)) { count_7 = count_7 + 1; Serial.println(count_7); } {ger_old7 = digitalRead(ger); delay (10); } if (count_7 == 7) {digitalWrite(motor, 0); count_7 = 0; } }
Ну, делайте на здоровье. Вопрос- то в чем?
Проблема в том что счетчики дублируются. Если я нажму на кнопку 10 метров то отмотает она только 5
Странная хрень. Должна отматывать 7...
Я так понимаю, что мне надо изолировать счётчики друг от друга, но как это сделать не понимаю
Проблема в том что счетчики дублируются. Если я нажму на кнопку 10 метров то отмотает она только 5
потому что у вас в коде нет кнопки 10 метров, а есть только 5 и 7 :)
Я так понимаю, что мне надо изолировать счётчики друг от друга, но как это сделать не понимаю
Может проще оставить один счетчик, а число оборотов задавать через переменную? - тогда можно будет отматывать и 5, и 10ю и даже, о УЖАС - 22 метра
:) Ну хорошо. Когда я нажму на кнопку 5 всё будет ок. Мотор сделает 5 оборотов и остановится. Но когда я нажму на кнопку 7 то мотор сделает только 2 оборота, так как переменная из второго счетчика не обнулилась и сохранила значение 5
Вся фишка в том, что сложение мне не нужно. Нужно ограничить строго Чили мотков под разные изделия
если вы сами решили, как надо делать - непонятно. зачем вы тут вопросы задаете. Делайте, как знаете
Дык проблема в том, что я не понимаю как их изолировать:( Знаю конечный вид проекта, но вот с его исполнением проблемно
Дык проблема в том, что я не понимаю как их изолировать:(
я вам уже ответил - оставьте один счетчик, тогда и изолировать не придется.
Вот у вас в строчке 38 число витков сравнивается с тупо забитым в код числом 5, а в строке 59 - с числом 7. Что мешает вместо цифры вставить переменную, например Х. Тогда при нажатии на кнопку "5 витков" вы будете присваивать Х = 5, а при нажатии кнопки "10 витков" - Х=10, а потом запускать единый код счетчика на любой метраж
Очевидно же!
Результат будет точно такой же, так как число витков определяется с помощью геркона и данные будут поступать одновременно в оба счётчика
Зачем два счётчика? Достаточно одного. Вводим переменную - сколько оборотов надо сделать. Вводим два состояния - ждём ввода команд, крутимся. В loop смотрим - если мы в состоянии ввода команд, то анализируем кнопки. Если какая-то кнопка нажата - сохраняем в переменную кол-во оборотов, соответствующее этой кнопке, и переключаемся на состояние "крутимся". Как только прокрутились - переключаемся на состояние "ввод команд". В псевдокоде это выглядит примерно так:
Алгоритм, как видно - простейший. Только не спрашивайте - что это за button1, button2, motor и прочие функции - это псевдокод, демонстрирующий принцип работы алгоритма. Напишете вместо заглушек нужные куски кода - всё заработает. Но для этого надо учиться читать алгоритм.
Результат будет точно такой же, так как число витков определяется с помощью геркона и данные будут поступать одновременно в оба счётчика
Не будут!
Вы глухой. что ли?? - я же сказал. оставьте один счетчик, зачем два.
stupidDemon - смотрите в чем ваша ошибка -
Вам нужно отмерять два размера, 5 и 7 метров, верно? поэтому вы сделали в программе два счетчика - на пять и на семь.
А теперь подумайте, как бы вы поступили, если бы вам надо было отмерять 50 разных вариантов длины - например все целые метры от 1 до 50. Неужели бы Вы в коде делали бы 50 разных счетчиков? - это же бред...
Может этот пример вас убедит, что эта задача так не решается.