Помогите объединить 2 скетча
- Войдите на сайт для отправки комментариев
Вс, 21/01/2018 - 17:38
#include <CustomStepper.h> CustomStepper stepper(2, 3, 4, 5, (byte[]){8, B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW); boolean rotate1 = false; boolean rotatedeg = false; boolean crotate = false; void setup() { //sets the RPM stepper.setRPM(2); stepper.setSPR(4075.7728395); } void loop() { if (stepper.isDone() && rotate1 == false) { stepper.setDirection(CCW); stepper.rotate(2); rotate1 = true; } stepper.run(); } #include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver pinMode(3, OUTPUT); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value); if (results.value==0x88877) { digitalWrite(13,HIGH); } if (results.value==0xFFFFFFFF) { digitalWrite(13,LOW); } irrecv.resume(); // Receive the next value } }
Возникла проблема объединения 2-ух скетчей в 1,постоянно возникают разные ошибки.
П.С.Простите начинающего,в ардуино ок.2 месяцев.
Вы забыли опубликовать Ваш объединённый скетч и текст "разных ошибок".
Нам самим гадать, что оно должно делать?
Как работает библиотека шагового - по прерываниям?
Извините,что не сообщил.По назатию кнопки пульта двигатель должен повернуться на 2 оборота.
Почитал про CustomStepper навскидку. Короче: метод run надо вызывать всегда в loop, а вы вызываете его только тогда, когда пришли данные по IR. Вынесите stepper.run в начало loop.
DIYMan, т.е. мне надо вынести только степпер.ран или описание вращения тоже?
Так:
И неплохо бы читать первоисточники:
run
This method is very important!!! It acts like a timer that makes the motor step when necessary, it MUST be placed inside your loop(). I used this method to leave the hardware timers free for other uses. This allows you to control multiple motors. Without this method in the loop, the motor won't move.
Спасибо за скетч,но всеравно ничего не изменилось.Должен ли скетч отправлять данные в Serial port
Когда я загружаю свой скетч с ошибкой,то он выдает данные в сериал монитор,а новый абсолютно ничего не делает. Может быть я что-то делаю не так?
В обсуждении библиотеки CustomStepper пару раз встречается жалоба, что ничего не работает если задействовать Serial. И как-то это оставлено без ответа. Попробуйте всё, что про Serial закомментировать (это всего 2 строки). Вдруг заработает.
И чего-то я с условиями не понял, всякими там rotate1 и т.п. Вот так работает чего-нибудь:
Всем доброго времени суток. Чтобы не плодить одинаковые темы, задам аналогичный вопрос. Хотел управлять шаговым мотором 28BYJ-48 пультом от телевизора. Взял два скетча для <IRremote.h> и <CustomStepper.h>. Если поотдельности загружать скетчи, то все работает, вместе - нет. У меня такое ощущение, что проблема в <CustomStepper.h> или я неправильно объеденил скетчи? Посмотрите, пожалуйста, в итоговом скетче нет ли ошибок.
А что говорит ардуина при виде этого скетча?
Вообще, ответ очевиден - если что-то работает не так, как представляется, то несомненно - ошибки есть.
Скетч загружается без ошибок. Но при нажатии на кнопки пульта ничего не происходит.
Уважаемый, а самому посмотреть слабо? Добавить немножко Serial.print() и определится что выполняется, а что нет, какие переменные играют и т.д.?
А я вот что-то сомневаюсь, что скетч загружается.
Уважаемый, все добавлялось. Ничто не выполняется, просто как будто Ардуино выключена. Если закомментировать все, что касается сервы и добавить Serial.print, то все работает. Если в объединенном скетче добавить Serial.print, то в монитор порта ничего не выводится, даже Serial.println(millis()). Если знаете в чем проблема, то подскажите. Или слабо?!
А вам слабо сравнить свой setup() с нормальным: https://www.arduino.cc/en/serial/print ?
sadman41, почему сомневаетесь? В IDE появляется надпись "Загрузка завершена".
Да, так. В автобусе трясся - почудилось кое-что.
Наверное слабо. А вам слабо нормально ответить или помолчать?!
Да как скажете. Мне вообще не особо важно - работает там у вас что-то или нет. Ищите сами баги.
mykaida, sadman41, все равно ваши ответы для меня бесполезны.
Самый полезный вам дали здесь, только вы его полезности не осознаете. Второй, по полезности, перебраться в "Ищу исполнителя". Или сидеть здесь и ждать умеющую программировать мать Терезу, чудеса бывают, редко.
отдельно программы работают ?
Не слабо, а как и Вам лениво. Программу с Serial.print в студию. Очень хочу посмотреть, а какие процессы Вы отслеживаете.
gena321. Да, отдельно работают.
Мне не лениво, и писать скетч за меня не надо, и исполнитель мне не нужен. Мне нужно объяснить почему не работает, объяснить логику. Мне интересна ардуинка, но навыков в программировании у меня нет. Решил поуправлять шаговым мотором с пульта, так как на днях пришел ИК-датчик VS1838B с Али.
Решение своего вопроса я нашел благодаря Дмитрию Осипову. Нашел его видео на ютубе. Он шаговым мотором управляет без библиотек.
Если Вас устроит это решение с косяками, то мы тут причем??
Наверное устроит, пока нет необходимости это где-то применять. А какие тут косяки? Аппаратная часть работает хорошо. Вот в первом скетче были косяки.
Вот потому что у Вас нет необходимости куда-то применить Вы эти косяки и не увидете. Это как линейка. Палка риски есть. Ура Отчиная Линейка. А вот когда начинаем мерять ей, то значения разные. :)
Выложите два скетча отдельно.
Так что за косяки? Мотор крутится, направление движения меняется сразу, программа не виснет во время движеня мотора.
gena321, через часика полтора. Пока не дома.
Вот скетч для ик-приемника:
Вот для сервы:
Посмотрел. Добавили Serial.begin(9600) в Setup. Я его добавлял, чтобы смотреть меняется ли example. И заметил такую вещь: если в скетче с шаговиком добавить Serial.begin(9600) в Setup и в Loop вставить хотя бы Serial.println(millis()), то ардуинка как будто зависает, шаговик не крутится, в мониторе порта ничего не отображается. Кстати, такая же история с библиотекой AccelStepper.
Ничего не работает. В монитор порта ничего не выводится.
В сетапе выведи в порт, в начале loop тоже. После каждого if. Надо ловить, где программа виснет.
AnyPenny, зачем Вы выводите в порт millis() в строке 42?
AlexanderNO, Могу убрать, но ничего не изменится. Сначала этой строки не было, example в порт не выводился. Добавил, чтоб посмотреть будет ли выводиться millis().
mykaida, а в сетапе что вывести в порт? Там же мы запустили сериал порт, IR и установили параметры для шаговика. Или просто что-нибудь? Посмотреть проходит ли сетап?
mykaida, вот что получилось:
А вот что упало в монитор порта:
mykaida, а в сетапе что вывести в порт? Там же мы запустили сериал порт, IR и установили параметры для шаговика. Или просто что-нибудь? Посмотреть проходит ли сетап?
Да не стоит на него внимание обращать. Вечно какую-то пургу несет.
gena321, пробовал действие оперетора if заключать в {}, ничего не изменилось. То же сначала глаз резало.
выключи это строку, что тогда ?
Собери все
Serial
.println
. в одну кучу и поставь в концеstepper.run(); - это обязательное условие, для движения мотора. Всегда должно находиться в loop(). Если ее убрать, то мотор перестает работать, даже в рабочем скетче из примеров.
При загрузке скетча в строке 5: int example = 0; а в отдельном скетче для сервы было: int example = 1;
Вопрос. Что должен сделать двигатель при команде: stepper.run();?