Объектно-ориентированное программирование
- Войдите на сайт для отправки комментариев
Втр, 24/05/2011 - 11:56
Написал вчера свою первую программу :)
Однако встретив в среде программирования упоминание об ANSI/ISO CPP мне подумалось, что Справочник языка http://arduino.ru/Reference наверное неполон. Взял руководство по этой версии С++. Так и вышло.
Вот что у меня получилось для управления моторами через мотор-шилд:
#define DEBUG
class C2Motors {
private:
int _Speed; int _Vector;
int PortM1; int PortM1Dir;
int PortM2; int PortM2Dir;
float _k1; float _k2;
void applychanges() {
int k1, k2;
analogWrite(PortM1,abs(k1=_Speed*_k1)*0);
analogWrite(PortM2,abs(k2=_Speed*_k2)*0);
Serial.print(k1); Serial.print(" "); Serial.println(k2);
if (k1>=0) analogWrite(PortM1Dir,255); else analogWrite(PortM1Dir,0);
if (k2>=0) analogWrite(PortM1Dir,255); else analogWrite(PortM1Dir,0);
};
public:
//constructor
C2Motors(int M1, int M1D, int M2, int M2D){
PortM1=M1; PortM1Dir=M1D; PortM2=M2; PortM2Dir=M2D;
_Speed=0; _Vector=0;
pinMode(PortM1,OUTPUT);
pinMode(PortM1Dir,OUTPUT);
pinMode(PortM2,OUTPUT);
pinMode(PortM2Dir,OUTPUT);
digitalWrite(PortM1,0);
digitalWrite(PortM2,0);
#ifdef DEBUG
Serial.begin(9600);
Serial.println(" C2Motors constructor executed");
#endif
};
//constructor w/defaults
C2Motors() {C2Motors(6,7,5,4);};
//destructor
//~C2Motors() {
// digitalWrite(PortM1,0);
// digitalWrite(PortM2,0);
// #ifdef DEBUG
// Serial.println("destructor executed");
// #endif
//};
int getspeed() {
return _Speed;
};
void setspeed(int Spd) {
if (Spd!=_Speed) {
constrain(Spd, -255, 255);
_Speed=Spd;
applychanges();
}
};
void setspeed(int Spd, int Vec) {
if (Spd!=_Speed || Vec!=_Vector) {
constrain(Spd, -255, 255);
constrain(Vec, -180, 180);
if (Vec>=0) _k2=1; else _k2=Vec/90.0+1.0;
if (Vec<=0) _k1=1; else _k1=1.0-Vec/90.0;
_Speed=Spd;
_Vector=Vec;
applychanges();
}
};
int getvector() {
return _Vector;
};
void setvector(int Vec) {
if (Vec!=_Vector) {
constrain(Vec, -180, 180);
if (Vec>=0) _k2=1; else _k2=Vec/90.0+1.0;
if (Vec<=0) _k1=1; else _k1=1.0-Vec/90.0;
_Vector=Vec;
applychanges();
}
};
};
Пользоваться очень просто:
C2Motors Mtr;
void setup() {
Serial.begin(9600);
Serial.println(" Setup done");
}
void loop() {
Mtr.setspeed(200,0); delay(5000); //прямо 5 сек
Mtr.setspeed(150); delay(2000); //сбросить газ 2 сек
Mtr.setspeed(150,90); delay(3000); //поворачивать направо
Mtr.setvector(0); delay(2000); //продолжить прямо 3 сек
}
Деструктор пришлось закоментировать, так как он по факту почему-то выполнялся сразу после конструктора. Не понял с какого бодуна...
А что за справочник по СРР?
Да, их навалом. Вот, напрмиер, http://www.comms.engg.susx.ac.uk/fft/programming/ANSI-ISOCppProfessionalProgrammersHandbook.pdf
PS
Ой, я извиняюсь. Там в строчках 10 и 11 исходного кода "*0" надо убрать. Это я добавил в отладочных целях.
А для начинающих, из книг что-то посоветуете и на русском?
Даже и не знаю :) что посоветовать по этой теме. Мне упомянутого выше справочника более чем хватает.
Наверное можно начать отсюда http://ru.wikibooks.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%...
Вопрос также и в том, насколько это всё применимо к Arduino, и насколько вообще целесообразно?