ошибка: недопустимое использование нестатической функции-члена AttachInterrupt(0,count,RISING);

XRPM_COUNTERS.h:15:5: error: expected unqualified-id before string constant

     ISR(PCINT0_vect) {

     ^

In file included from C:\Documents and Settings\SAM\Desktop\automation_1_A_NEW_AAA\automation_1_A_NEW_AAA.ino:10:0:

XRPM_COUNTERS.h:72:1: error: expected ';' after class definition

 }

 ^

sketch\XRPM_COUNTERS.h: In function 'void XRPMLoop()':

XRPM_COUNTERS.h:77:19: error: 't' was not declared in this scope

   if ((millis() - t) > 300) rpm = 0;

                   ^

XRPM_COUNTERS.h:77:29: error: 'rpm' was not declared in this scope

   if ((millis() - t) > 300) rpm = 0;

                             ^

XRPM_COUNTERS.h:79:17: error: 'ot' was not declared in this scope

   else if (t != ot) {

                 ^

XRPM_COUNTERS.h:81:5: error: 'rpm' was not declared in this scope

     rpm = 60000.0 / (float)(t - ot);

     ^

XRPM_COUNTERS.h:87:13: error: 'rpm' was not declared in this scope

   lcd.print(rpm);

             ^

XRPM_COUNTERS.h:93:14: error: 'printVu' was not declared in this scope

   printVu(rpm);

              ^

sketch\XRPM_COUNTERS.h: At global scope:

XRPM_COUNTERS.h:97:1: error: expected declaration before '}' token

 };

 ^

exit status 1
expected unqualified-id before string constant

Мой исходный код

class XRPM_COUNTERS {

  private:
#include <Wire.h>  // Поставляется с Arduino IDE
#define interrupt_pin2 A8 //Определение аналогового контакта (аналоговые контакты 16-21)



    volatile unsigned long t = 0;

    volatile unsigned long ot = 0;



    ISR(PCINT0_vect) {

      if (PINB & 1) {

        ot = t;

        t = millis();

      }

    }


    // актуализация визора (откалибрована для максимальной скорости 3000 об/мин, баста мудар или доблесть)

#define max_rpm 3000

    void printVu(int r) {

      int i = map(r, 0, max_rpm, 0, 20);

      for (int n = 0; n < 20; n++) {

        lcd.print((char)(n < i ? 255 : ' '));

      }

    }


  public:

    void XRPMSetup() {
      lcd.begin(16, 2);  // инициализируем ЖК на 20 символов 4 строки, включаем подсветку


      lcd.print("RPM with PCINT");

      MCUCR = (1 << ISC01) | (1 << ISC00);

      PCICR |= (1 << PCIE0);

      PCMSK0 |= (1 << PCINT0);

      pinMode(interrupt_pin2, INPUT); //Сделаем вывод вводом

      digitalWrite(interrupt_pin2, HIGH); //Включаем подтягивающий резистор на аналоговом выводе

      interrupts();

    }



    unsigned int rpm = 0;


}
void XRPMLoop() {

  //lcd.setCursor(0,3);lcd.print(millis()-t);lcd.print(" ");

  if ((millis() - t) > 300) rpm = 0;

  else if (t != ot) {

    rpm = 60000.0 / (float)(t - ot);

  }

  lcd.setCursor(0, 1);

  lcd.print(rpm);

  lcd.print(" rpms    ");

  lcd.setCursor(0, 2);

  printVu(rpm);

}

};
XRPM_COUNTERS XRPM;

, 👍-2

Обсуждение

Форматируйте свой вопрос так, чтобы люди могли видеть, где заканчиваются сообщения об ошибках и начинается код., @AnT

Возможный дубликат [ожидаемый неквалифицированный идентификатор перед строковой константой](https://arduinoprosto.ru/q/64954/expected-unqualified-id-before-string-constant), @sempaiscuba


1 ответ


1

Вы поместили директиву #include внутри определения класса. Не размещайте директивы #include внутри определений классов. (Если только вы не включили файл, специально предназначенный для этой цели.)

Директивы

#include для обычных файлов заголовков обычно должны находиться где-то в верхней части файла, отдельно от любых других объявлений.

,