Переменная из функции класса библиотеки...

Тема в разделе "Arduino & Shields", создана пользователем ВладимирЧ, 17 авг 2017.

  1. Здравствуйте форумчане!
    Сломал голову, уж... Решил вникнуть в создание своих библиотек, но в примерах только вывод функции, например Serial.println("Hello WORD!");
    Есть...
    Библиотека : "MyLib"
    Класс : "MyClass"
    Функция : "MyFunc"
    Функция вычисляет переменные: "MyX" и "MyZ"
    Вопрос: Как в своем скетче .ino в void loop() обратиться (например, присвоить "x" значение "MyX" ) значения этих переменных.

    P.S. Будьте великодушны, тогда когда я, гуманитарий, увлекся автоматикой для своей дачи, я годился в дедушки многим читавшим этот пост о помощи)))
     
  2. rkit

    rkit Гуру

    Что вы пытаетесь сделать - непонятно. И скорее всего, вы пытаетесь это сделать заведомом неправильно.
    Вам нужно читать настоящий учебник по программированию. Примеры в среде ардуино рассчитаны на людей, уже умеющих программировать. По ним вы ничего хорошего не сделаете.
     
  3. Хм, на днях написал скетч (конечно не без помощи при помощи примеров) для управления духовой плиты, с 2 сенсорами ( Термопарой и термистором), выводом на дисплей, учитывая гистерезис. Управление температурой как ручное так и вводимое из ранее введенное. Моя жена раскраивает ткани на лазерном раскройщике.
    Но я никогда не писал библиотеки сложные, максимум вывод на дисплей.
    И чего не понятного в вопросе?! Какой-то переменной в ad функции класса будет при неком событии будет присвоено значение, например 567. Я хочу это значение присвоить переменной заявленной в скетче и использовать в других функциях скетча.
     
  4. rkit

    rkit Гуру

    Непонятно.что это такое. Набор слов
     
  5. Igor68

    Igor68 Гуру

    Вы про глобальные переменные?????????
     
  6. rkit

    rkit Гуру

    Если вам нужно вернуть значение из функции, используйте return.
    Если вам нужно управлять переменными, выделенными/задекларированными после декларации функции, используйте ссылки (&).
     
  7. ладно, думал, что поймут меня...
    тогда так...
    вот из файла .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;

    }
    Что-то противоречит с логикой первоначального вопроса?

     
  8. пример могут мне написать, а не раздел самоучителя где искать.
    Область видимости переменных я понимаю. Мне синтаксис присваивания не ясен.
    По моему опыту, большинство автоматики для бытовых нужд сделано просто, не стоит усложнять то, что можно сделать просто.
     
  9. rkit

    rkit Гуру

    Это называется не "переменная в функции класса", а "поле экземпляра класса".
    И обратиться к нему можно так же, как вы и к полю с методом обратились.
    BS.Start
     
  10. Igor68

    Igor68 Гуру

    С C++ принципиально не работаю... В основном просто Си... но не редко пользуюсь.
    А вот так для .ino прокатит?:
    Код (C++):

    BS.Start = <значение>;
     
    <значение> - какое-то числовое значение типа int.
    И если не затруднит... вставляйте не как текст, а как код!
     
    Последнее редактирование: 17 авг 2017
  11. Игорь! Мне как раз наоборот нужно)))
    Где то ... x = BS.Start;

    ПРОКАТИЛА!!!! Ошибка в написании переменной была!
    Всем СПАСИБО!
     
    Последнее редактирование: 17 авг 2017
  12. rkit

    rkit Гуру

    START от Start отличить не может, а жена у него лазером кроит, как же.
    Читайте книжку и не балабольте больше никогда.
     
  13. Злой Вы rkit, я сам нашел, а Вы болтате больше, называется УМНИЧАТЬ!
     
  14. qwone

    qwone Гик

    Код (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 байт.
    */
    Код (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);
      }
    }
    Код (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
     
    Tomasina нравится это.