Использование классов при передаче данных с ПК
- Войдите на сайт для отправки комментариев
Доброго времени суток! Наверно, немного не точно сформулировал заголовок, заранее извиняюсь, не сообразил, как правильно записать (Arduino начал изучать недавно, да и в программировании в целом не блещу).
Есть один класс, который служит для управления шаговым двигателем. При его "активации", нужно указать параметры "скорость" и "расстояние" . Задаются они в следующем виде:
ServRotate sr1(100, 10);
Причем это строка должна быть прописана вне петли (loop), иначе работать отказывается.
В петле просто прописывается:
sr1.Update();
И все замечательно работает. НО, нужно с ПК передавать эти самые "скорость, расстояние" и запустить работу класса по команде. С запускам по команде проблем нет, а вот с вводом данных - есть. Так как строка записывается вне петли, а данные считываются в петле, то запихнуть их в эту строку нельзя, точнее, запихнуть то можно, но строка не прочитается, так как находится вне петли. Голову сломал уже, и гугление не принесло ни капли понимания, как решить эту проблему. Надеюсь, вы, добрые люди, поможете разрбраться, заранее спасибо:)
прекращай эту дурь с петлями
Но как иначе?
Варианта два:
1. Смотрите, есть ли у класса ServRotate методы для установки параметров "скорость" и "расстояние". Если есть - юзайте их;
2. Создавать объект класса ServRotate динамически, при помощи оператора new:
ServRotate* myServ = NULL; void loop() { if(пришли_параметры) { delete myServ; myServ = new ServRotate(скорость, расстояние); } if(myServ) myServ->Update(); }По поводу первого варианта: Класс писал сам по шаблону из одной статьи, так что может в нем проще что изменить, не совсем понимаю, что значит ваша формулировка, но, подозреваю, что вы имеете ввиду эту часть:
public: ServRotate(float newSpd, float newDist) { spd = newSpd; dist = newDist; distIter = dist/0.175; //одна итерация = 0.175 мм. distIterNew=0; pinMode(10, OUTPUT); pinMode(12, OUTPUT); iter=1; previousMillis = 0; updateMillis = spd; // время, через которое идет новый импульсДалее просто идет void Update(), в котором расписывается применение этих данных
А со вторым вариантом тоже попробую разрбраться.
Если класс писали сами - добавьте туда публичный метод установки параметров, и всё:
class ServoUpdate { public: void setSpeedAndDistance(float speed, float distance) { spd = speed; dist = distance; } };И вызывайте его, когда надо:
ServoUpdate myServ(10,100); void loop() { if(параметры пришли) { myServ.setSpeedAndDistance(скорость, дистанция); } }Спасибо, всё получилось :)