ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

nanopc-T4_RK3399 舵机控制代码

2021-11-17 09:04:36  阅读:245  来源: 互联网

标签:度数 控制代码 argc 舵机 int T4 300 RK3399 include


本人近期使用 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

命令行输入参数演示

nanopc笔记-1636982424058-20211115212024.png

命令行输入度数(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***') 

版权信息:CC BY-NC-SA 4.0 (自由转载-非商用-相同方式共享-保持署名)

本文首发于:https://blog.gitnote.cn/post/nanopc-t4_rk3399-duo-ji-kong-zhi-dai-ma/

标签:度数,控制代码,argc,舵机,int,T4,300,RK3399,include
来源: https://www.cnblogs.com/qiaoyurensheng/p/15565609.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有