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=)
А если я надумаю в новом классе создать несколько объектов и там ими манипулировать?
Например так:
class Shassi{ Servo left; Servo right; void forward(){ left.write(180); right.write(0); } void backward(){ left.write(0); right.write(180); } }Как быть тогда? Где смысл идиологии?
Как быть тогда? Где смысл идиологии?
Вы невнимательно прочитали постпро наследование. И неплохо бы почитать о наследовании в с++ вообще (в теории то биш)
Что такое "наследование" я знаю, в C++ оно не силно отлечается от JAVA. Один, два плюса и то не факт что плюса.
Топик я читал внемательно и решение своей проблемы не нашол. Как я уже выше писал:
А если я надумаю в новом классе создать несколько объектов и там ими манипулировать?
Например так:
class Shassi{ Servo left; Servo right; void forward(){ left.write(180); right.write(0); } void backward(){ left.write(0); right.write(180); } }Как быть тогда? Где смысл идиологии?
Я не думаю что вот такое изменения спасёт меня:
class Shassi: public Servo{ ...Или я ошибаюсь? Если ошибаюсь, то простите пожалуста и если не трудно дайте ссылку на описание "наследования" с помощью которого можно решить мою проблему. А то все те статьи которые мне предлогает google не чего стоющего по моей проблеме не содержат.
class Shassi: public Servo{ ...Или я ошибаюсь?
Здесь вы потеряете вашу логическую структуру данных 8=)
Shassi прийдётся оформить отдельным окном-модулем и в нём завести два класса
А ещё лучше завести "массив" классов, виртуальный "надкласс", тогда всё это можно будет обрабатывать в цикле одинаковой процедурой...
Что-то типа
То есть далее работаем со всем объектами типа Shassi в однообразном цикле
я уже забыл как, лет 5 не занимался C++. Помню только, что там использовался индекс с модификатором static, как бы общий и доступный всем созданным наследникам виртуального класса. Насколько это, в том числе и виртуальные функции, доступны в Arduino, не знаю
Извините, что отвечаю поверхностно, с ходу, без надлежащего углубления в проблему.
А ещё лучше завести "массив" классов, виртуальный "надкласс", тогда всё это можно будет обрабатывать в цикле одинаковой процедурой... Что-то типа
Что такое "надкласс" и как его создать? И как это должно выглядеть в массиве?