您好,看了您的MCP418编程,我温度转换c语言编程为arduino语音,好像不行。可以指导下吗


配置引脚为输出或输出模式.


  • 模拟引脚也可以当作数字引脚使用, 编号为14(对应模拟引脚0)到19(对应模拟引脚5).

写数字引脚, 对应引脚的高低电平. 在写引脚之前, 需要将引脚设置为OUTPUT模式.


  • 模擬引脚也可以当作数字引脚使用, 编号为14(对应模拟引脚0)到19(对应模拟引脚5).

读数字引脚, 返回引脚的高低电平. 在读引脚之前, 需要将引脚设置为INPUT模式.


 洳果引脚没有链接到任何地方, 那么将随机返回 HIGH 或 LOW. 

配置模式引脚的参考电压. 函数 analogRead 在读取模拟值之后, 将根据参考电压将 模拟值温度转换c语言编程到[0,1023]区间. 有以下类型:


读模拟引脚, 返回[0-1023]之间的值. 每读一次需要花1微妙的时间.



写一个模拟值(PWM)到引脚. 可以用来控制LED的亮度, 或者控制电机的转速. 在執行该操作后, 应该等待一定时间后才能对该引脚进行下一次的读或写操作. PWM的频率大约为490Hz.





读引脚的脉冲, 脉冲可以是 HIGH 或 LOW. 如果是 HIGH, 函数将先等引脚變为高电平, 然后 开始计时, 一直到变为低电平为止. 返回脉冲持续的时间长短, 单位为微秒. 如果超时还没有 读到的话, 将返回0.

下面的例子演示了统計高电平的继续时间:



获取机器运行的时间长度, 单位毫秒. 系统最长的记录时间接近50天, 如果超出时间将从0开始.




延时, 单位为微妙(1毫秒有1000微妙). 如果延时的时间有几千微妙, 那么建议使用 delay 函数. 目前参数最大支持16383微妙(不过以后的版本中可能会变化).

以下代码向第8号引脚发送脉冲, 每次脉冲持续50微妙的时间.



取两者之间最小值. 例如:



取两者之间最大值. 例如:











可以用当前时间作为随机种子. 随机种子的设置对产生的随机序列有影响.





指定中断函数. 外部中断有0和1两种, 一般对应2号和3号数字引脚.

  • mode 触发方式. 有以下几种:
    • LOW 低电平触发中断
    • RISING 低电平变为高电平触发中断
    • FALLING 高电平变为低电平触发中斷


在中断函数中 delay 函数不能使用, millis 始终返回进入中断前的值. 读串口数据的话, 可能会丢失. 中断函数中使用的变量需要定义为 volatile 类型.
下面的例子如果通过外部引脚触发中断函数, 然后控制LED的闪烁.








获取串口上可读取的数据的字节数该数据是指已经到达并存储在接收缓存(共有64字节)中。available()繼承自Stream实用类




读串口数据,read()继承自Stream实用类 语法:


串口上第一个可读取的字节(如果没有可读取的数据则返回-1)- int型。


 // 只在收到数据时发送数据
 // 指示你收到的数据

往串口发数据无换行 描述
以人类可读的ASCII码形式向串口发送数据,该函数有多种格式整数的每一数位将以ASCII码形式发送。浮点数同样以ASCII码形式发送默认保留小数点后两位。字节型数据将以单个字符形式发送字符和字符串会以其相应的形式发送。唎如:



你可以用F()把待发送的字符串包装到flash存储器例如:



  • val: 要发送的数据(任何数据类型)
  • format: 指定数字的基数(用于整型数)或者小数的位数(用于浮点数)。

在版本1.0时串口传输是异步的,Serial.print()会在数据发送完成前返回

写二进制数据到串口,数据是一个字节一个字节地发送的若以字符形式发送数字请使用print()代替。


  • val: 作为单个字节发送的数据
  • str: 由一系列字节组成的字符串
  • buf: 同一系列字节组成的数组
  • len: 要发送的数组的长度

write()会返回发送的字节数所以读取该返回值是可选的。


返回收到的串口数据的下一个字节(字符)但是并不把该数据从串口数据缓存中清除。就是说每次成功调用peak()将返回相同的字符。与read()一样peak()继承自Stream实用类。 语法:


statements可以是任何有效的语句

}

  Arduino使用C/C++编写程序虽然C++兼容C语訁,但这是两种语言C语言是一种面向过程的编程语言,C++是一种面向对象的编程语言早期的Arduino核心库使用C语言编写,后来引进了面向对象嘚思想目前最新的Arduino核心库采用C与C++混合编写而成。

  通常我们说的Arduino语言是指Arduino核心库文件提供的各种应用程序编程接口(Application Programming Interface,简称API)的集匼这些API是对更底层的单片机支持库进行二次封装所形成的。例如使用AVR单片机的Arduino的核心库是对AVR-Libc(基于GCC的AVR支持库)的二次封装。

  传统開发方式中你需要厘清每个寄存器的意义及之间的关系,然后通过配置多个寄存器来达到目的

  必须紧接着一个问题表示式(expression),若这个表示式为真紧连着表示式后的代码就会被执行。若这个表示式为假则执行紧接着else之后的代码。 只使用 if不搭配else是被允许的

  鼡来明定一段区域代码重复指行的次数。

  if叙述是程序里的分叉路口switch case 是更多选项的路口。Swith case 根据变量值让程序有更多的选择比起一串冗长的if叙述,使用swith case可使程序代码看起来比较简洁

  default: // 以上条件都不符合时,预设执行的动作

  当while之后的条件成立时执行括号内的程序代码。

  和while 相似不同的是while前的那段程序代码会先被执行一次,不管特定的条件式为真或为假因此若有一段程序代码至少需要被執行一次,就可以使用do…while架构

  让程序代码跳离循环,并继续执行这个循环之后的程序代码此外,在break也用于分隔switch case 不同的叙述

  // 按下按钮离开循环

  用于循环之内,它可以强制跳离接下来的程序并直接执行下一个循环。

  函数的结尾可以透过return回传一个数值

  例如,有一个计算现在温度的函数叫 computeTemperature()你想要回传现在的温度给temperature变量,你可以这样写:

  //单行注释: /*多行注释:在这个范围内伱可以写一整首诗*/

  % 余数除法== 等于 !=不等于《= 小于等于》= 大于等于&& 交集|| 联集

  布尔变数的值只能为真(true)或是假(false)

  单一字符例洳 A和一般的计算机做法一样Arduino 将字符储存成一个数字,即使你看到的明明就是一个文字

  用数字表示一个字符时,它的值有效范围为 -128 箌127

  注意:有两种主流的计算机编码系统ASCII 和UNICODE。ASCII 表示了127个字符 用来在序列终端机和分时计算器之间传输文字。

  UNICODE可表示的字符量比較多在现代计算机操作系统内它可以用来表示多国语言。

  在位数需求较少的信息传输时例如意大利文或英文这类由拉丁文,阿拉伯数字和一般常见符号构成的语言ASCII仍是目前主要用来交换信息的编码法。

  byte 字节类型

  储存的数值范围为0到255如同字符一样字节型態的变量只需要用一个字节(8位)的内存空间储存。

  整数数据型态用到2字节的内存空间可表示的整数范围为 –32,768 到 32767; 整数变量是Arduino内朂常用到的数据型态。

  无号整数同样利用2字节的内存空间无号意谓着它不能储存负的数值,因此无号整数可表示的整数范围为0 到 65535。

  长整数利用到的内存大小是整数的两倍因此它可表示的整数范围从 –2,147483,648 到 2147,483647。

  无号长整数可表示的整数范围为0 到 4294,967295。

  浮点数就是用来表达有小数点的数值每个浮点数会用掉四字节的RAM,注意芯片内存空间的限制谨慎的使用浮点数

  也叫双精度浮点数,可表达最大值为 1.3157 x 10308

  字符串用来表达文字信息,它是由多个ASCII字符组成(你可以透过序串端口发送一个文字讯息或者将之显礻在液晶显示器上)字符串中的每一个字符都用一个组元组空间储存,并且在字符串的最尾端加上一个空字符以提示Ardunio处理器字符串的结束下面两种宣告方式是相同的。

  一串变量可以透过索引去直接取得假如你想要储存不同程度的LED亮度时,你可以宣告六个变量light01light02,light03light04,light05light06,但其实你有更好的选择例如宣告一个整数数组变量如下:

  “array” 这个字为没有直接用在变量宣告,而是[]和{}宣告数组

  常量:在Arduino语言中事先定义了一些具特殊用途的保留字。

  表示数字IO口的电平HIGH 表示高电平(1),LOW 表示低电平(0) HIGH 和LOW 也用来表示你开啟或是关闭了一个Arduino的脚位(pin)

  表示数字IO口的方向,INPUT 表示输入(高阻态)OUTPUT 表示输出(AVR能提供5V电压 40mA电流)。

  true 表示真(1)false表示假(0)。

  变量用来指定Arduino 内存中的一个位置变量可以用来储存数据,程序人员可以透过脚本代码去不限次数的操作变数的值

  因为Arduino 是┅个非常简易的微处理器,但你要宣告一个变量时必须先定义他的数据型态好让微处理器知道准备多大的空间以储存这个变量值。

  鉯上为基础c语言的关键字和符号有c语言基础的都应该了解其含义,这里也不作过多的解释

  在程序开始时使用,在这个函数范围内放置初始化Arduino 板子的程式主要程式开始撰写前, 使Arduino 板子装置妥当的指令可以初始化变量、管脚接口模式、启用库等(例如:pinMode(ledPinOUTPUT);)。

  在setup()函数之后即初始化之后,loop() 让你的程序循环地被执行使用它来运转Arduino。连续执行函数内的语句这部份的程式会一直重复的被执行,直到Arduino 板子被关闭

  数字IO口输入输出模式定义函数,将接口定义为输入或输出接口用在setup()函数里,pin表示为0~13接口名称 mode表礻为INPUT或OUTPUT。即“ pinMode(接口名称OUTPUT或INPUT)”。

  数字IO口输出电平定义函数将数字接口值至高或低、开或关,pin表示为0~13value表示为HIGH或LOW,即digitalWrite(接口名稱 HIGH或LOW)。但脚位必须先透过pinMode明示为输入或输出模式digitalWrite才能生效比如定义HIGH可以驱动LED。

  数字IO口读输入电平函数读出数字接口的值,pin表礻为0~13value表示为HIGH或LOW,即digitalRead(接口名称)比如可以读数字传感器。当感测到脚位处于高电位时时回传HIGH否则回传LOW。

  模拟IO口读函数从指萣的模拟接口读取值,Arduino对该模拟值进行10-bit的数字温度转换c语言编程这个方法将输入的0-5电压值温度转换c语言编程为 0到1023间的整数值。pin表示为0~5(Arduino Diecimila为0~5Arduino nano为0~7)。即“analogRead(接口名称)”比如可以读模拟传感器(10位AD,0~5V表示为0~1023)

  数字IO口PWM输出函数,给一个接口写入模拟值(PWM波)改变PWM脚位的输出电压值。对于 ATmega168芯片的Arduino(包括Mini或BT)该函数可以工作于 3, 5 6, 9 10和 11号接口,即“analogWrite(接口名称 数值)”,pin表示3 5, 6 9, 10 11,value表示为0~255比如可用于电机PWM调速或音乐播放。

  例如:输出电压2.5伏特(V)该值大约是128。

  SPI外部IO扩展函数通常使用带SPI接口的74HC595做8個IO扩展,把资料传给用来延伸数位输出的暂存器此函式通常使用在延伸数位的输出。函式使用一个脚位表示资料、一个脚位表示时脉dataPin為数据口,clockPin为时钟口bitOrder用来表示位元间移动的方式,为数据传输方向(MSBFIRST高位在前LSBFIRST低位在前),value会以byte形式输出表示所要传送的数据(0~255),另外还需要一个IO口做74HC595的使能控制

  脉冲长度记录函数,设定读取脚位状态的持续时间返回时间参数(us),例如使用红外线、加速度感测器测得某一项数值时在时间单位内不会改变状态。pin表示为0~13value为HIGH或LOW。比如value为HIGH那么当pin输入为高电平时,开始计时当pin输入为低電平时,停止计时然后返回该时间。

  返回时间函数(单位ms) 回传晶片开始执行到目前的毫秒,该函数是指当程序运行就开始计時并返回记录的参数,该参数溢出大概需要50天时间

  delay(ms) 延时函数(单位ms),延时一段时间暂停晶片执行多少毫秒,

  delayMicroseconds(us) 延时函数(单位us)暂停晶片执行多少微秒

  求最小值 ,回传两数之间较小者

  求最大值 回传两数之间较大者

  计算绝对值 ,回传该數的绝对值可以将负数转正数。

  constrain(x a, b) 约束函数下限a,上限b判断x变数位于a与b之间的状态。x若小于a回传a;介于a与b之间回传x本身;大于b回传b

  开方函数base的exponent次方。回传一个数(base)的指数(exponent)值

  sqrt(x) 开根号

  回传double型态的取平方根值。

  回传角度(radians)的三角函数sine值

  回传角度(radians)的三角函数cosine值。

  回传角度(radians)的三角函数tangent值

  随机数端口定义函数,seed表示读模拟口analogRead(pin)函数

  倳实上在Arduino里的乱数是可以被预知的。所以如果需要一个真正的乱数可以呼叫此函式重新设定产生乱数种子。你可以使用乱数当作乱数的種子以确保数字以随机的方式出现,通常会使用类比输入当作乱数种子藉此可以产生与环境有关的乱数(例如:无线电波、宇宙雷射線、电话和萤光灯发出的电磁波等)。

  随机数函数返回数据大于等于0,小于max

  随机数函数,返回数据大于等于min小于max。

  外蔀中断只能用到数字IO口2和3interrupt表示中断口初始0或1,表示一个功能函数mode:LOW低电平中断,CHANGE有变化就中断RISING上升沿中断,FALLING 下降沿中断

  串口萣义波特率函数,设置串行每秒传输数据的速率(波特率)可以指定Arduino从电脑交换讯息的速率,通常我们使用9600 bps,speed表示波特率如9600,19200等茬同计算机通讯时,使用下面这些值:300 1200, 2400 4800, 9600 14400, 19200 28800, 38400 57600或 115200 bps(每秒位元组)。你也可以在任何时候使用其它的值,比如与0号或1号插ロ通信就要求特殊的波特率。用在setup()函数里

  判断缓冲器状态回传有多少位元组(bytes)的资料尚未被read()函式读取,如果回传值是0代表所有序列埠上资料都已经被read()函式读取

  读串口并返回收到参数。Serial.read()——读取持续输入的数据读取1byte的序列资料

  清空缓冲器。 有时候因为资料速度太快超过程式处理资料的速度,你可以使用此函式清除缓冲区内的资料经过此函式可以确保缓冲区(buffer)内的資料都是最新的。

  从串行端口输出数据Serial.print(数据)默认为十进制等于Serial.print(数据,DEC)

  经序列埠传送资料,提供编码方式的选项Serial.print(數据,数据的进制)如果没有指定预设以一般文字传送。

  从串行端口输出数据跟随一个回车和一个换行符。这个函数所取得的值與 Serial.print()一样

  与Serial.print()相同,但会在资料尾端加上换行字元( )意思如同你在键盘上打了一些资料后按下Enter。

  以上几个函数是常用基本函数还有很多以后会慢慢学习

  对一个变量和另一个参数或变量完成一个数学运算。+=(以及其他)可以缩短语法长度

  y:任哬变量类型或常数

  x:一个整数或长整数(可以无符号)

  返回变量原始值或增加/消耗后的新值。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载文章观点仅代表作者本人,不代表电子发烧友网立场文章及其配图仅供工程师学习之用,如有内容图爿侵权或者其他问题请联系本站作侵删。 

}

我要回帖

更多关于 编程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信