Включение класса с файлами .h и .cpp

c++

Я пытаюсь использовать класс в файле .ino. Код:

.ino-файл

#include <LED.h>

int Pin1 = 13;
int Pin2 = 12;
int Pin3 = 11;
LED led;
void setup() {
  pinMode(Pin1,OUTPUT);
  pinMode(Pin2,OUTPUT);
  pinMode(Pin3,OUTPUT);
  digitalWrite(Pin1,LOW);
  digitalWrite(Pin2,LOW);
  digitalWrite(Pin3,LOW);
}

void loop() {
  led.on(Pin1);
  delay(2);
  led.on(Pin2);
  delay(2);
  led.on(Pin3);
  delay(2);
}

Файл .h

#ifndef LED_h
#define LED_h

class LED{
public:
    void on(int);
    void off(int);
};

#endif

файл .cpp

#include <stdio.h>
#include <Arduino.h>
#include "LED.h"    

void LED::on(int PIN){
    digitalWrite(PIN,HIGH);
}

void LED::off(int PIN){
    digitalWrite(PIN,LOW);
}

Компилятор Arduino выявляет ошибку объявления объекта:

LEDC:6: ошибка: "LED" не указывает тип
LEDC.ino: В функции 'void loop()':
LEDC:17: ошибка: "светодиод" не был объявлен в этой области

Как мне тогда объявить объекты в Arduino?

Способ, которым я помещаю файлы в папки, подобен прикрепленному изображению:

, 👍1

Обсуждение

В вашей программе нет ничего синтаксически неправильного — она прекрасно компилируется в UECIDE. Я предполагаю, что это как-то связано с Arduino IDE. Какую версию IDE вы используете? Я знаю, что недавно они внесли некоторые изменения в то, как работает компиляция (или, может быть, *не* работает)., @Majenko

Это Ардуино 1.5.6., @Amin R.

Ваши файлы LED.cpp и LED.h находятся в подпапке LEDD. В вашем файле LEDC.ino вы должны использовать #include "LEDD/LED.h", @AlwaysLearning


2 ответа


Лучший ответ:

1

Эта версия IDE (похоже, она меняется от версии к версии) различается между включениями с <...> и включениями с "...".

Если вы используете <...>, он просматривает только области системы и библиотеки. Если вы используете "...", он также просматривает ваш скетч.

Итак, в вашем основном файле INO измените светодиод, включаемый с:

#include <LED.h>

Кому:

#include "LED.h"

и он должен скомпилироваться.

,

Все равно не компилируется. Может быть, я не так раскладываю файлы по папкам? Смотрите изображение в основном вопросе., @Amin R.

Я сделал это, добавив две новые вкладки — LED.cpp и LED.h и вставив в них ваш код., @Majenko


0

Все, что вам нужно сделать, это в файле (.ino)

#include <LED.h>

int Pin1 = 13;
int Pin2 = 12;
int Pin3 = 11;
LED led1;
LED led2;
LED led3;
void setup() {
  pinMode(Pin1,OUTPUT);
  pinMode(Pin2,OUTPUT);
  pinMode(Pin3,OUTPUT);
  digitalWrite(Pin1,LOW);
  digitalWrite(Pin2,LOW);
  digitalWrite(Pin3,LOW);
}

void loop() {
  led1.on(Pin1);
  delay(2);
  led2.on(Pin2);
  delay(2);
  led3.on(Pin3);
  delay(2);
}
,