Создание класса в классе

Вопросы программирования в системе Ардуино
Piterson1
Сообщения: 1
Зарегистрирован: 07 май 2021, 10:03

Создание класса в классе

Сообщение Piterson1 » 07 май 2021, 11:02

Доброго времени суток!
Хотел бы поблагодарить Эдуарда за уроки, они очень фундаментальные и доходчивые.

Подскажите пожалуйста как возможно создать класс в классе?
Когда я пытаюсь это сделать, он выдаёт ошибку.
Хотел сделать объект "Пневмопривод" на котором один выход (1 - выдвинут 0 - втянут) и два входа от концевых гирконов (на выдвижение и на втягивание).
Когда подали "1" - ждем когда сработает один датчик, когда подали "0" - ждем другой датчик.
И выдаёт ошибки.
Смотрел на форумах ответ на этот вопрос. На одной странице писали, что класс в классе в ардуино в принципе невозможно создать.
Что Вы на этот счет думаете?

Такой вот простой код (прошу не судить за мелкие ошибки, если они есть):
#include <Button.h>
#include <FlexiTimer2.h>

#define IN_PINS_TIME 8

//Пневмоприводы
#define CONTROL_PIN 9
#define PULL_IN_SENS_PIN A4
#define PUSH_SENS_PIN A5

class PneumoDrive{
public:
PneumoDrive(int controlPin, int pullInSensPin, int pushSensPin, int sensorTime);
void setPneumoDrive(boolean setting);
void checkPneumoDrive();
Button pullInSensor;
Button pushSensor;
int controlOutputPin;
};
//Конструктор класса PneumoDrive:
PneumoDrive::PneumoDrive(int controlPin, int pullInSensPin, int pushSensPin, int sensorTime){ // sensorTime - количество тактов опроса
Button pullinSensor(pullInSensPin, sensorTime);
Button pushSensor(pushSensPin, sensorTime);
controlOutputPin=controlPin;
}

char cmd;
PneumoDrive pneumoDrive1(CONTROL_PIN, PULL_IN_SENS_PIN, PUSH_SENS_PIN, IN_PINS_TIME);

void setup(){
Serial.begin(9600);
FlexiTimer2::set(1, timerInterrupt); // прерывание по таймеру для опроса всех входов
FlexiTimer2::start(); //разрешить прерывание по таймеру.

}

void loop() {
cmd=Serial.read();
if(cmd=='0')
pneumoDrive1.setPneumoDrive(0);
if(cmd=='1')
pneumoDrive1.setPneumoDrive(1);
}

void timerInterrupt() {
pneumoDrive1.pullInSensor.scanState();
pneumoDrive1.pushSensor.scanState();
}

void PneumoDrive::setPneumoDrive(bool setting){
Serial.print("waiting_for_setting_");
while(1){
asm("nop; nop; nop; nop; nop;\n"); //вместо delay
if((setting==true) && (pushSensor.flagPress == true)) //если выдвигаем цилиндр 1 то ждем когда сработает гиркон 1.2 и погасится гиркон 1.1
break;
if((setting == false) && (pullInSensor.flagPress == true))
break;
}
Serial.print("break_done\n");
}


Вернуться в «Программирование Ардуино»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя