А если удалить все, что касается ИК-приемника и сериала, то шаговик начнет крутиться. Такое ощущение, что библиотеки для шаговиков ни с чем нельзя использовать.
Ну слава богу - локализовали проблему! А теперь берем другую библиотеку для шаговых двигателей (ну не верю я, что это единственная) и проверяем ее.
mykaida, штатная библиотека <Stepper.h> работает с библиотекой <IRremote.h>, но криво. Пока мотор крутится ничего нельзя сделать. Библиотеки <CustomStepper.h> и <AccelStepper.h> я не понял как подружить с <IRremote.h> и даже с Serial.
mykaida, штатная библиотека <Stepper.h> работает с библиотекой <IRremote.h>, но криво. Пока мотор крутится ничего нельзя сделать. Библиотеки <CustomStepper.h> и <AccelStepper.h> я не понял как подружить с <IRremote.h> и даже с Serial.
Вы извините, конечно, но в ШТАТНОЙ библиотеке stepper я не нашел stepper.run(). Что и не удивительно.
Скетч рабочий. Вы видимо что-то неправильно подключаете. Проверьте работоспособность пинов и/или поменяйте их. Проверьте коды пульта. Я уже давно разобрал схему, иначе выложил бы видео, а собирать заново неохота.
т.е. программа виснет на stepper.run();
А если убрать тоже виснет ?
AlexanderNO Так после нажатия кнопки пульта, example должна присвоится 1.
intexample = 0;loop()
if(results.value == 0x20DF40BF) example = 1;Или я что-то не понимаю?
До нажатия кнопки надо, чтобы программа загрузилась. А сразу после загрузки начинается loop и упирается в stepper.run(); еще до Вашего нажатия.
Не помню что, но иногда в последней строке что то вставляют чтобы лооп не останавлялся, возможно что этот
перенести туда хватит.
https://forum.arduino.cc/index.php?topic=464583.0
Rename your loop() function to something else, for instance: drive_the_car()
Write a new loop() function whose job it is to invoke driive_the_car() when conditions are such that it ought to be invoked.
т.е. программа виснет на stepper.run();
Ну слава богу - локализовали проблему! А теперь берем другую библиотеку для шаговых двигателей (ну не верю я, что это единственная) и проверяем ее.
mykaida, штатная библиотека <Stepper.h> работает с библиотекой <IRremote.h>, но криво. Пока мотор крутится ничего нельзя сделать. Библиотеки <CustomStepper.h> и <AccelStepper.h> я не понял как подружить с <IRremote.h> и даже с Serial.
AlexanderNO, Вы правы. Присвоил 1 переменной example и loop закрутился, а мотор нет.
#include <IRremote.h> #include <CustomStepper.h> CustomStepper stepper(3, 4, 5, 6); int example = 1; int reciverPin = 2; IRrecv irrecv(reciverPin); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); stepper.setRPM(12); stepper.setSPR(4075.7728395); Serial.println("Setup OK"); } void loop() { Serial.println("Start loop"); Serial.println(example); if (irrecv.decode(&results)){ Serial.println(results.value, HEX); if(results.value == 0x20DF40BF){ example = 1; } if(results.value == 0x20DFC03F){ example = 2; } irrecv.resume(); } Serial.println("point 1"); if (stepper.isDone() and example == 1){ stepper.setDirection(CW); stepper.rotate(1); example = 3; } Serial.println("point 2"); if (stepper.isDone() and example == 2){ stepper.setDirection(CCW); stepper.rotateDegrees(90); example = 3; } Serial.println("point 3"); if (stepper.isDone() and example == 3){ stepper.setDirection(CW); stepper.rotate(); } Serial.println("point 4"); stepper.run(); Serial.println("point 5"); }Монитор порта:
mykaida, штатная библиотека <Stepper.h> работает с библиотекой <IRremote.h>, но криво. Пока мотор крутится ничего нельзя сделать. Библиотеки <CustomStepper.h> и <AccelStepper.h> я не понял как подружить с <IRremote.h> и даже с Serial.
Вы извините, конечно, но в ШТАТНОЙ библиотеке stepper я не нашел stepper.run(). Что и не удивительно.
Попробуйте вместо 21-49:
if ( irrecv.decode( &results )) { switch ( results.value ) { case 0x20DF40BF: if (stepper.isDone() ) { stepper.setDirection(CW); stepper.rotate(1); } break; case 0x20DFC03F: if (stepper.isDone() == false ) { stepper.setDirection(STOP); rotateend = true; } break; } irrecv.resume(); }Исправил 11.
такие конструкции в коде просто бесют сутра
if(stepper.isDone() ==false)isDone и так возвращает bool, нахрена bool в bool преобразовывать?
if(!stepper.isDone())и сё.DetSimen, спасибо! Пора значит заканчивать ночные бдения)
Рабочий код для AnyPenny
#include <IRremote.h> #include <CustomStepper.h> CustomStepper stepper(3, 4, 5, 6); byte example = 0; byte reciverPin = 2; boolean rotate1 = false; IRrecv irrecv(reciverPin); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); stepper.setRPM(12); stepper.setSPR(4075.7728395); stepper.rotate(); stepper.setDirection(STOP); } void loop() { if ( irrecv.decode( &results )) { switch ( results.value ) { case 0x20DF40BF: example = 1; rotate1 = false; break; case 0x20DFC03F: example = 2; rotate1 = false; break; case 0x20DFXXXXX: // Ввел еще одну кнопку для внезапной // ручной остановки - код кнопки ввести самому example = 3; rotate1 = false; break; } irrecv.resume(); } if (!rotate1) { switch (example) { case 1: stepper.setDirection(CW); stepper.rotate(1); rotate1 = true; break; case 2: stepper.setDirection(CCW); stepper.rotateDegrees(90); rotate1 = true; break; case 3: stepper.setDirection(STOP); break; } } stepper.run(); }такие конструкции в коде просто бесют сутра
if(stepper.isDone() ==false)isDone и так возвращает bool, нахрена bool в bool преобразовывать?
if(!stepper.isDone())и сё.if (ledState == LOW) ledState = HIGH; else ledState = LOW;AlexanderNO, к сожалению скетч не работает. Извиняюсь за долгий ответ.
Спасибо большое за помощь.
Скетч рабочий. Вы видимо что-то неправильно подключаете. Проверьте работоспособность пинов и/или поменяйте их. Проверьте коды пульта. Я уже давно разобрал схему, иначе выложил бы видео, а собирать заново неохота.
такие конструкции в коде просто бесют сутра
if(stepper.isDone() ==false)isDone и так возвращает bool, нахрена bool в bool преобразовывать?
if(!stepper.isDone())и сё.if (ledState == LOW) ledState = HIGH; else ledState = LOW;Зато в коде сия конструкция меньше места занимает, ежели читать состояние пина напрямую и инвертировать )))
Зато в коде сия конструкция меньше места занимает, ежели читать состояние пина напрямую и инвертировать )))
меньше чем эта ?
AlexanderNO, мотор заработал после того как убрал строчку
"Serial.begin(9600);"Спасибо большое за скетч, была такая же проблема!!!