Здравствуйте форумчане! Сломал голову, уж... Решил вникнуть в создание своих библиотек, но в примерах только вывод функции, например Serial.println("Hello WORD!"); Есть... Библиотека : "MyLib" Класс : "MyClass" Функция : "MyFunc" Функция вычисляет переменные: "MyX" и "MyZ" Вопрос: Как в своем скетче .ino в void loop() обратиться (например, присвоить "x" значение "MyX" ) значения этих переменных. P.S. Будьте великодушны, тогда когда я, гуманитарий, увлекся автоматикой для своей дачи, я годился в дедушки многим читавшим этот пост о помощи)))
Что вы пытаетесь сделать - непонятно. И скорее всего, вы пытаетесь это сделать заведомом неправильно. Вам нужно читать настоящий учебник по программированию. Примеры в среде ардуино рассчитаны на людей, уже умеющих программировать. По ним вы ничего хорошего не сделаете.
Хм, на днях написал скетч (конечно не без помощи при помощи примеров) для управления духовой плиты, с 2 сенсорами ( Термопарой и термистором), выводом на дисплей, учитывая гистерезис. Управление температурой как ручное так и вводимое из ранее введенное. Моя жена раскраивает ткани на лазерном раскройщике. Но я никогда не писал библиотеки сложные, максимум вывод на дисплей. И чего не понятного в вопросе?! Какой-то переменной в ad функции класса будет при неком событии будет присвоено значение, например 567. Я хочу это значение присвоить переменной заявленной в скетче и использовать в других функциях скетча.
Если вам нужно вернуть значение из функции, используйте return. Если вам нужно управлять переменными, выделенными/задекларированными после декларации функции, используйте ссылки (&).
ладно, думал, что поймут меня... тогда так... вот из файла .h ================= #ifndef ButtonStart_h #define ButtonStart_h class ButtonStart { public: ButtonStart(int _pin); void StartButton(); int Start = 0; private: int _pin; }; #endif ================ из .cpp ButtonStart::ButtonStart(int pin) { pinMode(pin, OUTPUT); _pin = pin; } void ButtonStart::StartButton() { if (Start == 0) { Serial.println ("Press to START"); if ( digitalRead(_pin) == HIGH) { Start = 1; Serial.println ("START"); } } } =============== хочу в файле .ino #include <ButtonStart.h> ButtonStart BS(13); int x = 0; void setup() { Serial.begin(9600); } void loop() { BS.StartButton(); x = ХОЧУ ПРИСВОИТЬ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ START из class ButtonStart { public: ButtonStart(int _pin); void StartButton(); int Start = 0; } Что-то противоречит с логикой первоначального вопроса?
пример могут мне написать, а не раздел самоучителя где искать. Область видимости переменных я понимаю. Мне синтаксис присваивания не ясен. По моему опыту, большинство автоматики для бытовых нужд сделано просто, не стоит усложнять то, что можно сделать просто.
Это называется не "переменная в функции класса", а "поле экземпляра класса". И обратиться к нему можно так же, как вы и к полю с методом обратились. BS.Start
С C++ принципиально не работаю... В основном просто Си... но не редко пользуюсь. А вот так для .ino прокатит?: Код (C++): BS.Start = <значение>; <значение> - какое-то числовое значение типа int. И если не затруднит... вставляйте не как текст, а как код!
Игорь! Мне как раз наоборот нужно))) Где то ... x = BS.Start; ПРОКАТИЛА!!!! Ошибка в написании переменной была! Всем СПАСИБО!
START от Start отличить не может, а жена у него лазером кроит, как же. Читайте книжку и не балабольте больше никогда.
Спойлер: sketch.ino Код (C++): /*sketch.ino*/ //------------------------------------------ #include "ButtonStart.h" //--------компановка-------------------------------- ButtonStart BS(/*пин входа*/2,/*пин выхода*/13); int x = 0; //--------main()----------------------------------- void setup() { Serial.begin(9600); BS.setup(); } void loop() { BS.StartButton(); } /*Скетч использует 2034 байт (6%) памяти устройства. Всего доступно 32256 байт. Глобальные переменные используют 206 байт (10%) динамической памяти, оставляя 1842 байт для локальных переменных. Максимум: 2048 байт. */ Спойлер: ButtonStart.cpp Код (C++): /*ButtonStart.cpp*/ #include "ButtonStart.h" /*Конструктор ButtonStart Описание конструктор создает класс ввод inpin: пин светодиода outpin: пин кнопки вывод нет */ ButtonStart::ButtonStart(int inpin, int outpin) : _inpin(inpin), _outpin(outpin) { } /*Функция setup Описание инициализирует класс ввод нет вывод нет */ void ButtonStart::setup() { pinMode(_inpin, INPUT); pinMode(_outpin, OUTPUT); digitalWrite(_outpin, LOW); Serial.println ("Press to START"); Start = 0; } /*Функция StartButton Описание первое нажатие зажигает кнопку ввод нет вывод нет */ void ButtonStart::StartButton() { if (digitalRead(_inpin) == HIGH) { Start = 1; Serial.println ("START"); digitalWrite(_outpin, HIGH); } } Спойлер: ButtonStart.h Код (C++): /*ButtonStart.h*/ #ifndef ButtonStart_h #define ButtonStart_h #include <Arduino.h> class ButtonStart { private: int _inpin ;// пин входа int _outpin;// пин выхода public: ButtonStart(int _inpin, int _outpin); void setup(); void StartButton(); int Start; }; #endif //ButtonStart_h