raspberry Piの課題

C++ タクトスイッチでサーボモータをコントロールする

C++でタクトスイッチでPWMを変化させてサーボモータを操作します

タクトスイッチの読み込んで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;
}

このサーボモータの角度の精度はそれほどでもないのです

サーボモータ