Классы и объекты в Arduino
- Войдите на сайт для отправки комментариев
Пт, 10/04/2015 - 16:26
Добрый день всем!
Возник такой вопрос.
Правильно ли я понимаю, что при программировании Arduino нельзя создать свои классы и объекты в самой программе? Только с помощью библиотеки?
И Arduino не поддерживает сам в чистом виде ООП?
Создать новый скетч, сохранить его, например с именем Blinker, скопировать скетч ниже, скомпилировать, прошить. Работает?
Blinker:
class Blinker { public: Blinker(int p_delay=2); void blink(); private: int m_delay_ms; }; Blinker::Blinker(int p_delay /*=2*/) : m_delay_ms(p_delay) { } void Blinker::blink() { digitalWrite(13, HIGH); delay(m_delay_ms); digitalWrite(13, LOW); delay(m_delay_ms); } Blinker blink(1000); void setup() { // put your setup code here, to run once: pinMode(13,OUTPUT); } void loop() { // put your main code here, to run repeatedly: blink.blink(); }Громадное спасибо! )
Еще столкнулся с частичным искажением данных, если в классе один из параметров
- массив byte без указания размера.
Может так делать не рекомендуется? А если размер массива указываю сразу, искажений нет.
Или глюк?
Если массив, член класса, без указания размера, то размер его, я даже не знаю, скорей всего пустой, глюки обеспечены. Либо указывать размер при объявлении, либо создавать динамически (не рекомендую). Хотя если динамически и создавать один раз тогда вполне нормально.
Помогите пожалуйста понять, что означает 11 строка скетча?
Почему она начинается с двух точек ":"? Что значит этот символ в данном случае? Даже не знаю, по какому запросу искать?
Я проанализировал и прокомментировал скетч! Кто разбирается, пожалуйста посмотрите, правильно ли я написал?
class Blinker // создаем класс Blinker { // описание класса public: // публичная Blinker(int p_delay=2); // переменная... void blink(); // и функция private: // приватная int m_delay_ms; //переменная }; Blinker::Blinker(int p_delay /*=2*/) // это наверно конструктор класса Blinker ? : m_delay_ms(p_delay) // ????? а вот что это такое??? я не понял { } void Blinker::blink() // функция объекта Blinker называется blink { digitalWrite(13, HIGH); // вкл. delay(m_delay_ms); // пауза digitalWrite(13, LOW); // выкл. delay(m_delay_ms); // пауза } Blinker blink(1000); // объект (или экземпляр) класса blink с переданным в него значением 1000 void setup() { // put your setup code here, to run once: pinMode(13,OUTPUT); } void loop() { // put your main code here, to run repeatedly: blink.blink(); // объект blink с функцией blink10Blinker::Blinker(intp_delay/*=2*/)// это наверно конструктор класса Blinker ?11: m_delay_ms(p_delay)// ????? а вот что это такое??? я не понял12{13}это инициализатор полей класса. В этом месте можно присвоить начальные значения переменным класса. Можно вызвать конструктор этого же класса с другими параметрами.
Спасибо Вам за подсказку! А не могли бы Вы детельнее описать, что делают эти строчки?
Я так понял, что в 10 строке инициализируется переменная
p_delay типа int и ей присваивается значение 2, указанное в 4 строке?Верно? А что происходит дальше? Я так и не понял, что происходит в строке 11Переменная m_delay_ms принимает значение переменной p_delay?
Это эквивалентно записи:
Верно ли я рассуждаю? Может я задаю глупые вопросы, но я ещё никогда не видел строчек на С++, начинающихся с двоеточия! Для чего там оно, так и не понял! Объясните пожалуйста, кому не сложно!
Заранее спасибо!
https://msdn.microsoft.com/ru-ru/library/s16xw1a8.aspx
Иль ты думаешь, тебе тут лекции по С++ чтить будут? Дали пинок в нужную сторону и читай, разбирайса.
Это обычная инициализация полей(свойств класса)
#include "stdafx.h" #include <iostream> using namespace std; class A { public: int i; A(int ii) : i(ii) { cout << i << endl; } }; int main(int argc, char* argv[]) { A a(5); system("pause"); return 0; }есть несколько вариантов инициализации.
https://ru.stackoverflow.com/questions/475616/%D0%9E%D0%BF%D0%B5%D1%80%D...
ПС: по теме. Это говорит что функция находится в данном классе.
Пух, ты бухой? Ты вопрос читал?
Пух, ты бухой? Ты вопрос читал?
/**/ //---------------------------- class Cl_AAA { protected: const byte data; //<-- потому что здесь стоит const public: /*конструктор*/ Cl_AAA(byte d) { data = d; //<-- вот хрен такое пройдет } }; //---------------------------- void setup() { } void loop() { }И этот
/**/ //---------------------------- class Cl_AAA { protected: const byte data; //<-- потому что здесь стоит const public: /*конструктор*/ Cl_AAA(byte d):data(d) { //<-- а вот так залетает } }; //---------------------------- void setup() { } void loop() { }А это так на закуску.
/**/ //---------------------------- class Cl_AAA { protected: const byte data; public: /*конструктор*/ Cl_AAA(byte d): data(d) { } }; //----------------------- class Cl_BBB { protected: const Cl_AAA AAA; //<-- заметьте объект в классе константный public: /*конструктор*/ Cl_BBB(byte d): AAA(d) { // и его и здесь можно инициализировать } }; //------------------------- Cl_BBB BBB(/*data*/10); //---------------------------- void setup() { } void loop() { } /*Скетч использует 488 байт (1%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 10 байт (0%) динамической памяти, оставляя 2038 байт для локальных переменных. Максимум: 2048 байт. */я дал пинок в нужную сторону и дал ссылку на почитать побольше. Имеющий глаза и моск - разбереца. Там и про const написана.
только при чём здесь область видимости aka :: ?
я дал пинок в нужную сторону и дал ссылку на почитать побольше. Имеющий глаза и моск - разбереца. Там и про const написана.
только при чём здесь область видимости aka :: ?