Constructor içinde gereksiz karmaşa

Sokisati

Üye
Katılım
24 Şubat 2024
Mesajlar
39
Sensörden okunan veriye göre PID hesaplaması yapıp dik duracak bir robotun kodunu yazarken böyle iğrenç bir şey oluştu nihayetinde:

Kod:
SelfBalancingRobot kaanRobot(motor1SpeedPin,motor1DirectionPin1,motor1DirectionPin2,motor2SpeedPin,motor2DirectionPin1,\
                             motor2DirectionPin2,dtCoefficent,setPoint,kP,kI,kD,lowerLimitForSum,upperLimitForSum);

.cpp dosyasındaki hali daha da kötü:

Kod:
SelfBalancingRobot::SelfBalancingRobot(pin motor1SpeedPin, pin motor1DirectionPin1,\
 pin motor1DirectionPin2,pin motor2SpeedPin,pin motor2DirectionPin1,pin motor2DirectionPin2\
 ,float dtCoefficent,float setPoint, float kP, float kI, float kD,float lowerLimitForSum, float upperLimitForSum)
: motor1(motor1SpeedPin,motor1DirectionPin1,motor1DirectionPin2), motor2(motor2SpeedPin,motor2DirectionPin1,motor2DirectionPin2),\
 pidController(dtCoefficent,setPoint,kP,kI,kD,lowerLimitForSum,upperLimitForSum)
{
    
}


Baktım baktım, ne yapamacağımı bilemedim. Yazdığım hiçbir parametre gereksiz değil, hatta daha da fazla parametre eklemem gerekecek LED veya potansiyometre için vs.
Ama çok karmaşık ve uzun duruyor. Bu karmaşa normal mi? Normal değilse temiz bir şekilde nasıl düzeltirim?

Aklıma şöyle bir fikir geliyor ama bu da amatör bir yöntem sanırım.

Kod:
Motor motor1(...);
Motor motor2(...);
MpuSensor mpuSensor(...);
PIDController pidController(...);
SelfBalancingRobot kaanRobot(motor1,motor2,mpuSensor, pidController);
 
Struct kullanabilirsin C de , cpp ise class içinde halletmen çok daha güzel olur.
 
Aklıma şöyle bir fikir geliyor ama bu da amatör bir yöntem sanırım.

Bence bu yapı daha iyi. Şöyle bir örnek vereyim. diyelim motor üzerinde bir işlem yapan bir fonksiyon yazdın. Senin ilk yapıda ya iki fonksiyon yazacaksın ve her birisi ilgili motoru manipule edecek, yada fonksiyona söyleyeceksin hangi motor için işlem yapacağını.

Ama amatör bulduğun yapıda, tek fonksiyon olacak ve ona da ilgili motorun adresini (veya daha iyisi, referansını) vereceksin o kadar.
 
tüm işlemleri neden tek bir fonksiyonda topluyorsun ?

mesela pid fonksiyonunu bağımsız yazabilirsin. kP,kI,kD bunlar dinamik olarak değişmeyecekse define ile bir sabit tanımlayabilirsin. ya da bağımsız bir pid_init() içinde gerekli değişkenleri set edersin.

diğer sadece 1 defa set edilecek değerleri de mesela motor2DirectionPin2 başka bir system_init içinde set edersin.

şurada güzel bir örnek var:

 

Forum istatistikleri

Konular
7,547
Mesajlar
126,396
Üyeler
3,060
Son üye
selo

Son kaynaklar

Son profil mesajları

Python Geliştirmeye eklediğim yapay zeka sunucusu, yeni başlayanlar için roket etkisi
Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
Freemont2.0 posta Freemont2.0 wrote on posta's profile.
Merhabalar :)
Back
Top