#ifndef __SERVOMOTOR_H__
#define __SERVOMOTOR_H__
#include <stdio.h>
#include <wiringPi.h>
/*使用C语言GPIO库wiringPi约定的编号
*/
#define servopin 26 // 设置舵机驱动脚到数字口
int angle; // 定义角度变量
int pulsewidth; // 定义脉宽
void IO_ServoInit()
{
printf("Servomotor Init begin\n");
pinMode(servopin,OUTPUT); // 初始化舵机IO口
printf("Servomotor Init end\n");
}
void servopulse(int angle) // 生成一个脉冲函数,模拟PWM值
// 定义一个脉冲函数,用来模拟产生PWM值;
// 通过接口产生占空比不同的方波,模拟产生PWM信号进行舵机定位。
{
int pulsewidth;
pulsewidth = (angle * 11) + 500; // 将角度转化为500-2480的脉宽值
// 舵机的控制一般需要一个20ms的时基脉冲,
// 脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。
// 0.5ms->0度;1.0ms->45度;1.5ms->90度;2.0ms->135度;2.5ms->180度;
digitalWrite(servopin, HIGH); // 将舵机接口电平置高
delayMicroseconds(pulsewidth); // 延时脉宽值的微秒数
digitalWrite(servopin, LOW); // 将舵机接口电平置低
delay(20 - pulsewidth/1000); // 延时周期内剩余时间
}
void Detection_front() // 车头朝前就是90度,右侧是0度,左侧是180度
{
for(int i = 0; i <= 15; i++) // 产生PWM个数,等效延时以保证能转到响应角度
{
servopulse(90);
}
}
void Detection_left()
{
for(int i = 0; i <= 15; i++)
{
servopulse(0); // SG90: 舵机的180度在小车的左侧,0度在小车的右侧。
// SRM - 102: 舵机的180度在小车的右侧,0度在小车的左侧。
}
}
void Detection_right()
{
for(int i = 0; i <= 15; i++)
{
servopulse(180);
}
}
/*int main(void)
{
wiringPiSetup();
if (-1 == wiringPiSetup())
{
printf("Setup wiringPi failed!");
return 1;
}
IO_ServoInit();
while(1)
{
Detection_front();
delay(1000);
Detection_left();
delay(1000);
Detection_front();
delay(1000);
Detection_right();
delay(1000);
Detection_front();
}
}*/
#endif