1 ADC功能analogRead()函数 Arduino能够检测是否有一个电压施加到其引脚,并通过digitalRead()函数报告。 在开关传感器(其检测物体的存在)和模拟传感器之间存在差异,其值连续变化。 为了读取这种类型的传感器,我们需要一个不同类型的引脚。 在Arduino板的右下部分,您将看到六个标记为“模拟输入"的引脚。 这些特殊引脚不仅可以判断是否有电压施加到它们,而且它的值。 通过使用 analogRead()函数,我们可以读取施加到其中一个引脚的电压。 此函数返回0和1023之间的数字,表示0和5伏特之间的电压。 例如,如果施加到引脚号0的电压为2.5V,则analogRead(0)返回512。 analogRead()函数语法
pin - 要读取的模拟输入引脚的编号(大多数电路板上为0至5,Mini和Nano上为0至7,Mega上为0至15) 实例代码如下:
- int analogPin = 3;//potentiometer wiper (middle terminal)
- // connected to analog pin 3
- int val = 0; // variable to store the value read
-
- void setup() {
- Serial.begin(9600); // setup serial
- }
-
- void loop() {
- val = analogRead(analogPin); // read the input pin
- Serial.println(val); // debug value
- }
复制代码
值得一提的是,Arduino并不是所有的GPIO口都支持ADC功能。如下图所示,只有A0~A7才具备ADC的功能,笔者猜测该单片机内部应该是有一个8通道(8选1)的A/D转换器,这8个通道就是A0~A7。
2 外部中断功能 接触过微机原理的童鞋们,都应该知道中断的基本概念。假设你坐在家里,和别人聊天。 突然电话响了。 您停止聊天,拿起电话与来电者通话。 当你完成电话交谈后,在电话铃响之前,你回去和人聊天。 同样,你可以认为主程序是聊天的,电话铃声会导致你停止聊天。 中断服务程序是在电话上通话的过程。 当电话通话结束时,你回到你的主程序聊天。 此示例准确地说明了中断如何使处理器执行操作。 主程序运行并在电路中执行某些功能。 但是,当发生中断时,主程序在执行另一个程序时停止。 当该例程结束时,处理器再次返回主程序。 我们的Kittenbot主板只有两个中断源,即INT0和INT1,在原理图上如下图所示:
也就是说,但用户需要使用外部中断源的时候,只能将外部中断源连接到上图所示的D2和D3引脚,接到其他引脚是没用的。 下面,我们尝试写一个代码,来介绍外部中断操作的代码表示:
- #define BUTTON 2
- #define LED 13
-
- void setup() {
- pinMode(BUTTON, INPUT);
- attachInterrupt(digitalPinToInterrupt(BUTTON), callback, FALLING);
- pinMode(LED, OUTPUT);
- }
-
- void loop() {
- }
-
- void callback(){
- static int state = LOW;
- delay(1); //消抖
- if(!digitalRead(BUTTON))
- {
- digitalWrite(LED, state);
- state = !state;
- }
- }
复制代码
在上述代码中,Button2连接D2引脚,LED连接D13引脚,按键按下一次,LED改变一次状态。 - 首先通过pinMode将Button引脚设置为输入模式 - 设置中断触发方式为FALLING,即下降沿触发 - 注册中断服务函数void callback() - 设置LED引脚为输出模式 在中断服务函数中,通过延时1ms来对按键进行消抖,在控制LED引脚反转电平。
|