nanopc-T4_RK3399 舵机控制代码
本人近期使用 nanopc-T4 开发板发现不支持 GPIO 库(已询问官方,明确回复不支持),无法通过 GPIO 简单便携的控制pwm输出,从而控制舵机的旋转,于是只能通过 wiringpi 库来简易控制,相关代码如下,如有不对,欢迎提出讨论。
本人近期使用 nanopc-T4 开发板发现不支持 GPIO 库(已询问官方,明确回复不支持),无法通过 GPIO 简单便携的控制pwm输出,从而控制舵机的旋转,于是只能通过 wiringpi 库来简易控制,相关代码如下,如有不对,欢迎提出讨论。
nanopc-T4 开发板,驱动舵机程序 (300->2400 逆时针转180度)
#include <wiringPi.h>
# include <stdio.h>
int main(void)
{
wiringPiSetup() ;
// 设置舵机的控制信号线 : 7
pinMode (7, OUTPUT) ;
int ZUOzuo=2400;
for(;;){
digitalWrite(7,HIGH);
delayMicroseconds(ZUOzuo);
digitalWrite(7,LOW);
delayMicroseconds(ZUOzuo);
if(ZUOzuo==300)
{
break;
}
ZUOzuo-=1;
printf("%d\n", ZUOzuo);
}
}
ubuntu C语言 命令行输入参数 demo
#include <stdio.h>
int main(int argc, const char *argv[])
{
int i = 0;
printf("argc = %d\n",argc);
for (i = 0; i < argc; i++ )
{
printf("argv[%d] = %s\n",i,argv[i]);
}
return 0;
}
C 语言编译命令:
gcc -Wall -o testInput testInput.cpp -lwiringPi -lwiringPiDev -lpthread -lrt -lm -lcrypt
命令行输入参数演示
命令行输入度数(10-170),舵机响应并旋转
// test.c
#include <wiringPi.h>
# include <stdio.h>
# include <stdlib.h>
// 接收一个输入度数
int main(int argc, const char *argv[])
{
int pat=200;
int moveAngle=300;
int num = atoi(argv[1]);
// 判断度数的范围,并将度数转化为驱动值
if(num<=180 && num>=0){
// 驱动值为 300-2400,代表度数0-180
moveAngle=300+11.7*num;
}
if(num<45){
pat=500;
}
wiringPiSetup() ;
//设置舵机控制引脚
pinMode (7, OUTPUT) ;
// 给舵机一段时间的反应,持续输出控制值
for (int i = 0; i < pat; i++)
{
digitalWrite(7,HIGH);
delayMicroseconds(moveAngle);
digitalWrite(7,LOW);
delayMicroseconds(2500-moveAngle);
}
printf("%d\n", moveAngle);
printf("%d\n", num);
printf("%d\n", pat);
return 0;
}
// 执行命令,输入执行代码,并跟上需要旋转的度数(逆时针)
./test 90
python 调用 C 控制舵机旋转
c 程序
# 2py.c
#include <wiringPi.h>
# include <stdio.h>
# include <stdlib.h>
// 接收一个输入度数
int foo(int argc)
{
int pat=200;
int pinControl=7;
int moveAngle=300;
int num = argc;
// 判断度数的范围,并将度数转化为驱动值
if(num<=180 && num>=0){
// 驱动值为 300-2400,代表度数0-180
moveAngle=300+11.7*argc;
}
if(num<45){
pat=500;
}
wiringPiSetup() ;
//设置舵机控制引脚
pinMode (pinControl, OUTPUT) ;
// 给舵机一段时间的反应,持续输出控制值
for (int i = 0; i < pat; i++)
{
digitalWrite(pinControl,HIGH);
delayMicroseconds(moveAngle);
digitalWrite(pinControl,LOW);
delayMicroseconds(2500-moveAngle);
}
printf("%d\n", moveAngle);
printf("%d\n", num);
printf("%d\n", pat);
printf("%d\n", pinControl);
return 0;
}
c 程序编译时需要加上 -shared ,代表可以被分享
gcc -Wall -o 2py 2py.c -lwiringPi -lwiringPiDev -lpthread -lrt -lm -lcrypt -shared
python 程序 :
import ctypes
ll = ctypes.cdll.LoadLibrary
# 链接 C
lib = ll("./2py")
data = input("请输入1号舵机转动角度 ")
print(data)
lib.foo(int(data))
print ('***finish***')