Servo.h обёрнутый в другой CLASS не работает.
- Войдите на сайт для отправки комментариев
Вс, 14/10/2012 - 16:20
Хотел написать один единственный класс в котором все мне нужные функции и объекты уже созданны.
Начал с библиотеки Servo.h вот что написал для начало.
#include "Arduino_Robot.h" #include "lib/Steuerung.h" Steuerung robot; void setup() { } void loop() { robot.stap(); delay(1000); }
/* * Steuerung.h * * Created on: 14.10.2012 * Author: Ich */ #ifndef STEUERUNG_H_ #define STEUERUNG_H_ #include "Arduino.h" #include "Servo.h" class Steuerung { public: Steuerung(); void blink(); void stap(); Servo servo; int pos; }; #endif /* STEUERUNG_H_ */
/* * Steuerung.cpp * * Created on: 14.10.2012 * Author: Ich */ #include "Arduino.h" #include "Steuerung.h" Steuerung::Steuerung() { servo.attach(12); pinMode(13, OUTPUT); pos = 0; } void Steuerung::blink(){ digitalWrite(13, !digitalRead(13)); } void Steuerung::stap(){ servo.write(pos); pos += 10; if(pos>180){ pos=0; } blink(); }
Вообщем всё просто. Но стоит скомпелировать и загрузить этот код в ардуину, серво сразу встаёт колом, не двигается и наченает ужасно греться. А должна каждую секунду поворачиваться на 10°.
Если делаю без моего класса, т.е. сразу в Arduino_Robot.cpp то всё работает.
Как запокавать библиотеку Servo в свой класс?
Надо наследовать класс servo
вот здесь я случайно писал про наследование
http://arduino.ru/forum/obshchii/pro-arduino-ide
Надо попробывать. Только вот я не понимаю, почему создание Объекта Servo в другом классе приводт к таким последствиям. На сколько мне позволяют мои знания JAVA, это не должно влиять на работу объекта.
Может быть это каким-то оброзом связанно с таймерами? Кто-нибудь уже сталкивался с подобной проблемой?
Я думаю это нарушение идеологии С++;
Как бы, какой смысл создавать объект в классе, когда можно сразу получить класс со свойствами этого объекта 8=)
А если я надумаю в новом классе создать несколько объектов и там ими манипулировать?
Например так:
Как быть тогда? Где смысл идиологии?
Как быть тогда? Где смысл идиологии?
Вы невнимательно прочитали постпро наследование. И неплохо бы почитать о наследовании в с++ вообще (в теории то биш)
Что такое "наследование" я знаю, в C++ оно не силно отлечается от JAVA. Один, два плюса и то не факт что плюса.
Топик я читал внемательно и решение своей проблемы не нашол. Как я уже выше писал:
А если я надумаю в новом классе создать несколько объектов и там ими манипулировать?
Например так:
Как быть тогда? Где смысл идиологии?
Я не думаю что вот такое изменения спасёт меня:
Или я ошибаюсь? Если ошибаюсь, то простите пожалуста и если не трудно дайте ссылку на описание "наследования" с помощью которого можно решить мою проблему. А то все те статьи которые мне предлогает google не чего стоющего по моей проблеме не содержат.
Или я ошибаюсь?
Здесь вы потеряете вашу логическую структуру данных 8=)
Shassi прийдётся оформить отдельным окном-модулем и в нём завести два класса
А ещё лучше завести "массив" классов, виртуальный "надкласс", тогда всё это можно будет обрабатывать в цикле одинаковой процедурой...
Что-то типа
То есть далее работаем со всем объектами типа Shassi в однообразном цикле
я уже забыл как, лет 5 не занимался C++. Помню только, что там использовался индекс с модификатором static, как бы общий и доступный всем созданным наследникам виртуального класса. Насколько это, в том числе и виртуальные функции, доступны в Arduino, не знаю
Извините, что отвечаю поверхностно, с ходу, без надлежащего углубления в проблему.
А ещё лучше завести "массив" классов, виртуальный "надкласс", тогда всё это можно будет обрабатывать в цикле одинаковой процедурой... Что-то типа
Что такое "надкласс" и как его создать? И как это должно выглядеть в массиве?