Вопрос о переменных
Есть ли способ использовать ранее присвоенное переменной значение для настройки шагового двигателя? Я имею в виду следующее:
пример: Датчик показывает 100 градусов, поэтому
Настройте шаговый двигатель на 100 градусов и удерживайте, затем через 10 минут
датчик показывает 110 градусов, поэтому
Отрегулируйте шаговый двигатель (110 - 100) еще на 10 градусов
и так далее..
Я совсем новичок в этом деле и прошу прощения, если вопрос глупый:<
@Acartare, 👍0
2 ответа
Лучший ответ:
Судя по вашему описанию, программе нужно знать только новые параметры цели и текущее положение. Это значит, что вам нужны две переменные. Алгоритмически это будет выглядеть следующим образом (написано на псевдокоде, похожем на C):
// инициализируем глобальные переменные (может потребоваться float вместо int)
int target_pos = 0;
int current_pos = 0;
void setup() {
// добавляем код для настройки режима ввода-вывода, подготавливаем связь с датчиком...
}
// функция считывания показаний датчика
int ReadSensorFunc(void) {
int reading = 0; // локальная переменная для хранения показаний датчика
reading = ...; // добавить код для считывания показаний датчика
return reading;
}
// функция регулировки положения двигателя
void AdjustStepMotorFunc(void) {
// добавьте код для настройки степпера на (target_pos-current_pos);
}
void loop() { // повторять вечно
target = ReadSensorFunction() // вызвать функцию чтения датчика
AdjustStepMotorFunc() // вызов функции регулировки положения
current_pos = target_pos // обновить текущую позицию
// добавить код для задержки на 10 минут
}
Этот код инициализирует положение как нулевое. Если при включении контроллера оно не равно нулю, вам потребуется добавить дополнительный код в setup(), чтобы назначить current_pos правильное значение на основе ввода пользователя.
Изначально вы считываете значение датчика в некоторую переменную, например:
previous = readSensor();
Каждые десять минут необходимо вызывать функцию (логику, использующую прерывание по таймеру / RTC /millis()), которая считывает текущее значение с датчика и сравнивает его с предыдущим, чтобы получить смещение. Затем оно передается функции, которая регулирует скорость двигателя. Обновите переменную «previous».
offset = readSensor()-previous;
previous = readSensor();
adjustSpeed(offset);
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Сохранение файла .txt на SD-карту и чтение данных каждого содержимого в файл txt, а затем сохранение его в переменной
- Запустить два степпера одновременно
- Могу ли я запретить библиотеке Stepper удерживать двигатель?
- Питание двух шаговых двигателей с драйверами A4988
- Объявленная переменная внутри void setup не видится в void loop
- Управление функцией включения на драйвере микрошагового устройства
- Шаговый двигатель с датчиком HCSR-04