Микроконтроллер Arduino для создания регистратора данных

#logging #arduino #microcontroller

#ведение журнала #arduino #микроконтроллер

Вопрос:

Я создал регистратор данных, используя микроконтроллер и 3 потенциометра (X, Y, Z).

Затем я добавил переменную частоту записи, которая варьируется примерно от 1,2 Гц до 50 Гц.

Наконец, я хочу добавить «кнопку калибровки», посредством которой при нажатии кнопки все показания обнуляются и с этого момента начинаются измерения. У меня была попытка создать «кнопку калибровки» и потерпела неудачу. Друг, который знает об этих вещах больше меня, сказал мне, что я должен попробовать использовать функцию interupt.

Смотрите ниже.

 float ZPot = 0;
float YPot = 1;
float XPot = 2;
byte SRate = 3;       //  Sample Rate Adjuster
byte Reset = 10;      //  Reset button.

float ZCalibration = 0;
float YCalibration = 0;
float XCalibration = 0;

void setup()
{
    pinMode(XPot, INPUT);
    pinMode(YPot, INPUT);
    pinMode(ZPot, INPUT);
    pinMode(SRate, INPUT);
    pinMode(Reset, INPUT);

    Serial.begin(9600);
}

void loop()
{
    ZPot = (analogRead(0) / 1023.0 * 105.0) - ZCalibration;
    YPot = (analogRead(1) / 1023.0 * 105.0) - YCalibration;
    XPot = (analogRead(2) / 1023.0 * 105.0) - XCalibration;

    SRate = analogRead(3) / 4;
    Reset = digitalRead(10);

    if (Reset == HIGH) {
        ZCalibration = ZPot;
        YCalibration = YPot;
        XCalibration = XPot;
    }

    Serial.print("X Pot [mm] = ");
    Serial.print(XPot    );
    delay(SRate);

    Serial.print("   Y Pot [mm] = ");
    Serial.print(YPot    );
    delay(SRate);

    Serial.print("   Z Pot [mm] = ");
    Serial.println (ZPot  );
    delay(SRate);
}
  

Ответ №1:

Прерывание — это, по сути, способ, с помощью которого MCU может запускать фрагмент кода всякий раз, когда происходит какое-либо событие. В вашем случае мы хотим, чтобы он запускал калибровку, например, всякий раз, когда цифровой вывод ввода-вывода переходит с высокого уровня на низкий.

Взгляните на attachInterrupt (прерывание, функция, режим), чтобы ознакомиться с его кодовой частью. Обратите внимание, что не все контакты MCU могут генерировать прерывания.

С точки зрения электроники, статья Arduino Tutorial, Arduino inputs объясняет это довольно хорошо. Вероятно, вы хотите иметь подтягивающий резистор на выводе, чтобы он обычно был высоким и замыкался на землю при нажатии кнопки.