ошибка: недопустимое использование нестатической функции-члена 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;
@Samir, 👍-2
Обсуждение1 ответ
▲ 1
Вы поместили директиву #include
внутри определения класса. Не размещайте директивы #include
внутри определений классов. (Если только вы не включили файл, специально предназначенный для этой цели.)
#include
для обычных файлов заголовков обычно должны находиться где-то в верхней части файла, отдельно от любых других объявлений.
,
@AnT
Смотрите также:
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
Форматируйте свой вопрос так, чтобы люди могли видеть, где заканчиваются сообщения об ошибках и начинается код., @AnT
Возможный дубликат [ожидаемый неквалифицированный идентификатор перед строковой константой](https://arduinoprosto.ru/q/64954/expected-unqualified-id-before-string-constant), @sempaiscuba