Пишу программу с использованием классов. в Setup создаю объект и могу с ним работать (мигал светодиодом в цикле), но вот в loop объект не передается. код программы: Код (C++): class OwenClass { int adress; }; void setup() { OwenClass Reactor; Reactor.adress=1; pinMode(13,OUTPUT); } void loop() digitalWrite(13,Reactor.adress); Reactor.adress=!Reactor.adress; delay(300); } ошибка 'Reactor' was not declared in this scope
Вот такой код работает Код (C++): class OwenClass { int adress; }; void setup() { OwenClass Reactor; Reactor.adress=1; pinMode(13,OUTPUT); for (int i=0;i<100;i++) { digitalWrite(13,Reactor.adress); Reactor.adress=!Reactor.adress; delay(300); } } void loop() { }
Не знаю. Смотря что вы сделать собрались. Обычно поля инициализируются в теле класса, или в конструкторе.
Код (C++): class OwenClass { public: bool adress; }; OwenClass Reactor; //<---поставить void setup() { // OwenClass Reactor; <---убрать Reactor.adress = 1; pinMode(13, OUTPUT); } void loop(){ digitalWrite(13, Reactor.adress); Reactor.adress = ! Reactor.adress; delay(300); }
Вот подкину пример для размышления Код (C++): /* Class_do_btn.ino #1 кнопка ->2 #2 кнопка ->3 #3 кнопка ->4 Принцип кода:нажал на кнопку , отправилось сообщение в сериал */ //#1 кнопка 1 #include "Cl_do_btn.h" const byte btn1_pin = 2; Cl_do_btn Do_btm1; // создать void func_1() { Serial.println("Press Bottom 1"); } //#2 кнопка 2 const byte btn2_pin = 3; Cl_do_btn Do_btm2; // создать void func_2() { Serial.println("Press Bottom 2"); } //#3 кнопка 3 const byte btn3_pin = 4; Cl_do_btn Do_btm3; // создать void func_3() { Serial.println("Press Bottom 3"); } void setup() { Serial.begin(9600); //#1 кнопка 1 Do_btm1.setup(btn1_pin); //#2 кнопка 2 Do_btm2.setup(btn2_pin); //#3 кнопка 3 Do_btm3.setup(btn3_pin); } void loop() { //#1 кнопка 1 Do_btm1.loop(& func_1 ); //#2 кнопка 2 Do_btm2.loop(& func_2 ); //#3 кнопка 3 Do_btm3.loop(& func_3 ); } Спойлер: Cl_do_btn.cpp Код (C++): /*Cl_do_btn.cpp */ #include "Arduino.h" #include "Cl_do_btn.h" Cl_do_btn::Cl_do_btn() { } void Cl_do_btn::setup(byte _pin) { btn_pin = _pin; pinMode(btn_pin, INPUT_PULLUP);// подключить кнопку 1 с подтяжкой btn = digitalRead(btn_pin) ; // прочитать реальное значение на выводе } void Cl_do_btn::loop(void (* _func_1)()) { if (! bounce_btn && btn != digitalRead(btn_pin)) { // если прошел фронт изм на выводн bounce_btn = 1; // выставить флаг past = millis(); // сделать временую засветку } else if ( bounce_btn && millis() - past >= 5 ) { // если прошло антидребезговое время bounce_btn = 0; // то снять флаг btn_old = btn ; btn = digitalRead(btn_pin) ; // прочитать реальное значение на выводе if (btn_old && ! btn) _func_1() ; } } Спойлер: Cl_do_btn.h Код (C++): /*Cl_do_btn.h */ #ifndef Cl_do_btn_h #define Cl_do_btn_h #include "Arduino.h" class Cl_do_btn { public: Cl_do_btn(); void setup(byte _pin); void loop(void (* _func_1)()); private: byte btn_pin ; bool btn, btn_old; bool bounce_btn = 0; // антидребезговый флаг uint32_t past = 0 ; }; #endif //Cl_do_btn_h