1、将程序上传到板子时Arduino IDE提示“avrdude: stk500_getsync(): not in sync: resp=0x00”
网上查遇到这个问题的人比较多,有说驱动问题的,有说IDE设置问题的。具体到我遇到的这个状况,原因是板子上插了RF24无线传输模块(或许线还没有插对),拔掉今后再上传程序就正常了。
2、nRF24L01+无线透传运用问题
Arduino官网上好像引荐Mirf这个库,遇到一个问题,接纳端运转几分钟后中止呼应;试了别的一个RF24库,遇到传输不安稳的问题,一时没有处理,仍是回到Mirf了,之前的中止呼应问题没有再呈现。
这个论坛关于无线透传的评论不少,尽管用arduino的不多。
Mirf的地址问题:Mirf的address是有长度要求的,例如能够用“serv1”、“clie1”作为地址,长度过短会导致无法传输,例如用“cl2”作为地址。试了好屡次才发现这个问题。
nRF24L01模块(运用Mirf库时)的自动应答问题:项目里运用一个nRF24L01(服务端)接纳多个nRF24L01(客户端)的音讯,发现客户端之间相互收到本应发到服务端的音讯,通过屡次实验,发现应该与nRF24L01的自动应答机制有关。在Mirf.cpp的setTADDR方法里能够看到,方针地址被一起写到RX_ADDR_P0和TX_ADDR这两个寄存器里,前者是接纳自动应答运用的(一个nRF24L01能够有6个接纳地址一起作业),导致peer发到服务端的音讯也被当作自动应答了。为防止这种搅扰,我实验下来的方法是:每个客户端在发送数据之前先setTADDR到一个无效且仅有的地址,在send之前那一刻再运用setTADDR将地址设置到服务端的地址,发送完成后马上setTADDR到那个无效地址。
3、Arduino与Android通过usb通讯
运用usb-serial-for-android这个开源项目。留意,两边的baudrate要设置共同;android端读取到的数据可能是不完整数据,需求多读几回以便补齐。
“The nature of hardware device interfaces like these is that there is typically no guarantee your data will arrive in a single read().If you expect 16 bytes of data, you need to read(), successively, unTIl you have received all 16. If you want to read unTIl there is a newline, you will need to scan all characters unTIl you find a newline — and then save anything received after it for later.”来历链接
4、关于arduino设备的仅有ID
最终决议运用的计划是:写一个专门的小程序(量产程序),对每个arduino运转一次,在EEPROM里写入仅有的id号。正式程序运转时只需读取,不做修正。代码参阅
留意:EEPROM的擦写次数是有约束的,一般标称为10万次,但有人宣称实验成果只要100次左右。还好,这个比较靠谱的实验测验成果是超越100万次,总归写入EEPROM时稳重。
5、温湿度传感器DHT11
3.3v/5v通用,接数字信号口,运用DHT11这个库取得数据。DHT11精度不高,若要求高可运用DHT22(也叫AM2302)。
6、同一段代码在两块板子上运转效果不同
两块板子都是uno+sensor shield+nrf24l01,其间一块运转彻底正常,另一块无法接纳到音讯(能够发送音讯)。交流sensor shield(连同上面的nrf)无效,交流usb线无效,接外接12v电源无效。最终发现假如在代码的loop()里加delay(100)则根本能接纳到音讯,但还有部分丢包。两块板子是从不同卖家处购买的,看来仍是有差异啊。
7、Arduino nano v3.0接nrf24l01模块不作业问题
nano直连续nrf24l01模块无法收发数据;但用nano先接传感器扩展板(sensor shield,像这种),再把nrf24l01接到扩展板上,则作业正常。细心查看过连线没有问题,且别离替换过nano和nrf模块usb线等,都没有效果。最终发现nano板子上的3.3v针脚电压不对,简直是零,联络卖家查看后说是nano上少一根线,要把usb口背面的两个电容(C1和C7)接近芯片的引脚短接,照此方法问题处理。而扩展板上的3.3v针脚是用asm1117-3.3从5v降压得来,所以没有这个问题。
nano的官方文档说只要用usb供电时3.3v针脚才有电压,但经实验,我手上的这一版(电容短接后)不管用usb供电仍是通过vin供电,3.3v针脚都有3.3v电压。
8、无法上传程序到arduino pro mini
运用ft232rl衔接arduino pro mini,上传程序时提示:
stk500_getsync():noTInsync:resp=0x00
上传时按reset按钮不起效果,DTR线也现已衔接。通过重复实验,发现两个问题导致这个现象:1)arduino上的RX应该接ft232rl的TX,TX接RX,我一开始接反了;2)一开始用的FTDI的驱动是最新的2.0.8.30,在这个帖子的提示下,降级到2.0.8.24后问题处理。PS.最好查找并下载CDM20824_Setup.exe文件以便强制降级。
又测验了一下DTR线的效果,假如衔接了DTR线,直接上传程序就能够成功;假如不衔接DTR线,在提示Uploading时马上按一下arduino的reset按钮,也能够上传成功,不按按钮则上传失利。
Update 2014/2/19: 不知道什么原因,ft232rl又无法上传程序到arduino pro mini了。这个帖子里有人说到在DTR线上加一个100nF的电容是要害的一步,但我手边没有这个电容,并且即便我不衔接DTR线选用手动reset的方法依然不可。后来运用PL2303模块的下载线(只要四个脚,与ft232rl比较少了DTR脚)合作手动reset方法能够正常上传程序到arduino。
9、Arduino的数据类型
Arduino的长整型是32位的,而Java里是64位,互传数据时别搞错了。关于arduino里的数据类型
10、电池供电计划
我花了不少时刻在研讨各种供电计划上,要平衡电池容量和带来的体积添加,还要考虑电池本钱要素:
计划1: 5号/7号干电池供电,为到达至少3.3v的电压以便驱动arduino pro mini+nrf24l01,需求至少三节电池,体积太大抛弃;
计划2:CR2032扣子电池供电,相同电压缺乏(标称3V),实测3.2V但后来会有电压下降,在3V左右arduino能发动但无线模块不正常;
计划3:3.7V锂电池供电,这是现在选用的计划,方针是让一块250mAh的锂聚合物电池能保持设备运转2个月以上。为节省本钱和体积,锂电池充电模块将选用外置的方法。
这段代码能够检测当时VCC脚的电压(仅支撑328和168),有助于完成提示电池电量缺乏,我在pro mini 5v上实测可用。
11、减小作业电流
现在选用arduino pro mini 5v/16MHz版别,这个版别在tb上的价格为13元人民币左右,而3.3v/8MHz的版别要17元左右,实测5v版别用3.3v电源(输入VCC)依然可用,仅仅这时中心频率可能会低于16MHz,影响不大。
为减小作业电流以取得尽可能长的作业时刻,设备绝大多数时刻进入睡觉形式(运用LowPower库),运用watchdog周期性醒来发送数据,然后马上回到睡觉形式。参阅链接
nrf24l01模块也需求一起睡觉和醒来,运用Mirf库里的powerDown()指令。
实测电流:pro mini 5v版别,3.7v锂电池供电,HT7533稳压,LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF)一起Mirf.powerDown(),电流1.48mA。
传感器供电:假如直接将传感器接在5v或3v3上,传感器会一向耗费电流。为了节电,能够将对电流要求不高的传感器接在digital输出上,当arduino需求运用传感器时再对它通电。参阅链接1、参阅链接2
12、TP4056充电板的充电电流问题
tb上买的TP4056芯片的锂电池充电板,要更改的Rprog是在电路板下方中部(电路板上文字方向为正)的一个小贴片电阻,出厂时阻值是1.2k。我需求90mA的充电电流,依照阐明,替换成15k左右的电阻。
测验充电电流时遇到一点问题:发现充电电流比料想的要低,77mA左右,并且简直一开始就缓慢下降,并不是恒流的。查了一些材料后发现,我是把万用表串接到BAT+口上的,而万用表对这个电流造成了影响,由于运用不同的档位测出来的电流值不同,高档位显现的电流比较高。实践应该串接到In+口,或许丈量Rprog电阻的电压然后(V/Rprog)*1200得到充电电流。参阅链接
13、analogRead(0)与analogRead(A0)的差异?
假如这个帖子所说事实,在Arduino IDE 0022以上这两个指令没有差异,A0的值为14,而analogRead(0)等价于analogRead(14)。弥补:又找到一个帖子说的比较具体。
14、建立最小体系的问题
a) 我在tb上买的usbasp,vcc脚竟然与gnd脚短接(!),vcc脚周围的那个看不清字的脚有5v电压;后来细心一看,是文字间隔对应的针脚太远,以致于串行了。
b) 我运用Atmega168pa作为中心建立最小arduino体系,在arduino ide 1.5.5里挑选board -》 arduino ng or older,用usbasp烧录bootloader时会提示下面的过错:
avrdude:Expected signature for ATMEGA168 is 1E 94 06
原因是atmel168pa与atmel168这两个芯片的签名不一样,arduino自带的avrdude无法辨认。依照这个帖子的方法能够处理,不过可能是arduino ide版别不同的原因,原帖里的内容需求略作修正,依照ide的过错提示来改即可。另一个帖子,尽管我没实践实验,但也值得一看。
c) 趁便提示一下用“面包板专用电源”的,要留意电源插针的极性——电源插在面包板两头时正负极刚好是反过来的。
d) 可能是面包板不太可靠,在面包板上搭的最小体系很不安稳,后来焊到洞洞板上就没有问题。
e) 假如运用programmer(例如usbasp)刷sketches到最小体系,留意每刷一次EEPROM都会被铲除,处理的方法是将EESAVE熔丝位设置为1