C++ タクトスイッチでサーボモータをコントロールする
タクトスイッチの読み込んでPWMのヂューティーを変化させると、サーボモータの角度が変化するのを見てみよう
/* * SG90 serbo moter test routine * * GPIO18=SERVO yellow cable * TACK SWITCH=GPIO20,GPIO21 */ #include <iostream> #include <wiringPi.h> #include <softPwm.h> using namespace std; int SERVO = 18; /* 0-180 angle */ int set_angle(int angle) { if (angle < 0) return 0; if (angle >180) return 0; double duty; duty = angle / 9.8 + 5; softPwmWrite(SERVO, int(duty)); return 1; } int main() { int TACK1 = 20; int TACK2 = 21; int checkData = 0; int inputData = 0; int deg = 90; int ret; if(wiringPiSetupGpio()<0) { cout << "wiring error\n"; return 1; } pinMode(SERVO, OUTPUT); softPwmCreate(SERVO, deg, 100); pinMode(TACK1, INPUT); pinMode(TACK2, INPUT); pullUpDnControl(TACK1,PUD_DOWN); pullUpDnControl(TACK2,PUD_DOWN); set_angle(deg); while(true) { inputData = digitalRead(TACK1); delay(120); if(inputData==1 ) { deg+=10; ret=set_angle(deg); if (ret==0) deg -=10; } inputData = digitalRead(TACK2); delay(120); if(inputData==1 ) { deg-=10; ret=set_angle(deg); if (ret==0) deg +=10; } } return 0; }
このサーボモータの角度の精度はそれほどでもないのです