Вопрос о переменных

Есть ли способ использовать ранее присвоенное переменной значение для настройки шагового двигателя? Я имею в виду следующее:

пример: Датчик показывает 100 градусов, поэтому

Настройте шаговый двигатель на 100 градусов и удерживайте, затем через 10 минут

датчик показывает 110 градусов, поэтому

Отрегулируйте шаговый двигатель (110 - 100) еще на 10 градусов

и так далее..

Я совсем новичок в этом деле и прошу прощения, если вопрос глупый:<

, 👍0


2 ответа


Лучший ответ:

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 правильное значение на основе ввода пользователя.

,

1

Изначально вы считываете значение датчика в некоторую переменную, например:

previous = readSensor();

Каждые десять минут необходимо вызывать функцию (логику, использующую прерывание по таймеру / RTC /millis()), которая считывает текущее значение с датчика и сравнивает его с предыдущим, чтобы получить смещение. Затем оно передается функции, которая регулирует скорость двигателя. Обновите переменную «previous».

offset = readSensor()-previous;
previous = readSensor();
adjustSpeed(offset);
,