很多时候用arduino nano做项目,都会遇到一个头疼的问题,那就是当项目比较复杂,外接设备比较多时,就会出现I\O口不够用的情况,这时候恨不得把所有的口都用上。
比如这次做机械臂小车项目,四个麦轮电机就需要8个I/O口,5个舵机又占了五个口,还有一个摄像头需要用到I2C占了两个口,再来一个PS2遥控器又用掉4个口。加起来一共需要19个I/O口,Arduino的D2-D13加上A0-A5一共也才18个口,这时就不得不占用到串口的TX或RX了,但问题是占用串口后,如果程序想打印一些值到串口监视器的时候,外接设备很容易干扰信号,导致数据传输失败,所以一般不推荐使用。
Arduino nano比uno板多了两个A6和A7的模拟口,但是这两个模拟口确实功能残缺的口,只支持模拟输入,也就是说digitalWrite();digitalRead();analogWrite(); 这三个内置函数对A6\A7这两个口都无效!
翻阅nano板的原理图,我们可以看到这两个口是从atmega328p芯片上的ADC6和ADC7引出的两个引脚,官网做出了如下说明:
The analog input pins can be used as digital pins, referred to as A0, A1, etc. The exception is the Arduino Nano, Pro Mini, and Mini’s A6 and A7 pins, which can only be used as analog inputs.
但是如果我们真的是I/O口不够用了怎么办呢?我们至少可以用它们来做为数字输入口使用,只需要自己新建一个digitalRead函数就好了:
bool digitalReadA6(){
return analogRead(A6)>500? true : false;
}