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:

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

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

C++:
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.

C++:
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:

 

Çevrimiçi personel

Forum istatistikleri

Konular
6,950
Mesajlar
118,718
Üyeler
2,822
Son üye
lalemasall

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top