第一部分:关于接线

1.首选在接收机的任意一个空置插口引出一个vcc和GND,直接连接arduino 5v 和GND,这时你的arduino就和飞机连成了一套系统,可以共同工作了。

2.接下来把接收机供给飞控的四根信号线从飞控上卸下,连接在arduino上的任意数字端口,我连接的是22,24,26,28,而这四根线的作用分别是AIL副翼,ELE升降,THR油门,RUD方向

下面具体解释这四个名词,其实这些词都是固定翼飞机的,那么在多旋翼无人机上的意思是什么呢,很简单,

AIL副翼信号:它是控制飞机在水平面俯仰的,也就是说当飞机俯下去的时候,飞机会产生一个向前的分解力,就会向前飞,向后仰的时候会分解一个向后的力飞机向后飞。

ELE升降:它其实不是真正控制无人机升降的,是和副翼一样,不过是向左倾斜和向右倾斜而已,飞机就向左向右飞。

THR油门:其实是控制飞机起飞和下降的,油门大飞机就直升,油门小了就将下来了。

RUD方向:它是控制飞机水平转动的,左转右转,飞机的方向改变,但位置不会变。

把这几个接口接上arduino后,我们开始用arduino来看看这个信号的奥秘,其实它就是PWM信号,不信你直接接一个舵机去试试,舵机会随着遥控的控制而转动,那么怎么读取这个PWM信号呢,我们从源代码开始讲!

#include<Servo.h>;
#define AIL1  22   //定义前后飞引脚为22号
#define ELE2  24   //定义左右飞引脚为24号
#define THR3  26   //定义升降引脚为26号
#define RUD4  28   //定义左右转引脚为28
#define LED   13   //定义LED灯
unsigned long INAIL;   //定义四个输入变量
unsigned long INELE;
unsigned long INTHR;
unsigned long INRUD;
int OUTAIL;            //定义四个输出变量
int OUTELE;
int OUTTHR;
int OUTRUD;
Servo AIL;
Servo ELE;
Servo THR;
Servo RUD;void setup()
{  pinMode(AIL1,0);    //初始化引脚状态pinMode(ELE2,0);pinMode(THR3,0);pinMode(RUD4,0);pinMode(LED,1);AIL.attach(4);ELE.attach(5);THR.attach(6);RUD.attach(7);Serial.begin(9600);
}
void loop()
{digitalWrite(LED,1);INAIL = pulseIn(AIL1, 1);   //读取之前定义的四个引脚状态INELE = pulseIn(ELE2, 1);INTHR = pulseIn(THR3, 1);INRUD = pulseIn(RUD4, 1);OUTELE = map(INELE,1010,2007,47,144);  //计算OUTTHR = map(INTHR,1010,2007,47,144);OUTRUD = map(INRUD,1010,2007,47,144);AIL.write(OUTAIL);  //输出ELE.write(OUTELE);THR.write(OUTTHR);RUD.write(OUTRUD);int dianya = analogRead(A0);   //读取A0输入值float wendu = dianya * (5.0 / 1023.0*100);    //计算温度Serial.print("AIL=");Serial.print(INAIL);Serial.print(" ELE=");Serial.print(INELE);Serial.print(" THR=");Serial.print(INTHR);Serial.print(" RUD=");Serial.print(INRUD);Serial.print(" wendu=");Serial.println(wendu);      digitalWrite(LED,0);delay(5);}

第二部分:编程函数:https://www.arduino.cc/reference/en/#functions

附基础教程系列:https://www.arduino.cn/thread-76154-1-1.html

Arduino自带的Servo函数及其语句,先来介绍一下舵机函数的几个常用语句吧。

1、attach(接口)——设定舵机的接口,只有9或10接口可利用。

2、write(角度)——用于设定舵机旋转角度的语句,可设定的角度范围是0°到180°。

3、read()——用于读取舵机角度的语句,可理解为读取最后一条write()命令中的值。

4、attached()——判断舵机参数是否已发送到舵机所在接口。

5、detach()——使舵机与其接口分离,该接口(9或10)可继续被用作PWM接口。

注:以上语句的书写格式均为“舵机变量名.具体语句()”例如:myservo.attach(9)。//可以定义舵机接口,9或10

Arduino自带的Servo函数库只可以同时控制两个模拟舵机。而且最好接到数字9 、 10脚上。想控制多个舵机就要使用到Arduino的Pwm功能了。

下面介绍几个常用函数:

pinMode()

[数字I / O]

描述

将指定引脚配置为输入或输出。有关引脚功能的详细信息,请参见(数字引脚)的说明。

从Arduino 1.0.1开始,可以使用模式INPUT_PULLUP使能内部上拉电阻。此外,INPUT模式明确禁用内部上拉。

句法

pinMode(pin, mode)

参数

pin:要设置其模式的引脚编号

modeINPUTOUTPUT,或INPUT_PULLUP。(有关功能的更完整说明,请参阅(数字引脚)页面。)

返回

没有

示例代码

该代码使得数字销13 OUTPUT与切换之HIGHLOW

void setup()
{pinMode(13,OUTPUT); //将数字引脚13设置为输出
}void loop()
{digitalWrite(13,HIGH); //设置数字引脚13延迟(1000); //等一下digitalWrite(13,LOW); //将数字引脚13设置为关闭延迟(1000); //等一下
}

pulseIn()

[高级I / O]

描述

读取引脚上的脉冲(HIGH或者LOW)。例如,如果valueHIGHpulseIn()等待从销去LOWHIGH,开始计时,然后等待销去LOW并停止定时。返回脉冲的长度(以微秒为单位)或放弃,如果超时内未收到完整脉冲,则返回0。

该功能的时间已经凭经验确定,并且可能在较长脉冲中显示错误。适用于长度为10微秒至3分钟的脉冲。

句法

pulseIn(pin, value)

pulseIn(pin, value, timeout)

参数

pin:要读取脉冲的引脚编号。(INT)

value:要读取的脉冲类型:HIGH或LOW。(INT)

timeout(可选):等待脉冲开始的微秒数; 默认是一秒(无符号长)

返回

脉冲的长度(以微秒为单位),如果在超时之前没有脉冲开始,则为0(无符号长整数)

示例代码

该示例计算了引脚7上脉冲的持续时间。

int pin = 7;
unsigned long duration;void setup()
{pinMode(pin, INPUT);
}void loop()
{duration = pulseIn(pin, HIGH);
}

digitalWrite()

[数字I / O]

描述

将数字HIGHLOW值写入数字引脚。

如果引脚已配置为OUTPUTwith pinMode(),则其电压将设置为相应的值:5V(或3.3V板上3.3V)HIGH,0V(接地)LOW

如果引脚配置为a INPUTdigitalWrite()将使能(HIGH)或禁用(LOW)输入引脚上的内部上拉。建议设置pinMode()INPUT_PULLUP使能内部上拉电阻。有关更多信息,请参阅数字引脚教程。

如果未设置pinMode()OUTPUT,并将LED连接到引脚,则在呼叫时digitalWrite(HIGH),LED可能显得暗淡。如果没有明确设置pinMode()digitalWrite()将启用内部上拉电阻,它就像一个大限流电阻。

句法

digitalWrite(pin, value)

参数

pin:引脚号

valueHIGHLOW

返回

没有

示例代码

该代码使得数字销13的OUTPUT和由之间交替切换它HIGHLOW以一秒的步伐。

void setup()
{pinMode(13,OUTPUT); //将数字引脚13设置为输出
}void loop()
{digitalWrite(13,HIGH); //设置数字引脚13延迟(1000); //等一下digitalWrite(13,LOW); //将数字引脚13设置为关闭延迟(1000); //等一下
}

备注和警告

模拟输入引脚可用作数字引脚,称为A0,A1等。

map()

描述

将数字从一个范围重新映射到另一个范围。也就是说,fromLow的值将被映射到toLow,值从hightoHigh,值介于两者之间,等等。

不会将值限制在该范围内,因为超出范围的值有时是有意义且有用的。该constrain()函数可以之前或此功能后使用,如果限制范围是期望的。

注意,任一范围的“下限”可以大于或小于“上限”,因此该map()函数可以用于反转数字范围,例如

y = map(x, 1, 50, 50, 1);

该函数也很好地处理负数,所以这个例子

y = map(x, 1, 50, 50, -100);

也是有效的,效果很好。

map()函数使用整数数学,因此当数学可能表明它应该这样做时,不会生成分数。分数剩余部分被截断,并且不是圆形或平均的。

南叔的表述:map函数其实就是归一化,可以归到任意区间

句法

map(value, fromLow, fromHigh, toLow, toHigh)

参数

value:要映射的数字

fromLow:值的当前范围的下限

fromHigh:值的当前范围的上限

toLow:值的目标范围的下限

toHigh:值的目标范围的上限

返回

映射的值。

示例代码

/* Map an analog value to 8 bits (0 to 255) */
void setup() {}void loop()
{int val = analogRead(0);val = map(val, 0, 1023, 0, 255);analogWrite(9, val);
}

附录

对于数学倾向,这是整个函数

long map(long x, long in_min, long in_max, long out_min, long out_max)
{return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

第三部分:引脚说明

数码针脚

Arduino上的引脚可配置为输入或输出。本文档解释了这些模式下引脚的功能。虽然本文档的标题涉及数字引脚,但重要的是要注意绝大多数Arduino(Atmega)模拟引脚可以以与数字引脚完全相同的方式进行配置和使用。

配置为INPUT的引脚属性

Arduino(Atmega)引脚默认为输入,因此当您将它们用作输入时,不需要将它们显式声明为带有pinMode()的输入。以这种方式配置的引脚被称为处于高阻抗状态。输入引脚对它们采样的电路提出极小的要求,相当于引脚前面100兆欧的串联电阻。这意味着将输入引脚从一种状态移动到另一种状态所需的电流非常小,并且可以使这些引脚对于实现电容式触摸传感器,将LED读取为光电二极管或使用方案读取模拟传感器等任务非常有用比如RCTime。

然而,这也意味着,配置为pinMode(引脚,INPUT)的引脚没有连接到它们,或连接到它们的未连接到其他电路的引线,将报告引脚状态看似随机的变化,从而拾取电源噪声环境,或电容耦合附近引脚的状态。

上拉电阻,引脚配置为INPUT

如果不存在输入,通常将输入引脚转向已知状态是有用的。这可以通过在输入端添加上拉电阻(至+ 5V)或下拉电阻(对地电阻)来实现。对于上拉或下拉电阻,10K电阻是一个很好的值。

配置为INPUT_PULLUP的引脚属性

Atmega芯片内置20K上拉电阻,可通过软件访问。通过将pinMode()设置为INPUT_PULLUP来访问这些内置上拉电阻。这有效地反转了INPUT模式的行为,其中HIGH表示传感器关闭,LOW表示传感器开启。

该上拉值取决于所使用的微控制器。在大多数基于AVR的电路板上,该值保证在20kΩ和50kΩ之间。在Arduino Due上,它介于50kΩ和150kΩ之间。有关确切值,请参阅电路板上微控制器的数据表。

将传感器连接到配置有INPUT_PULLUP的引脚时,另一端应接地。在简单开关的情况下,这会导致引脚在开关打开时读取高电平,在按下开关时读取低电平。

上拉电阻提供足够的电流,使连接到已配置为输入的引脚的LED灯亮。如果项目中的LED似乎工作,但非常模糊,这可能是正在发生的事情。

上拉电阻由相同的寄存器(内部芯片存储器位置)控制,控制引脚是高电平还是低电平。因此,当引脚为INPUT时,配置为使上拉电阻导通的引脚,如果引脚随后通过pinMode()切换到OUTPUT,则引脚将配置为高电平。这也适用于另一个方向,如果切换到带有pinMode()的输入,则保持高电平状态的输出引脚将设置上拉电阻。

在Arduino 1.0.1之前,可以通过以下方式配置内部上拉:

pinMode(引脚,INPUT); //设置引脚输入
digitalWrite(pin,HIGH); //打开上拉电阻

注意:数字引脚13比其他数字引脚更难用作数字输入,因为它上面连有一个LED和电阻,焊接在大多数电路板的电路板上。如果你启用其内部20k上拉电阻,它将挂在1.7V左右,而不是预期的5V,因为板载LED和串联电阻将电压降低,这意味着它总是返回LOW。如果必须将引脚13用作数字输入,则将其pinMode()设置为INPUT并使用外部下拉电阻。

引脚的属性配置为OUTPUT

配置为带有pinMode()的OUTPUT的引脚被称为处于低阻抗状态。这意味着它们可以为其他电路提供大量电流。Atmega引脚可以为其他器件/电路提供高达40 mA(毫安)的电流(提供正电流)或吸收(提供负电流)。这是足够的电流,可以明亮地点亮LED(不要忘记串联电阻),或运行多个传感器,但电流不足以运行大多数继电器,电磁阀或电机。

Arduino引脚上的短路或试图从它们运行高电流器件会损坏或破坏引脚中的输出晶体管,或损坏整个Atmega芯片。这通常会导致微控制器中的“死”引脚,但剩余的芯片仍能正常工作。因此,最好将OUTPUT引脚连接到具有470Ω或1k电阻的其他器件,除非特定应用需要从引脚获取最大电流。

通过一个无人机代码例程学会ardunio相关推荐

  1. AI一分钟|阿里云解释故障原因:触发了一个未知代码Bug;清华蝉联ISC18超算竞赛总冠军...

     ▌阿里云发说明解释昨日故障原因:触发了一个未知代码Bug 今日凌晨,阿里云官方微博针对昨日出现的大规模故障问题作出官方回应.声明称,在运维上的一个操作失误,导致一些客户访问阿里云官网控制台和使用 ...

  2. 自己实现了一个C语言例程,加深对宏、大小端、typeof宏、offsetof宏、指针变量、结构体、联合体的理解

    如题所述,最近时间在复习C语言.自己实现了一个C语言例程,以加深对宏.大小端.typeof宏.offsetof宏.指针变量.结构体.联合体的理解.关于细分知识后续有空再填充- swap宏的使用: 对应 ...

  3. 教你编写一个机器学习代码也能使用的单元测试

    摘要: 想不想节省重新训练数据的时间?想不想让你的研究成果有个质的飞跃?来看看这些单元测试,助你一臂之力. 注:这篇文章自从发布出来,就受到读者的好评和关注,因此,我编写了一个机器学习测试库,请点击链 ...

  4. 转:我,一个写代码的

    转自: http://blog.csdn.net/cenwenchu79/article/details/3978554 我,一个写代码的 写blog已经快两年了,起初仅仅是为了自己"备个案 ...

  5. 我,一个写代码的(转载)

    原文地址:我,一个写代码的(转载) 作者:依然 写blog已经快两年了,起初仅仅是为了自己"备个案",结果慢慢演变成为了"分享成瘾".前几天一个朋友给我的blo ...

  6. css游戏代码_介绍CSSBattle-第一个CSS代码搜寻游戏

    css游戏代码 by kushagra gour 由kushagra gour 介绍CSSBattle-第一个CSS代码搜寻游戏 (Introducing CSSBattle - the first ...

  7. iOS 11开发教程(七)编写第一个iOS11代码Hello,World

    iOS 11开发教程(七)编写第一个iOS11代码Hello,World 代码就是用来实现某一特定的功能,而用计算机语言编写的命令序列的集合.现在就来通过代码在文本框中实现显示"Hello, ...

  8. 关于HOG特征的一个Python代码

    关于HOG特征的一个Python代码,如下所示: import numpy as np import Image cimport numpy as np cimport cythoncdef exte ...

  9. sqlite 0转换为bit_Cisco Talos在SQLite中发现了一个远程代码执行漏洞

    思科Talos的研究人员在SQLite中发现了一个use-after-free() 的漏洞,攻击者可利用该漏洞在受影响设备上远程执行代码. 攻击者可以通过向受影响的SQLite安装发送恶意SQL命令来 ...

最新文章

  1. 业务逻辑组件化android,AppJoint 极简 Android 组件化方案
  2. 智慧农场-专项启动会议
  3. 磁棒 锰锌铁氧体高频磁条22x5x3mm,作为天线性能测试
  4. 关于在本地idea当中提交spark代码到远程的错误总结(第二篇)
  5. quot;愿有人陪你颠沛流离|Be With Youquot;
  6. 实战tcpdump看RST
  7. python列表删除重复项_五分钟学会三种Excel重复项删除方法,工作效率大杀器!...
  8. 高级语言反汇编程序的函数调用过程
  9. linux问题排查常用命令详解
  10. 关于win32与win64的兼容性问题
  11. 利用微软的平台进行Office文档的在线查看
  12. NILMTK——因子隐马尔可夫之隐马尔可夫
  13. 登上热搜!这可能是中国最穷的211大学
  14. M1芯片Mac使用原生brew安装软件速度过慢的解决办法
  15. IHttpHandler给图片加水印
  16. 1分钟读懂人口普查大数据——第七次人口普查数据可视化BI分析
  17. JS 右键鼠标事件练习
  18. 美国计算机游戏设计大学排名,USNews美国大学游戏设计专业排名
  19. maya阿诺德渲染失败_[转载]Arnold 渲染器for maya 安装不了的解决办法
  20. Bluetooth core 5.0 ---------- BR/EDR 安全简单配对(BR/EDR secure simple pairing)

热门文章

  1. 2014,寻找企业信息管理软件的蓝海
  2. 地磁校准 椭球校准_如何校准电视
  3. php 讯飞语音评测_科大讯飞提供语音评测能力 再一次颠覆语音市场
  4. 代理专利申请流程包括哪些阶段及费用多少钱?
  5. java 调用百度翻译接口
  6. 【性能测试】性能测试的概念和术语介绍 性能测试分类(了解每种测试的目的)
  7. 查询邮件服务器MX记录
  8. Java程序员如何不断提高自己的专业技能
  9. 好程序员web前端培训分享做H5页面需要学什么
  10. 每日 30 秒 ⏱ 复制内容到剪贴板