将arduino自带的示例一个一个打开看了一下,然后整理出来以备参考。
Basics
AnalogReadSerial
ADC并且将值不断传输给串口
BareMinimum
空白程序
Blink
用delay实现LED闪烁
DigitalReadSerial
读取数字量并不断传输给串口
Fade
analogWrite实现led灯的渐变
ReadAnalogVoltage
ADC并将值转换为电压值然后传输给串口
Digital
BlinkWithoutDelay
没用delay实现led闪烁,没循环一次读取当前时间millis,然后比较到一定间隔取反led引脚
Button
用digitalRead直接读取按键引脚,然后直接输出给led引脚
Debounce
读取按键,上边沿时把LED输出取反,给按键加了消抖
DigitalInputPullup
读取外部引脚2,取反后输出给13引脚;同时把读取的值输出给串口
StateChangeDetection
读取按键,有个delay(50)起到消抖作用,并且上边沿和下边沿分别输出不同的数据给串口,每4次上边沿置反一次LED
toneKeyboard
读0/1/2三个ADC,并且当值超过一定数值时,输出正读取ADC引脚对应频率的方波。所以是一个三键电子琴?
其中用了个头文件"pitches.h"里面是一系列#define,应该是音调(NOTE_A4是某个音调么?)和频率的对应关系。然后用了一个 tone(引脚,频率,持续时间)的方法输出方波信号。
toneMelody
在大循环外面按照数组noteDurations的持续时间输出输出melody中的方波,自动播放一次旋律。和上面的一样,用了"pitches.h"盒tone
toneMultiple
循环依次在引脚6/7/8上输出方波信号,由于tone只能在一个引脚上实现(在另一个引脚上用的时候等于无效,本引脚上重新用的时候相当于重新输出),要在另一个引脚上实现,要先noTone(之前的引脚)
tonePitchFollower
根据一个ADC的值,输出根据ADC值连续变化频率的信号。其中用了map(输入值, 输入下限, 输入上限, 返回值下限, 返回值上限)将ADC的值线性变换为适合音频的范围
Analog
AnalogInOutSerial
ADC一个引脚的值,map到0-255范围后输出给一个引脚,同时把信息传给串口。输出用的是analogWrite,而本身mega32是没有DAC的,所以这里是通过pwm来实现的。看了一下帮助,说Uno只能在3,5,6,9,10和11这几个引脚上输出,再看一下对应的Uno R3的原理图,这几个IO口正好是对应mega32单片机的OC2B, OC0B, OC0A, OC1A和OC1B几个引脚。都是定时器pwm硬件输出引脚。另外帮组里面也说了,5和6的IO引脚输出频率是980Hz,3和11的IO引脚输出频率也是980Hz,虽然是一样的,但是帮组中分开说,正好对应着timer0和timer1的pwm引脚输出。所以 analogWrite 应该是直接用定时器输出的pwm。所以用的时候要注意不要和其他需要定时器支持的函数/方法冲突了。
AnalogInput
读取ADC的值,并将值近似变为led闪烁的周期/2
AnalogWriteMega
实现一系列LED灯的渐变
Calibration
带校准的ADC读取和 analogWrite 输出。在前5秒,需要变化各种ADC的值,让程序得到ADC可能读到的最大和最小值,然后根据这个范围将读取的ADC值map到0-255范围中,如果确实在这个范围之外,就用constrain(输入值,下限,上限)将值约束到0-255范围中
Fading
led渐变
Smoothing
滤波。读取10次ADC的值,并且平均后给串口。