Объектно-ориентированное программирование
- Войдите на сайт для отправки комментариев
Втр, 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, и насколько вообще целесообразно?