Посчитайте литры топлива с помощью Arduino

В нашей лаборатории мы создали датчик топлива с помощью Arduino, чтобы получать данные о топливе от транспортных средств. Что касается кода ниже, я получаю сообщение об ошибке

ОШИБКА PARSE: 'attachInterrupt': эту функцию необходимо определить.

Не могли бы вы дать совет?

int pin = 2;
volatile unsigned int pulse;
float volume = 0;
float flow_rate =0;
const int pulses_per_litre = 2000;
int count_pulse;

void setup()
{
    Serial.begin(9600);
    pinMode(pin, INPUT);
    attachInterrupt(0, count_pulse, RISING);

}

void loop()
{
    pulse=0;
    interrupts();
    delay(1000); 
    noInterrupts();

    Serial.print("Pulses per second: ");
    Serial.println(pulse);

    flow_rate = pulse * 1000/pulses_per_litre; //

    Serial.print("FUEL FLOW rate: ");
    Serial.print(flow_rate);
    Serial.println(" milliliters per second");

    volume = volume + flow_rate * 0.1; //Time Interval is 0.1 second

    Serial.print("Volume: ");
    Serial.print(volume);
    Serial.println(" milliliters");
}

void count_pulse()
{
pulse++;}

, 👍0

Обсуждение

У вас есть int count_pulse и функция count_pulse, которые сбивают с толку компилятор., @Jot

и добавьте строку прямого объявления void count_pulse(); перед setup(), @Juraj

@Juraj Разве Arduino IDE не делает это за тебя?, @Gerben

есть некоторая проблема с функцией как параметром, @Juraj


2 ответа


0

Просто инициализируйте pulse равным нулю в его определении в строке 2.

Сообщение «импульс: используется без явной инициализации» связано с функцией count_pulse(): компилятор не может анализировать ни поведение кода во время выполнения, ни ваши намерения. Некоторые прерывания могут поступить до запуска цикла(), поэтому на самом деле pulse вполне может быть увеличен без инициализации. Возможно, вас это не волнует, и вы можете отбросить первые несколько показаний, но компилятор не догадывается (и не должен!) об этом.

,

1

Вы объявили count_pulse как переменную, а НЕ как прототип функции.

int pin = 2;
volatile unsigned int pulse;
float volume = 0;
float flow_rate =0;
const int pulses_per_litre = 2000;

void count_pulse(); \\ <--- Function prototype

void setup()
{
    Serial.begin(9600);
    pinMode(pin, INPUT);
    attachInterrupt(0, count_pulse, RISING);
}
,