помощь в цикличности в "case"
- Войдите на сайт для отправки комментариев
Пнд, 20/01/2020 - 16:09
Доброго времени форумчане. Помогите пожалуйста. Суть проблемы в следующем:
Есть шаговый двигатель, драйвер a4988, raspberry pi и arduino mega
Нужно сделать так, чтобы шаговый двигатель вращался некоторое кол-во оборотов или же несколько секунд, после чего останавливался ну и также в обратную сторону.
Я сделал так, чтобы малина отправляла команду на ардуино а та в свою очередь отправляла команду на драйвер
Но вот дело в том, что происходит только один шаг, а дальше ничего, суть проблемы я понимаю, но ее решение я не знаю
Кто может, помогите пожалуйста, скетч приложил снизу. Заранее спасибо :)
const int stepPin = 3; const int dirPin = 4; //---------------------------------------------------------- void setup() { pinMode(stepPin,OUTPUT); pinMode(dirPin,OUTPUT); Serial.begin(9600, SERIAL_8N1); while (!Serial) {} } //---------------------------------------------------------- void loop() { digitalWrite(dirPin,LOW); byte pos; if(Serial.available() > 0){ // Чтение команды int inByte = Serial.read(); // Обработка команд от малинки switch(inByte){ case 'f': digitalWrite(dirPin,HIGH); digitalWrite(stepPin,HIGH); delayMicroseconds(700); digitalWrite(stepPin,LOW); delayMicroseconds(700); case 's': //digitalWrite(dirPin,LOW); digitalWrite(stepPin,HIGH); delayMicroseconds(700); digitalWrite(stepPin,LOW); delayMicroseconds(700); delay(0); } Serial.write(inByte); Serial.write('\n'); } }
изложите своими словами, как вы понимаете суть проблемы
При получении команды от малины, ардуино выполняет часть кода:
Но это только на один шаг, а мне надо несколько шагов, вот и вся проблема
В конце казе брейк должен быть, если хочешь, чтобы другие казе не выполнялись. Сериал отдаёт чар.
По брейку верно, но Serial.read() таки отдаёт int, который нужно привести к char после проверки на -1.
Спасибо, щас сделаю. Но а по поводу того, чтобы в case выполнялось все в цикле ? Можете подсказать как это сделать ?
ну и в чем проблема? :) Знаете, как выполнить, например, десять шагов? - ну так вставьте код для десяти шагов вместо этого...
Мне нужно примерно 1600 шагов
Дак пусть для начала цыкл в case исполняется мб?
Мне нужно примерно 1600 шагов
да хоть миллион
ну мне так и надо
чтобы именно в case выполнялись команды:
это довольно большой код ведь
и грузится долго будет ардуинка
это довольно большой код ведь
и грузится долго будет ардуинка
судя по вопросу, вы собрались скопировать код для шага миллион раз ? :)
Пойдите почитайте что-нибудь про циклы for. С их помощью код на миллион шагов будет отличаться от кода на один шаг строго на 1 строку.