Посчитайте литры топлива с помощью 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++;}
2 ответа
Просто инициализируйте pulse
равным нулю в его определении в строке 2.
Сообщение «импульс: используется без явной инициализации» связано с функцией count_pulse(): компилятор не может анализировать ни поведение кода во время выполнения, ни ваши намерения. Некоторые прерывания могут поступить до запуска цикла(), поэтому на самом деле pulse
вполне может быть увеличен без инициализации. Возможно, вас это не волнует, и вы можете отбросить первые несколько показаний, но компилятор не догадывается (и не должен!) об этом.
Вы объявили 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);
}
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
У вас есть int count_pulse и функция count_pulse, которые сбивают с толку компилятор., @Jot
и добавьте строку прямого объявления
void count_pulse();
передsetup()
, @Juraj@Juraj Разве Arduino IDE не делает это за тебя?, @Gerben
есть некоторая проблема с функцией как параметром, @Juraj