模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

1437查看 | 10回复

[求助贴] 用遥控器的一个三档开关控制舵机的程序怎么写?

[复制链接]
发表于 2018-8-1 23:14:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
大师们 ,小弟刚刚学习51,很多地方不是很明白,比如说怎么用 ”一个三档开关“控制舵机的角度?
发表于 2018-8-2 02:07:02 | 显示全部楼层
这个不太懂
回复 支持 反对

使用道具 举报

发表于 2018-8-2 06:53:56 | 显示全部楼层
坐等大师指点
回复 支持 反对

使用道具 举报

发表于 2018-8-2 07:54:46 | 显示全部楼层
路过帮顶
回复 支持 反对

使用道具 举报

发表于 2018-8-2 10:49:22 | 显示全部楼层
在输出PWM  脉宽设置为1MS  1.5MS 2 MS 就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-3 16:38:02 | 显示全部楼层
具体怎么设置,大师可以把这个代码写出来讲解一下吗,拜托了
回复 支持 反对

使用道具 举报

发表于 2018-8-3 23:20:33 | 显示全部楼层
STC   
检测IO设置为高阻输入模式 (可以多个)   (cio1)
另加一个IO(挽推) 串个10K到检测IO用作上拉和下拉 (c3s)
开关中脚接检测IO 另外两脚分别接正负极
程序上 :
c3s=1 读flag1=cio1
延时一下
c3s=0 读flag2=cio1
两次都低 输出0
两次都高 输出1
不一样     输出2



回复 支持 反对

使用道具 举报

发表于 2018-8-12 22:21:41 | 显示全部楼层
三挡开关在遥控接收器上输出的pwm高电平时间分别是1ms 1.5ms 2ms    对应舵机的0度 45度 90度

用单片机的话,先用一个端口接受pwm数据,然后根据接受的pwm数据选择怎么发出pwm数据
下面发个我写的接收两档遥控信号的灯控程序给你参考一下,我也新学,如果有不对,还请不要见怪
  1. #include<reg51.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sfr AUXR=0x8e;

  5. sbit LEDL=P3^3;                //左边LED
  6. sbit LEDR=P3^5;                //右边LED
  7. sbit LEDB=P3^4;                //后边LED
  8. sbit pwm=P3^1;                //pwm信号

  9. uchar mode,time,t1;
  10. uint t0,duty;
  11. bit pwmnow,pwmold;

  12. void init()
  13. {
  14.         EA=1;
  15.         ET0=1;
  16.         AUXR |= 0x80;                //定时器时钟1T模式
  17.         TMOD &= 0xF0;                //设置定时器模式
  18.         TL0 = 0x88;                //设置定时初值        10us
  19.         TH0 = 0xFF;                //设置定时初值
  20.         TR0 = 1;                //定时器0开始计时
  21.        
  22. }

  23. void getpwm()
  24. {
  25.         while(pwm);                        //跳过高电平
  26.         while(!pwm);                //跳过低电平
  27.         t0=0;
  28.         while(pwm);                        //计算高电平时间
  29.         time=t0;
  30.         if(time>70&&time<120)
  31.                 pwmnow=0;
  32.         if(time>170&&time<220)
  33.                 pwmnow=1;
  34.         if(pwmnow!=pwmold)
  35.                 if(++mode==4)
  36.                         mode=0;
  37.         pwmold=pwmnow;
  38. }

  39. main()
  40. {
  41.         init();
  42.        
  43.         while(1)
  44.         {
  45.                 while(mode==0)
  46.                 {
  47.                         LEDL=LEDR=LEDB=1;
  48.                         while(mode==0)
  49.                         {
  50.                                 if(t0>10000)
  51.                                 {
  52.                                         getpwm();
  53.                                         t0=0;
  54.                                 }
  55.                         }
  56.                 }
  57.                
  58.                 while(mode==1)
  59.                 {
  60.                         LEDL=LEDR=LEDB=0;
  61.                         while(mode==1)
  62.                         {
  63.                                 if(t0>10000)
  64.                                 {
  65.                                         getpwm();
  66.                                         t0=0;
  67.                                 }
  68.                         }
  69.                 }
  70.                
  71.                 while(mode==2)
  72.                 {
  73.                         t0=0;
  74.                         LEDL=0;LEDR=LEDB=1;
  75.                         while(t0!=20000);
  76.                         LEDL=1;LEDR=0;
  77.                         while(t0!=40000);
  78.                         LEDR=1;LEDB=0;
  79.                         while(t0!=60000);
  80.                         LEDB=1;
  81.                        
  82.                         t0=0;
  83.                         getpwm();
  84.                         if(mode!=2)
  85.                                 break;
  86.                         while(t0!=20000);
  87.                        
  88.                         for(t1=0;t1<3;t1++)
  89.                         {
  90.                                 t0=0;
  91.                                 LEDL=LEDR=LEDB=0;
  92.                                 while(t0!=50000);
  93.                                
  94.                                 t0=0;
  95.                                 LEDL=LEDR=LEDB=1;
  96.                                 getpwm();
  97.                                 if(mode!=2)
  98.                                         break;
  99.                                 while(t0!=20000);
  100.                         }
  101.                 }
  102.                
  103.                 while(mode==3)
  104.                 {
  105.                         while(duty!=100)
  106.                         {
  107.                                 t0=0;
  108.                                 LEDL=LEDR=LEDB=0;
  109.                                 while(t0<duty);
  110.                                 LEDL=LEDR=LEDB=1;
  111.                                 while(t0<100);
  112.                                 if(++t1==10)
  113.                                 {
  114.                                         t1=0;
  115.                                         duty++;
  116.                                 }
  117.                         }
  118.                        
  119.                         LEDL=LEDR=LEDB=0;
  120.                         getpwm();
  121.                         LEDL=LEDR=LEDB=1;
  122.                         if(mode!=3)
  123.                                 break;
  124.                        
  125.                         while(duty!=0)
  126.                         {
  127.                                 t0=0;
  128.                                 LEDL=LEDR=LEDB=0;
  129.                                 while(t0<duty);
  130.                                 LEDL=LEDR=LEDB=1;
  131.                                 while(t0<100);
  132.                                 if(++t1==10)
  133.                                 {
  134.                                         t1=0;
  135.                                         duty--;
  136.                                 }
  137.                         }
  138.                        
  139.                         getpwm();
  140.                 }
  141.         }
  142. }

  143. void Timer0_Toutine() interrupt 1 using 1
  144. {
  145.         t0++;
  146. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2018-8-28 12:43:08 | 显示全部楼层
不懂帮顶,不是模拟信号的
回复 支持 反对

使用道具 举报

发表于 2018-9-9 10:06:16 | 显示全部楼层
大神就是大神啊!顶起
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|关于模吧|APP下载|广告报价|小黑屋|手机版|企业会员|商城入驻|联系我们|模吧 ( 冀公网安备13080502000084号 )

© 2013-2020 Moz8.com 模吧,玩出精彩!