Библиотеки с нуля.

Здесь обсуждаем Arduino
Аватара пользователя
gurvinok
Сообщения: 1480
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Библиотеки с нуля.

Сообщение gurvinok » 28 дек 2015, 21:02

В отдельном файле пишутся функции, а потом этот файл инклюдится. Я по позже напишу. Ща сайт латаю.
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1112
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Библиотеки с нуля.

Сообщение GhostX » 28 дек 2015, 21:12

Хорошо, жду. Очень не хватает этих знаний.
сайт латается этот?
Что то случилось?

Аватара пользователя
gurvinok
Сообщения: 1480
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Библиотеки с нуля.

Сообщение gurvinok » 28 дек 2015, 21:35

Да. Переделываю кусок с 3D моделями.
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1112
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Библиотеки с нуля.

Сообщение GhostX » 30 дек 2015, 08:40

Что то не дождался я примеров и снова в классы полез. Вроде даже что то понял. :)
И вот такой вопрос интересный.
Есть 2 класса, ну или больше не важно, и действия в одном, должны менять ключи в другом. Никак не могу понять как значения переменных из одного класса вынимать, и в другой класс отправлять... Как использовать переменные из другого класса?

Аватара пользователя
gurvinok
Сообщения: 1480
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Библиотеки с нуля.

Сообщение gurvinok » 30 дек 2015, 10:39

Переменные класса это одни из его объекты. Объекты могут быть приватные или публичные. Для того чтобы обращаться к объекту класса нужно его сделать публичным. Напрямую так делать нельзя. По этому для того чтобы обратиться к объекту класса, делают так. Основной класс передает данные своего объекта вспомогательному классу в его публичный объект, а у того в свою очередь можно забрать данные. Или наоборот. Это сделано для выживания классов. Блин, это трудно объяснить так как это вырвано из середины теории ООП.
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1112
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Библиотеки с нуля.

Сообщение GhostX » 30 дек 2015, 11:27

Все довольно таки понятно. Когда часиков 10 за ними посидишь, хочешь не хочешь начинаешь понимать.))
Вспомогательный класс, я еще не встречал. Но в поисках ответа на свой вопрос встречал нечто создающее в себе класс = класс1 что то еще не понял я... но возможно это и было так называемый вспомогательный класс... еще погуглю, что это такое...
я вот тут набросал скетчик маленький, из 2х классов в одном серва живет крутит на право на лево и отслеживает событие(ключ 0 или 1) в случае наступления на парковку прыг. Во второй кнопку поселил. 4 проверки 2 на дребезг и две на нажал/отпустил. 13тый диод сажал, работает кнопка четко.
Как сделать по другому, чтоб кнопкой серву парковать, я знаю! Задача именно из класса вынуть переменную ключа и воткнуть в другой класс, где в зависимости от этого ключа разные действия происходят.
Чтоб время зря не тратить выписал важные строки
строка 31
строка 76
строка 88
строка 109
строка 124
тут ключ который я хочу сделать единым ну или зависимым.
Цель, научится именно такому фокусу.
Вложения
servaknopka.zip
(2.01 КБ) 119 скачиваний
Последний раз редактировалось GhostX 31 дек 2015, 10:02, всего редактировалось 1 раз.

Аватара пользователя
gurvinok
Сообщения: 1480
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Библиотеки с нуля.

Сообщение gurvinok » 30 дек 2015, 15:55

Ну как вариант создать структуру и к ней обращаться из любого класса.

Код: Выделить всё

class MyClass
{
  private:
    int var_1; // Приватная переменная. Доступ из вне класса запрещен

   public:
    int GetData(void); // Функция получения значения переменной
    void SetData(int data); // Функция загрузки данных в переменную
   
};

int MyClass::GetData(void) // Передаем значение переменной другому классу
{
  return var_1;
}

void MyClass::SetData(int data)  // Передаем переменной значение из другого класса
{
  var_1 = data;
}

void setup() {


}

void loop() {


}
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1112
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Библиотеки с нуля.

Сообщение GhostX » 30 дек 2015, 16:59

Оу, я был так близок к решению своей проблемы...
Но что то с синтаксисом косячил... Вообще это моя частая проблема, то скобку не поставлю, то точку с запятой...
Попозже попробую.

Аватара пользователя
GhostX
Сообщения: 1112
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Библиотеки с нуля.

Сообщение GhostX » 31 дек 2015, 11:38

Что то и так и эдак.... постоянно преследует ошибка: was not declared in this scope
Что то я прям чуток не понимаю, где нужно декларировать переменную.
можно пример, вот как есть только с двумя классами?

Код: Выделить всё

class MyClass1
{
// текст
}
class MyClass2
{
// текст
}
void setup() {
}
void loop() {
}

Аватара пользователя
gurvinok
Сообщения: 1480
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Библиотеки с нуля.

Сообщение gurvinok » 31 дек 2015, 12:24

Вот пример блинка на классах.

Код: Выделить всё

class MyClass
{
  private:
    int var_1 = 0; // Приватная переменная. Доступ из вне класса запрещен

   public:
    int GetData(void) // Функция получения значения переменной
      {
        return var_1;
      }
    void SetData(int data) // Функция загрузки данных в переменную
      {
        var_1 = data;
      }
   
}Data;

class MyBlink
{
  
  public:

  void Blink(int flag)
    {      
      if(flag == 1) // Проверяем значение флага
        {
          digitalWrite(13, HIGH); // Если единица, то включаем светодиод
          Data.SetData(0); // Записываем в переменную var_1 в классе MyClass 0
          delay(1000); // Тупим секунду
        }
      else
        {
          digitalWrite(13, LOW); // Если ноль, то выключаем светодиод
          Data.SetData(1); // Записываем в переменную var_1 в классе MyClass 1
          delay(1000); // Тупим секунду
        }
    }
}LED;

void setup() {

  pinMode(13, OUTPUT); // Светодиод

}

void loop() {

LED.Blink(Data.GetData()); // Вызываем функцию блинка из класса MyBlink

}
Если долго мучиться, может быть получится.

Ответить