Помогите attachInterrupt не видит имя функции

Здравствуйте. Не могу понять, почему attachInterrupt не видит имя функции.
(Compilation error: ‘ai0’ was not declared in this scope

#include “EncButton.h”
EncButton enc(4, 5, 6);
volatile unsigned int temp, counter = 0;

void setup() {
Serial.begin (9600);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);

attachInterrupt (0, ai0, CHANGE);
attachInterrupt (1, ai1, CHANGE);
}
int click = 0;
int forming = 0;
int puancon = 0;
int moving = 0;
int air = 0;
void loop() {
enc.tick();
enc.click();
if (enc.click()) {
click +=1;
if (click > 4) {click =1;}
if (click ==1){Serial.print("forming ");Serial.println(forming);}
if (click ==2){Serial.print("puancon ");Serial.println(puancon);}
if (click ==3){Serial.print("moving ");Serial.println(moving);}
if (click ==4){Serial.print("air ");Serial.println(air);}

if (click == 1){
if (enc.right()) { forming -= 1;Serial.print("forming ");Serial.println(forming);}
if (enc.left()) { forming += 1; Serial.print("forming ");Serial.println(forming);}
}
if (click == 2){
if (enc.right()) { puancon -= 1; Serial.print("puancon ");Serial.println(puancon); }
if (enc.left()) { puancon += 1; Serial.print("puancon ");Serial.println(puancon); }
}
if (click == 3){
if (enc.right()) { moving -=1; Serial.print("moving ");Serial.println(moving);}
if (enc.left()) { moving += 1; Serial.print("moving ");Serial.println(moving);}
}
if (click == 4){
if (enc.right()) { air -=1; Serial.print("air ");Serial.println(air); }
if (enc.left()) { air += 1; Serial.print("air ");Serial.println(air); }
}

if (counter >= 600) {counter = 1 ;}
if (counter <= 1) {counter = 600 ;}
if( counter != temp ){
Serial.println (counter); // значение счётчика и печать в порт
temp = counter;
}
}

void ai0 (){
if(digitalRead(3) == LOW){
counter ++;
}else{
counter --;
}
}
void ai1 (){
if(digitalRead(2) == LOW){
counter – ;
} else {
counter ++ ;
}
}

Спасибо.

Аптамуш, IQ надо бы повыше. Чтоб хотя бы код вставлять научиться

5 лайков

loop не закрыт … и это не единственная ошибка !

1 лайк

Хрен пойми че со скобками.

Вроде наоборот, закрыт раньше времени)

Объявления функций ai0, ai1 перенести раньше чем вызывается attachInterrupt.

Компилятор не умеет смотреть по коду вперед без специальных подсказок.

1 лайк

В Arduino IDE это не обязательно !!!

1 лайк

Если не отступать от стандартов, то не придется ловить глюки от “допущений” и “послаблений” Arduino IDE, которые немного хромают.

1 лайк

В какой-то из версий не срабатывало. При чем не срабатывало странно: была одна функция без объявления, все компилировалось, добавил еще одну, перестало. Долго тупил, пока понял в чем дело.

А ТСа и след простыл… пора уголовку вводить за такое. Смуту наведут и сливаются.

если не отступать от стандартов, это говно (ардуино иде) внезапно не нужно

А если бы ещё некоторые не кидались, как голодные, на эту смуту, глядишь и повода бы не было огорчаться.

Есть грешок) Но позвольте-с!
Я уставший. Пятница. Скучно…)

Это да. Пятница требует развлечений.)

Ну вы мне и накидали)) критику принял, будем работать) спасибо)