1.数字I/O:LED
在线编译的参考程序如下:
#include <rxduino.h>
#define INTERVAL 100
void setup()
{
pinMode(PIN_LED0,OUTPUT);
pinMode(PIN_LED1,OUTPUT);
pinMode(PIN_LED2,OUTPUT);
pinMode(PIN_LED3,OUTPUT);
}
void loop()
{
digitalWrite(PIN_LED0, 1);
delay(INTERVAL);
digitalWrite(PIN_LED1, 1);
delay(INTERVAL);
digitalWrite(PIN_LED2, 1);
delay(INTERVAL);
digitalWrite(PIN_LED3, 1);
delay(INTERVAL);
digitalWrite(PIN_LED0, 0);
delay(INTERVAL);
digitalWrite(PIN_LED1, 0);
delay(INTERVAL);
digitalWrite(PIN_LED2, 0);
delay(INTERVAL);
digitalWrite(PIN_LED3, 0);
delay(INTERVAL);
}
以上就是开发板的管教分配


数字I/O教程二:LED闪烁
LED(发光二极管),能将电能转化为光能,也具有单向导电性,反向击穿电压约为5V。它的正向伏安特性曲线很陡,使用时必须串连限流电阻,在5V的电路中一般使用400欧姆左右的电阻。LED的两根引脚中较长的一根是正极,较短的一根为负极。
程序代码如下:
/*GR-SAKURA Sketch Template Version: V1.02*/
#include <rxduino.h>
#define INTERVAL 300
int ledPin=13;
void setup()
{
pinMode(ledPin,OUTPUT);
}
void loop()
{
digitalWrite(ledPin, 1);
delay(INTERVAL);
digitalWrite(ledPin, 0);
delay(INTERVAL);
}
LED闪灯可以有很多的玩法,本实验目的只是在于验证数字I/O的输出,如果有方便的数字示波器的话,可以用示波器观测到一个方波,周期是600ms,delay(ms),delay函数的延时是以毫秒为单位的,这就非常方便时间的定义,用过c51单片机的人都知道,51中要自己定义延时函数,对于准确的定时还要去模拟仿真,所以学到sakura就感觉到了太方便了。

Arduino的优势在于对数字信号的识别和处理,但我们所生活的真实世界并不是数字(digital)化的,简单到只要用0和1就能够表示所有的现象。例如温度这一我们已经司空见惯的概念,它只能在一个范围之内连续变化,而不可能发生像从0到1这样的瞬时跳变,类似这样的物理量被人们称为是模拟(analog)的。Arduino是无法理解这些模拟量的,它们必须在经过模数转换后变成数字量后,才能被Arduino进一步处理。
像温度这样的数据必须先被转换成微处理器能够处理的形式(比如电压),才能被Arduino处理,这一任务通常由各类传感器(sensor)来完成的。例如,电路中的温度传感器能够将温度值转换成0V到5V间的某个电压,比如0.3V、3.27V、4.99V等。由于传感器表达的是模拟信号,它不会像数字信号那样只有简单的高电平和低电平,而有可能是在这两者之间的任何一个数值。至于到底有多少可能的值则取决于模数转换的精度,精度越高能够得到的值就会越多。
Arduino所采用的ATmega8微处理器一其有6个模数转换器(ADC,Analog to Digital Converter),每一个模数转换器的精度都是10bit,也就是说能够读取1024(2^10 = 1024)个状态。在Arduino的每一个模拟输入管脚上,电压的变化范畴是从0V到5V,因此Arduino能够感知到的最小电压变化是4.8毫伏(5/1024 = 4.8mV)。
电位计(potentiometer)是一种最简单的模拟输入设备,它实际上就是一个可变电阻箱,通过控制滑块所在的位置我们可以得到不同的电压值,而输入信号正是从滑块所在的位置接入到电路中的。
这一实验我们将通过改变电位计的值来控制发光二极管闪烁的频率。电位计上一共有三个管脚,分别连接到Arduino的电源、地和模拟输入的5号管脚上,发光二极管则连接到数字I/O的13号管脚上,原理图如下所示:
相应的代码为:
/*GR-SAKURA Sketch Template Version: V1.02*/
#include <rxduino.h>
int ledPin=13;
int potPin=5;
int value=0;
void setup()
{
pinMode(ledPin,OUTPUT);
}
void loop()
{
value=analogRead(potPin);
digitalWrite(ledPin, HIGH);
delay(value);
digitalWrite(ledPin, LOW);
delay(value);
}
在Arduino中,对模拟输入端口不需要调用pinMode()函数将其指定为输入或者是输出模式,这点同数字I/O端口是有所不同的。
通过旋转电位计的轴,我们能改变电位计中间那根连线同地之间的电阻量,从而也就能改变从模拟输入的5号管脚上所读入的模拟量的值。当电位计完全旋转到头时,输入到模拟输入管脚上的电压为0V,用analogRead()函数读出的值为0;当电位计完全旋转到另一头时,输入到模拟I/O管脚上的电压为5V,此时用analogRead()函数读出的值为1023;当电位计旋转到中间的某个位置时,输入到模拟输入管脚上的电压是0V到5V之间的某个值,而用analogRead()函数读出的则是位于0到1023之间的某个对应值。读出的模拟量在我们的实验中被用来确定发光二极管点亮和熄灭的时间,以反映模拟量的变化。

串口输出:Serial
在PC机上上最常见的串行通信协议是RS-232串行协议,而在各种微控制器(单片机)上采用的则是TTL串行协议。由于这两者的电平有很大的不同,因此在实现PC机和微控制器的通信时,必须进行相应的转换。完成RS-232电平和TTL电平之间的转换一般采用专用芯片,如MAX232等。
串行通信的难点在于参数的设置,如波特率、数据位、停止位等,在Arduino语言可以使用Serial.begin()函数来简化这一任务。为了实现数据的发送,Arduino则提供了Serial.print()和Serial.println()两个函数,它们的区别在于后者会在请求发送的数据后面加上换行符,以提高输出结果的可读性。
代码如下:
/*GR-SAKURA Sketch Template Version: V1.02*/
#include <rxduino.h>
void setup()
{
Serial.begin(9600); //设置波特率为9600
}
void loop()
{
Serial.println("Hello World");
delay(500);
}
为了检查串口上是否有数据发送,一个比较简单的办法是在数字I/O端口管脚(TX)和5V电源之间接一个发光二极管,如下面的原理图所示:
这样一旦通过串口向PC机发送数据时,相应的发光二极管就会闪烁,实际应用中这是一个非常方便的调试手段.

PWM
PWM是什么?“怕玩命”的缩写?呵呵,英文写法是“Pluse-width-modulation”。是占空比不同的方波。
PWM的作用:
1.通过简单的滤波电路,就可以生成真正的模拟输出量。
2.控制灯光亮度,调节电机转速,不需要滤波就可以实现。
3.控制舵机角度。
4.输出信号,例如接喇叭时可以发出声响。
以上知识简单的几个例子
产生PWM的三种方式?
第一种:用analogWrite(pin,val)命令。
第二种:用delayMicroseconds(100)、delayMicroseconds(1000-100)来调节
第三种:可以用到时钟寄存器
以第二种方式,代码如下:
#include <rxduino.h>
int PIN=8;
void setup()
{
pinMode(PIN,OUTPUT);
}
void loop()
{
digitalWrite(PIN, 1);
delay(100);
digitalWrite(PIN, 0);
delay(1000-100);
}
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 |