arduino学习笔记

合集下载

Arduino整理学习笔记

Arduino整理学习笔记

而当使用write()函数时,Arduino发送的是数值本身。

但是串口监视器接收到数据后,会将数值当做ASCLL码而显示其对应的字符。

总而言之,print是转换成ASCLL码才能发出去,就相当于中间介质。

而write是直接发送数据,不需要中间介质。

#define led1 9#define led2 8char val = '1';void setup() {Serial.begin(9600);pinMode(led1,OUTPUT);pinMode(led2,OUTPUT);}void loop() {if(Serial.available())val = Serial.read();if(val == '9'){digitalWrite(led1,HIGH);delay(1000);}elsedigitalWrite(led1,LOW);if(val == '8'){digitalWrite(led2,HIGH);delay(1000);}elsedigitalWrite(led2,LOW);}蓝牙模块:void setup(){Serial.begin(9600);}void loop(){while(Serial.available()){char c=Serial.read();if(c=='A'){Serial.println("Hello I am amarino");}}}2018.10.30下午建立多个软串口://主机程序#include <SoftwareSerial.h> SoftwareSerialportOne(2, 3); SoftwareSerialportTwo(4, 5);int mark,mark1;void setup(){Serial.begin(9600);while (!Serial){ }portOne.begin(9600);portTwo.begin(9600);}void loop(){//监听1号软串口portOne.listen();if(portOne.available()){Serial.println("Data from port one:"); delay(500); mark=1;}if(mark==1){int inByte1 = portOne.read();delay(2);Serial.println(inByte1);delay(1000);mark=0;}//监听2号软串口portTwo.listen();if(portOne.available()){Serial.println("Data from port two:"); delay(500);mark1=1;}if(mark1==1){int inByte2 = portOne.read();delay(2);Serial.println(inByte2);delay(1000);mark=0;}}//从机程序int i=9;void setup(){Serial.begin(9600);pinMode(13,OUTPUT);}void loop() {Serial.write(i); delay(1000);}。

Arduino 学习笔记 _74HC595

Arduino 学习笔记 _74HC595

48
20. 74HC595 实验
实验现象: 利用 74HC595 芯片实现 LED 流水灯效果。
原理与说明:
有时候限于 Arduino 本身的引脚数,无法直接控 制较多的电路。这里介绍一种扩展数字输出的芯片
——74HC595,通过此芯片,可以使用很少的引脚接
收串行信号(也就是 1 个引脚),输出的部分可以变
使用 shiftOut()这个函数的主要原因是我们需要自行输出频率变化。以 74HC595 为例,需要从 Arduino 的 clocckPin(本例中使用 Pin12)输出,这样 74HC595 才能知道 dataPin(本例中使用 Pin11)的正确读取方式。这些说明在 芯片的说明手册中都有提到。这里节录部分来进行说明。
函数 shiftOut(dataPin, clockPin, LSBFIRST, j)的目的在于 1 个执行时间内输出 第 4 个参数 j 的某一个位。1 个字符有 8 个位,若希望从高位(左边)开始,
47
第三个参数设定为 MSBFIRST;若从低位(右边)开始,则设定为 LSBFIRST。前 两个参数只是引脚定义。
74HC595 数据信号时序图 要想更加详细地了解工作原理,可以查阅 SPI(Serial Peripheral Interface)
的工作原理。而点亮的 LED 的位置需要将十进制数字转换为二进制才可以了解。
例如:
153
10011001
这时,应该是 Q0、Q3、Q4 和 Q7 这 4 颗 LED 发光。
功能的实现中使用了一个 Arduino 中的比较特殊的函数 shiftOut(dataPin, clockPin, LSBFIRST, j)。后面会给予介绍。

Arduino学习笔记A1 使用4017数字集成块扩展Arduino开关输入端

Arduino学习笔记A1 使用4017数字集成块扩展Arduino开关输入端

Arduino学习笔记A1 - 使用4017数字集成块扩展Arduino开关输入端使用4017数字集成块扩展Arduino开关阵列--用3个单片机引脚读取10个开关状态使用Arduino做制作,需要有一组开关控制Arduino状态。

但是Arduino引脚不多,传统接法开关多了要占用很多引脚。

减少引脚的方法有很多,可以选矩阵方式,编码器方式,还有本文要介绍的分时复用开关法等。

特点:十个开关占用三个数据引脚,之后每增加十个开关就增加一个引脚。

4017是一块十进制计数器,每输入一个CLK脉冲,Q0~Q9轮流产生高电平。

每时刻有且只有一个引脚高电平。

二极管防止多个开关闭合时,有的输出端输出高电平,有的输出低电平,互相接上的话,会低电平引脚会干扰高电平脚的工作。

开关用10路拨动式小型开关,或者自己选择其他开关形式。

电路工作原理:1.先在RST(4017的复位脚MR)发出一个脉冲,使4017复位。

2.此时有且只有Q0输出高电平(Q0对应开关S1,Q9对应开关S10),读取一次输出信号DATA。

如果第一个开关S1闭合了,应该DATA得到高电平;如果S1断开了,就DATA得到低电平。

此时记DATA结果对应第一个开关S1的状态。

3.给CLK输出一个脉冲,让4017移位,有且只有Q1输出高电平(Q0,Q2~Q9均为低电平)。

读取DATA。

得到S2状态。

4.不断给CLK脉冲。

总共给10次脉冲,让4017由Q0移动到Q9,完成一次开关遍历,每次移动获取一次DATA状态。

存为S1~S10状态。

电路原理图如图:洞洞板图(由于引脚多,不建议面包板制作。

)关于在一块Arduino上使用多块模块:每增加一块模块,可以增加十路开关(当然你也可以使用两块4017做成行列矩阵控制100个开关。

不过那个就属于另外话题了)。

增加的方式是将两块模块的RST,CLK,VCC,GND接在一起,接到单片机的相应引脚,然后两个模块的DATA脚分别接单片机两个IO口。

arduino学习笔记18 - SD卡读写实验

arduino学习笔记18 - SD卡读写实验

本次实验使用arduino驱动SD卡,在SD卡中进行文件读写。

需要说明的是arduino的SD库文件,目前对2G以上的卡支持不是很好,所以推荐大家使用2G包含2G以下的,文件格式使用FAT格式。

这次我是用的是kingmax2G的MicroSD卡。

先看一下硬件连接图把下面代码下载进arduino 控制板 /*此例子展示如果记录三个模拟引脚数值到SD 卡,使用SD 库。

电路部分* 模拟引脚使用模拟口0,1,2大家可以根据情况接入模拟传感器,如果没有,也可以完成此实验,只不过数值是不停跳动的干扰源。

* SD卡与arduino控制板使用SPI总线连接** MOSI - pin 11** MISO - pin 12** CLK - pin 13** CS - pin 4*/#include <SD.h>// CS引脚为pin4,这里也沿用官方默认设置const int chipSelect = 4; //设定CS接口void setup(){Serial.begin(9600); //设置串口通信波特率为9600Serial.print("Initializing SD card..."); //串口输出数据Initializing SD card...pinMode(10, OUTPUT);if (!SD.begin(chipSelect)) { //如果从CS口与SD卡通信失败,串口输出信息Card failed, or not presentSerial.println("Card failed, or not present");return;}Serial.println("card initialized."); //与SD卡通信成功,串口输出信息card initialized.}void loop(){// 定义数组String dataString = "";// 读取三个传感器值,写入数组for (int analogPin = 0; analogPin < 3; analogPin++) {int sensor = analogRead(analogPin);dataString += String(sensor);if (analogPin < 2) {dataString += ",";}}// 打开文件,注意在同一时间只能有一个文件被打开// 如果你要打开另一个文件,就需要先关闭前一个File dataFile = SD.open("datalog.txt", FILE_WRITE);// 打开datalog.txt文件,读写状态,位置在文件末尾。

【Arduino学习笔记05】Arduino数字输入、输出和脉冲宽带调制--小项目:彩色小台灯

【Arduino学习笔记05】Arduino数字输入、输出和脉冲宽带调制--小项目:彩色小台灯

【Arduino学习笔记05】Arduino数字输⼊、输出和脉冲宽带调制--⼩项⽬:彩⾊⼩台灯基本功能:长按控制按钮开机,长按控制按钮关机(>3s)通过三个调节按钮调节灯的颜⾊,每⼀个按钮分别对应R,G,B值模式切换:短按控制按钮切换模式(长亮模式/闪烁模式)元器件清单:Arduino Uno R3⼩号⾯包板跳线10kΩ电阻(×4)220Ω电阻(×3)USB电缆按键(×4)5mm 共阴极 RGB LED知识回顾:(参考书⽬《Arduino魔法书》) 1. 脉冲宽度调制(P25 - P27)PWM的输出可以写⼊数值的范围:0~255PWM的⼯作原理:⽅波(占空⽐的概念)“你并没有改变输送到LED的电压,为何⼜能在降低占空⽐时让LED变暗呢?......如果LED每1ms就开关⼀次,它看起来就是近乎⼀半的亮度,这是因为它闪烁的速度超过了⼈眼能察觉的速度。

因此,⼤脑实际上时平均了这个信号,并欺骗你相信这个LED只有⼀半的亮度。

” 2. 上拉电阻和下拉电阻(P28 ~ P30)没有使⽤下拉电阻的情况按键没有按下时,要读取的输⼊引脚什么也没有接——这个输⼊引脚被称为“悬空”。

由于这个引脚没有实际地接到0V或者5V,读取它时会导致意料之外的结果,因为附近的电⽓噪声会导致其值在⾼低电平之间来回波动。

下拉电阻:将输出端拉⼀根导线连接到地 上拉电阻:将输出端拉⼀根导线连接到电源 3. 按钮的消抖动(P30 ~ P33)1/*2 * 消抖动函数:3 * button: 要消抖动的按钮4 * last: 该按钮的上⼀个状态5 * 返回值:消抖动后读回的按钮状态67 * - 这⾥所谓的消抖动,实际上就是如果检测到电压变化后先不操作,因为可能是抖动阶段的8 * 电压改变,等5m之后再读取当前值,避开抖动阶段。

9 * - 如果没有使⽤消抖动函数,在抖动的过程中电压多次变化,会得到很多次“按钮按下”的10 * 结论,从⽽造成短时间内频繁的开灯关灯。

Arduino学习笔记A5 - Arduino常用的代码编写工具

Arduino学习笔记A5 - Arduino常用的代码编写工具

Arduino学习笔记A5 - Arduino常用的代码编写工具Arduino常用的代码编写工具大家在使用Arduino IDE编写程序的时候,都会觉得Arduino的IDE会有很多不足的地方,比如打开缓慢,不能显示中文,高亮不清晰,Auto Format自动格式化工具不够智能等。

下面我分享一下我自己使用的Arduino代码编写工具,或者不一定是最好的,权当抛砖引玉,欢迎大家多提意见。

代码编写器:Notepad2 MOD我先说一下我选代码编写器的要求:1、有语法高亮功能,这是必须的。

2、软件要轻量,界面要简洁,可以一下子打开很多个窗口方便编辑。

好像UltraEdit这样的界面太复杂了,很多时候功能用不到,而vc++又打开极其缓慢,浪费时间。

3、兼容中文注释,其实这个要求不是重点,只是Arduino的IDE竟然不支持,所以才作为要求。

4、可以把语法高亮方案导出为 HTML、UBB 代码,便于论坛或者网站分享。

5、字体清晰可见,必须是等宽字体,中文必须方正,选择时候不能像一些兼容中文的外国软件,因为字体没选好,选择文本时候会选到半个中文字这样。

最后选择了Notepad2 MOD,下载地址:/software/12201.html。

软件不到1M大,速度跟Windows自带记事本差不多。

但是能满足上面四个要求。

但是Notepad2 MOD默认不识别Arduino和Processing的pde格式高亮。

必须要在软件主菜单-工具-自定义语法高亮方案,选“C/C++源代码”加上pde格式即可。

软件可以关联Windows大部分的文本格式,或者添加右键菜单。

并且都有语法高亮显示。

软件放到一个不会移动的位置,设置好上面的“自定义语法高亮方案”后,在软件主菜单-工具-文件关联设置,即可设置所有支持格式的关联。

我一般直接按“全选”就行了,完全可以替代Windows记事本。

代码格式整理:CoolFormat源代码格式化相信大家都用过Arduino IDE的Auto Format功能。

arduino学习笔记.pdf

arduino学习笔记.pdf

arduino 学习笔记arduino 学习笔记 1 - 什么是 arduino?要了解arduino就先要了解什么是单片机,arduino平台的基础就是AVR 指令集的单片机。

1、什么是单片机?它与个人计算机有什么不同?一台能够工作的计算机要有这样几个部份构成:中央处理单元CPU (进行运算、控制)、随机存储器RAM(数据存储)、存储器ROM(程序存储)、输入/输出设备I/O(串行口、并行输出口等)。

在个人计算机(PC)上这些部份被分成若干块芯片,安装在一个被称之为主板的印刷线路板上。

而在单片机中,这些部份全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如模拟量/数字量转换(A/D)和数字量/模拟量转换(D/A)等。

2、单片机有什么用?实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用酷睿处理器吗?应用的关键是看是否够用,是否有很好的性能价格比。

如果一台冰箱都需要用酷睿处理起来进行温度控制,那价格就是天价了。

单片机通常用于工业生产的控制、生活中与程序和控制有关(如:电子琴、冰箱、智能空调等)的场合。

下图就是一个Atmega328P-PU单片机,基于AVR指令集的8位处理器,频率20MHz,存储器空间32KB。

什么是 Arduino?Arduino 是一个能够用来感应和控制现实物理世界的一套工具。

它由一个基于单片机并且开放源码的硬件平台,和一套为Arduino板编写程序的开发环境组成。

Arduino 可以用来开发交互产品,比如它可以读取大量的开关和传感器信号,并且可以控制各式各样的电灯、电机和其他物理设备。

Arduino 项目可以是单独的,也可以在运行时和你电脑中运行的程序(例如:Flash,Processing,MaxMSP)进行通讯。

Arduino板你可以选择自己去手动组装或是购买已经组装好的;Arduino开源的IDE可以免费下载得到。

Arduino学习笔记(四)--常用函数

Arduino学习笔记(四)--常用函数

Arduino学习笔记(四)--常⽤函数1、pinMode(pin,Mode):设置引脚的输⼊输出状态Pin:引脚号;Mode:INPUT、OUTPUT2、digitalWrite(pin,value) :设置输出引脚的⾼低电平状态Pin:引脚号;value:HIGH LOW3、int digitalRead(pin):读取引脚的状态,并返回HIGH 或LOWPin:引脚号4、int analogRead(pin):读出模拟引脚上的电压,并以⼆进制数值返回(0~1023)对应为0~5vPin:引脚号5、analogWrite(pin,value):给PWM引脚输出电压值pin:引脚号;value:具体的pwm值,(0~255对应表⽰⼀个周期的⾼电平占空⽐)6、shiftOut(dataPin,clockPin,bitOrder,value):将⼀个字节的数据通过移位的⽅式逐位的输出。

dataPin:数据引脚clockPin:时钟引脚bitOrder:移位顺序(MSBFIRST-⾼;LSBFIRST-低)value:需要进⾏移位传输的值说明:在输出数据时,当⼀位数据写⼊数据输出引脚时,时钟引脚将输出脉冲信号,指⽰该位数据已被写⼊数据输出引脚等待外设读取。

并且在使⽤本函数之前datapin和clockpin引脚应该设置为输出状态。

本函数⼀次只能输出⼀个字节的内容,也就是说最⼤⼀次只能输出255,如果⼤于255,就要多次调⽤这个函数。

7、unsigned long mills():回传单⽚机从开始执⾏到现在⽬前的时间(单位:ms)8、delay( number):占⽤单⽚机的时间(单位:ms)number:其代表占⽤单⽚机的时间长度9、delay Microseconds( number):占⽤单⽚机的时间(单位:us)number:其代表占⽤单⽚机的时间10、pulseIn(pin,state,timeout):读取脉冲宽度。

arduino函数学习笔记

arduino函数学习笔记

Arduino程序的主函数main在内部就已经定义了,所以只需void setup()和void loop().前者用于初始化在程序开头设置引脚的输入输出模式,初始化串口,执行一次。

loop是死循环,是执行程序。

函数pinMode()有两个参数pin和mode, pin参数表示所要配置的引脚,mode 表示设置的模式INPUT或OUTPUT. arduino板上的模拟引脚亦可作数字引脚用,A0~A5对应数字14~19digitalWrite()两个参数,pin表示设置的引脚(须设置为OUTPUT模式),value 表示输出的电压HIGH或LOW,此函数作用是设置引脚输出的电压为高或低。

digitalRead()一个参数,pin***(须设置为INPUT模式),用来获取引脚的电压情况HIGH或LOW. 若引脚没有连接到任何地方,那么随机返回高或低。

analogReference(type)analogRead(pin) 用于读取引脚的模拟电压值,返回值int 范围0~1023,pin 只能是6模拟接口。

analogWrite(pin,value)在指定引脚上输出一个模拟量,应用在LED灯亮度控制,电机转速控制。

无返回值。

Value表示PWM输出的占空比。

范围0~255 shiftOut(dataPin,clockPin,bitOrder,val)无返回值能够将数据通过串行的方式在引脚上输出shiftIn(datapin,clockPin,bitOrder)通过串行的方式在引脚上读入数据。

pulseIn(pin,state,timeout) 此函数用于读取引脚脉冲的时间长度,脉冲可以是HIGH或LOW。

如果是HIGH,函数先将引脚变为高电平,在开始计时,一直到变为低电平为止,返回脉冲持续时间长短,单位MS,如果超时还未读到,将返回0. 函数返回值为unsigned long ,3个参数分别表示脉冲输入的引脚,脉冲响应的状态(高或低)和超时时间。

Arduino学习笔记_串口通讯

Arduino学习笔记_串口通讯
http://guoyunhe.me/zh/2013/03/10/arduino 与 processing 的串口通信/ 在网络上普遍存在的 Arduino 与 Processing 互动的例子,都具有一个很简 单的构造:Arduino 上用 Serial.print()发送,在 Processing 中用 Serial.readString() 读取,或者反过来。然而实际应用过程中大家就会发现这个简单的逻辑模型 会发生莫名其妙的错误。最显著的是有时候会收到空值,即使用 Serial.available()检测,也会有时收到间断的字符串或者多个字符串混在一起 了。 下面是一个经典的 Processing 与 Arduino 通信实例:
{
76
//显示刚才输入的字符串(可选语句) Serial.println(comdata); //显示刚才输入的字符串长度(可选语句) Serial.println(comdata.length()); /*******************下面是重点*******************/ //以串口读取字符串长度循环, for(int i = 0; i < comdata.length() ; i++) { //逐个分析 comdata[i]字符串的文字,如果碰到文字是分隔符(这里选 择逗号分割)则将结果数组位置下移一位 //即比如 11,22,33,55 开始的 11 记到 numdata[0];碰到逗号就 j 等于 1 了, //再转换就转换到 numdata[1];再碰到逗号就记到 numdata[2];以此类推, 直到字符串结束 if(comdata[i] == ',') { j++; } else { //如果没有逗号的话,就将读到的数字*10 加上以前读入的数字, //并且(comdata[i] ‐ '0')就是将字符'0'的 ASCII 码转换成数字 0(下面不 再叙述此问题,直接视作数字 0)。 //比如输入数字是 12345,有 5 次没有碰到逗号的机会,就会执行 5 次 此语句。 //因为左边的数字先获取到,并且 numdata[0]等于 0, //所以第一次循环是 numdata[0] = 0*10+1 = 1 //第二次 numdata[0]等于 1,循环是 numdata[0] = 1*10+2 = 12 //第三次是 numdata[0]等于 12,循环是 numdata[0] = 12*10+3 = 123 //第四次是 numdata[0]等于 123,循环是 numdata[0] = 123*10+4 = 1234 //如此类推,字符串将被变成数字 0。 numdata[j] = numdata[j] * 10 + (comdata[i] ‐ '0'); } } //comdata 的字符串已经全部转换到 numdata 了,清空 comdata 以便 下一次使用, //如果不请空的话,本次结果极有可能干扰下一次。 comdata = String(""); //循环输出 numdata 的内容,并且写到 PWM 引脚 for(int i = 0; i < 6; i++) { Serial.print("Pin "); Serial.print(PWMPin[i]);

Arduino学习笔记A11

Arduino学习笔记A11

Arduino学习笔记A11键盘作为经典的输入设备,使用在很多互动中都有特别的优势,比如我们可以通过键盘直接给flash传递按键事件。

而无需通过串口之类的特殊接口,虽然我们可以拆一个传统的键盘,然后将里面的按键引出来,但是这样有一个缺点,就是键值不能动态改变并且不能一次多键。

使用模拟键盘的话,我们就可以随意在程序设置按键的时间和键值。

比如本文的例子就是按下一个按键,模拟键盘就在电脑输入“HELLO WORLD”。

硬件部分:材料清单:Arduino x168Ω电阻 x2 (没有68Ω的话,用50~100Ω电阻也行)2.2kΩ电阻 x1 (没有2.2kΩ的话,用1.5k~2.2k电阻也行)USB连接线(一端是USB口,另一端是电线) x13.6v 稳压管(建议选用功耗0.25~0.5w的)x2电路原理图:电路图解说:1、两个68Ω的电阻起到限流和保护作用,防止在意外情况下损坏计算机的USB端口或单片机的端口。

2、2.2kΩ电阻是上拉电阻,用于分辨总线状态。

如果上拉电阻接于D+和+5v端则是高速USB设备,接于D-与+5v端,则是低速设备。

此处键盘传输速率不高,接到D-作为低速设备即可。

3、D+和D-上的3.6V稳压二极管D1和D2起到限制数据线上的电平的作用。

因为在USB规范中规定数据线D+和D-上的电平范围是3.0V至3.6V,而AVR单片机的输出电平是Vcc。

如果单片机的Vcc是5V,在没有D1和D2的情况下将造成电平不匹配,会造成在很多计算机中无法正确识别出USB设备。

如果用户系统的Vcc在3.0V至3.6V 之间,就可以省略这两个稳压二极管。

从这里也可以看出用户系统的Vcc必须高于3V。

4、由于低速AVRUSB所需要的是1.5MHz时钟,而单片机每8条指令就能精确完成一个数据位的采集。

所以AVRUSB最小单片机时钟频率是12MHz。

并且可以使用的时钟频率有12MHz、12.8MHz、15MHz、16MHz、16.5MHz、20MHz,其他的不支持。

【Arduino学习笔记01】关于Arduino引脚的一些笔记

【Arduino学习笔记01】关于Arduino引脚的一些笔记

【Arduino学习笔记01】关于Arduino引脚的⼀些笔记Arduino Uno R3 - 引脚图Arduino Uno R3 - 详细参数Arduino Uno R3 - 存储 Arduino的存储空间即是其主控芯⽚所集成的存储空间。

也可以通过使⽤外设芯⽚的⽅式来扩展Arduino的存储空间。

Arduino UNO的存储空间分三种:Flash,容量为32 KB。

其中0. 5 KB作为BOOT区⽤于储存引导程序,实现通过串⼝下载程序的功能;另外的31.5 KB作为⽤户储存程序的空间。

相对于现在动辄⼏百GB的硬盘,可能觉得32 KB太⼩了,但是在单⽚机上,32 KB已经可以存储很⼤的程序了。

SRAM,容量为2 KB。

SRAM相当于计算机的内存,当CPU进⾏运算时,需要在其中开辟⼀定的存储空间。

当Arduino 断电或复位后,其中的数据都会丢失。

EEPROM,容量为1 KB。

EEPROM的全称为电可擦写的可编程只读存储器,是⼀种⽤户可更改的只读存储器,其特点是在Arduino断电或复位后,其中的数据不会丢失。

Arduino Uno引脚分配 - 电源 Arduino UNO可以通过3种⽅式供电: 1、直流电源插孔 可以使⽤直流电源插孔为Arduino开发板供电。

电源插孔通常连接到⼀个适配器。

开发板的供电范围可以是6-20V,但制造商建议将其保持在7-12V之间。

⾼于12V时,稳压芯⽚可能会过热,低于7V可能会供电不⾜。

2、VIN引脚 - 该引脚⽤于使⽤外部电源为Arduino Uno开发板供电。

电压应控制在上述提到的范围内。

3、USB接⼝ - 连接到计算机时,提供500mA/5V电压。

所使⽤的供电⽅式决定了可⽤于电路的功率:使⽤USB为电路供电时,电流最⼤限制在500mA。

(考虑到该电源也⽤于为MCU、外围设备、板载稳压器和与其连接的组件供电。

)当通过电源插座或VIN为电路供电时,可⽤的最⼤电流取决于Arduino开发板上的5V和3.3V稳压器。

Arduino学习笔记A13 - 最简单的Arduino频率计

Arduino学习笔记A13 - 最简单的Arduino频率计

Arduino学习笔记A13 - 最简单的Arduino频率计想测量一个声音的频率或是占空比,但是又没频率计?我们可以用一块arduino去搞定这事情。

需要的材料仅是一块普通arduino,无需外围元件。

特性:1. 可以测量20~20kHz的信号,超过的话误差越来越大。

2. 误差大致是±5%。

玩玩还行。

3. 输出的结果有:频率,占空比,周期,高电平时间,低电平时间。

4. 只能测量单频,复合波形就不行了。

步骤:1.写下面程序到arduino里面ARDUINO 代码复制打印下载1./*2.Arduino Frequency meter3.Ansifa4.2013/1/55.*/6.int divider[6] = {0, 1, 8, 64, 256, 1024};7.int prescaler = 5;8.double count = 0;9.double middle = 0;10.char x = 0;11.ISR(TIMER1_OVF_vect)12.{13.if(prescaler < 4)14.{15. prescaler++;16.}17.}18.void interrupt()19.{20.if(!x)21.{22. count = TCNT1;23. TCNT1 = 0x000;24. TCCR1B = prescaler;25.attachInterrupt(0, interrupt,FALLING);26.}27.else28.{29. middle = TCNT1;30.attachInterrupt(0, interrupt, RISING);31.}32. x = ~x;33.}34.void setup()35.{36.Serial.begin(57600);37. TIMSK1 = 0x01;38. TCCR1A = 0x00;39.attachInterrupt(0, interrupt, RISING);40.}41.void loop()42.{43.Serial.print("Freq: ");44.Serial.print(16000000.0 /divider[prescaler] / count);45.Serial.print(" Hz\t\tDuty: ");46.Serial.print(middle / count * 100);47.Serial.print(" %\t\tPeriod: ");48.Serial.print(0.0000625 *divider[prescaler]*count);49.Serial.print(" ms\t\tH-time: ");50.Serial.print(0.0000625 *divider[prescaler]*middle);51.Serial.print(" ms\t\tL-time: ");52.Serial.print(0.0000625 *divider[prescaler]*(count - middle));53.Serial.println(" ms");54.if(prescaler > 1)55.{56. prescaler--;57.delay(200);58.}59.delay(100);60.}2. 将你的信号从D2和GND引脚输入。

arduino学习笔记4–利用数组使6个led闪烁

arduino学习笔记4–利用数组使6个led闪烁

arduino学习笔记4–利用数组使6个led闪烁通过上一节学习,知道了怎样使用循环对6个led进行控制,我们发现LED灯的端口是连续的,是有规律的,若端口号是杂乱无章的,如2、3、6、11能不能使用循环来实现了?一、实验现象用控制板来实现6个端口号没有规律的LED闪烁,展示让无序的LED一个接一个按顺序亮起的方法。

灯会按照顺序先从数组头的亮到数组尾,然后反过来由尾到头。

和从前例子不同的是,本例的LED不是必须连续的。

你可以任意改变LED连接的引脚和顺序。

只要在数组中定义即可。

二、实验器材:控制板、LED6个、电阻6个、面包板和杜邦线。

三、实验所用函数及语句Array 数组1.数组是一种可访问的变量的集合。

2.创建(声明)一个数组类型数组名[ 数组长度 ] ;例如:int a[2];整数数组a的长度为2Int a[2]={3,11};或Int a[ ]={3,11};整数数组a的长度为2,其值分别为3和113.访问数组①.数组从0位开始索引(最大索引数等于声明数组大小-1)。

②.从数组中访问一个值: x = myarray1 [ 4 ];③数组和循环:数组往往在for循环中进行操作,循环计数器可用于访问每个数组元素。

for (int i=0; i<5 ;i++) {pinMode(a[i],OUTPUT );}四、实验电路五、编写程序int timer = 100; // 数字越大间隔时间越长,整个程序都能用,叫全局变量int led[] = {2, 7, 4, 6, 5, 3}; // LED引脚编号数组int js = 6; // 引脚个数(应和LED引脚编号数组相同)void setup() {for (int i = 0; i < js; i++) {//用for循环初始化引脚:pinMode(led[i], OUTPUT); // 数组元素取出时应该是从0开始到js - 1结束。

arduino学习笔记10-20

arduino学习笔记10-20

arduino学习笔记10 - 1602液晶实验2012-04-08 09:27 [小大] 来源: 未知转发至:本次试验使用arduino直接驱动1602液晶显示文字1602液晶在应用中非常广泛,最初的1602液晶使用的是HD44780控制器,现在各个厂家的1602模块基本上都是采用了与之兼容的IC,所以特性上基本都是一致的。

1602LCD主要技术参数显示容量为16×2个字符;芯片工作电压为4.5~5.5V;工作电流为2.0mA(5.0V);模块最佳工作电压为5.0V;字符尺寸为2.95×4.35(W×H)mm。

1602液晶接口引脚定义接口说明:1、两组电源一组是模块的电源一组是背光板的电源一般均使用5V 供电。

本次试验背光使用3.3V供电也可以工作。

2、VL是调节对比度的引脚,串联不大于5KΩ的电位器进行调节。

本次实验使用1KΩ的电阻来设定对比度。

其连接分高电位与低电位接法,本次使用低电位接法,串联1KΩ电阻后接GND。

3、RS 是很多液晶上都有的引脚是命令/数据选择引脚该脚电平为高时表示将进行数据操作;为低时表示进行命令操作。

4、RW 也是很多液晶上都有的引脚是读写选择端该脚电平为高是表示要对液晶进行读操作;为低时表示要进行写操作。

5、E 同样很多液晶模块有此引脚通常在总线上信号稳定后给一正脉冲通知把数据读走,在此脚为高电平的时候总线不允许变化。

6、D0—D7 8 位双向并行总线,用来传送命令和数据。

7、BLA是背光源正极,BLK是背光源负极。

1602液晶的基本操作分以下四种:下图就是1602液晶实物图1602直接与arduino通信,根据产品手册描述,分8位连接法与4位连接法,咱们先使用8位连接法进行实验。

硬件连接方式如下图代码如下1.int DI = 12;2.int RW = 11;3.int DB[] = {3, 4, 5, 6, 7, 8, 9, 10};//使用数组来定义总线需要的管脚4.int Enable = 2;5.6.void LcdCommandWrite(int value) {7.// 定义所有引脚8.int i = 0;9.for (i=DB[0]; i <= DI; i++) //总线赋值10.{11.digitalWrite(i,value & 01);//因为1602液晶信号识别是D7-D0(不是D0-D7),这里是用来反转信号。

arduino学习资料

arduino学习资料

arduino学习笔记arduino学习笔记1 - 什么是arduino?要了解arduino就先要了解什么是单片机,arduino平台的基础就是AVR指令集的单片机。

1、什么是单片机?它与个人计算机有什么不同?一台能够工作的计算机要有这样几个部份构成:中央处理单元CPU (进行运算、控制)、随机存储器RAM(数据存储)、存储器ROM(程序存储)、输入/输出设备I/O(串行口、并行输出口等)。

在个人计算机(PC)上这些部份被分成若干块芯片,安装在一个被称之为主板的印刷线路板上。

而在单片机中,这些部份全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如模拟量/数字量转换(A/D)和数字量/模拟量转换(D/A)等。

2、单片机有什么用?实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用酷睿处理器吗?应用的关键是看是否够用,是否有很好的性能价格比。

如果一台冰箱都需要用酷睿处理起来进行温度控制,那价格就是天价了。

单片机通常用于工业生产的控制、生活中与程序和控制有关(如:电子琴、冰箱、智能空调等)的场合。

下图就是一个Atmega328P-PU单片机,基于AVR指令集的8位处理器,频率20MHz,存储器空间32KB。

什么是Arduino?Arduino是一个能够用来感应和控制现实物理世界的一套工具。

它由一个基于单片机并且开放源码的硬件平台,和一套为Arduino板编写程序的开发环境组成。

Arduino可以用来开发交互产品,比如它可以读取大量的开关和传感器信号,并且可以控制各式各样的电灯、电机和其他物理设备。

Arduino项目可以是单独的,也可以在运行时和你电脑中运行的程序(例如:Flash,Processing,MaxMSP)进行通讯。

Arduino板你可以选择自己去手动组装或是购买已经组装好的;Arduino开源的IDE 可以免费下载得到。

arduino学习笔记6-按键实验

arduino学习笔记6-按键实验

arduino学习笔记6-按键实验我们讲了数字IO口介绍以及做了流水灯演示(主要用到IO口的输出功能),这节课我们讲解一下IO口的输入功能,说到输入功能,最经典的例子莫过于按键实验。

按键开关:按键是一种常用的控制电器元件,常用来接通或断开‘控制电路’(其中电流很小),从而达到控制电动机或其他电气设备运行目的的一种开关。

按键开关一共有四个角,同侧角不相连在按键没有按下去的时候1,2号脚相连,3,4号脚相连。

按键按下去的时候,1,2,3,4号脚就全部接通。

一、实验现象当按住按键时点亮LED,当放开按键后熄灭LED。

二、实验器材:控制板、LED1个、电阻1个、按键1个、面包板和杜邦线。

三、实验所用函数及语句读数字引脚:int digitalRead (pin) ,返回引脚的高低电平. 在读引脚之前, 需要将引脚设置为INPUT模式。

if用于与比较运算符结合使用,测试是否已达到某些条件,如果圆括号中的语句为真,那就执行大括号中的语句。

如果不是,程序将跳过这段代码。

使用格式如下:if (条件){// 添加执行部分}【比较运算符】x == y (x 等于 y)x != y (x 不等于 y)x < y (x 小于 y)x > y (x 大于 y)x <= y (x 小于等于 y)x >= y (x 大于等于 y)与基本的if语句相比,由于允许多个测试组合在一起,if/else可以使用更多的控制流。

代码是这样:if (条件){// 动作A}else{// 动作B}else中可以进行另一个if测试,这样多个相互独立的测试就可以同时进行。

每一个测试一个接一个地执行直到遇到一个测试为真为止。

当发现一个测试条件为真时,与其关联的代码块就会执行,然后程序将跳到完整的if/else结构体的下一行。

如果没有一个测试被验证为真,默认执行else语句块。

缺省的else语句块,将被设为默认行为并执行。

注意:一个else if语句块必须与else同时使用。

arduino知识点总结

arduino知识点总结

arduino知识点总结1. Arduino的基本概念Arduino是由一块微控制器和一组输入/输出端口组成的开源电子平台。

它提供了一种简单而全面的方法来创建各种数字设备,例如传感器、灯光、电机等。

通过编写Arduino的程序,用户可以控制这些设备的操作,实现各种功能。

2. Arduino的硬件结构Arduino板上核心的硬件包括微控制器、电源电路、输入/输出引脚、连接器等。

其中最核心的部分是微控制器,它是Arduino的“大脑”,控制着整个系统的运行。

对于初学者来说,了解Arduino的硬件结构对于后续的学习和开发非常重要。

3. Arduino的编程环境Arduino的编程环境是基于Java语言开发的一种集成开发环境(IDE),适用于使用Arduino的开发者。

在这个环境中,用户可以编写、上传和调试Arduino程序,实现对设备的控制和操作。

熟悉Arduino的编程环境,对于开发者来说具有非常重要的意义。

4. Arduino的编程语言Arduino的编程语言基于C/C++,是一种简化的编程语言,适合初学者使用。

它包含了一些基本的语法和函数,方便开发者编写程序。

了解这些基本的语法和函数,对于初学者来说是非常必要的。

5. Arduino的输入/输出Arduino的输入/输出(IO)引脚是连接各种传感器、执行器等设备的接口。

用户可以通过这些引脚连接外部设备,实现对设备的控制和操作。

了解Arduino的IO引脚的使用方法,对于开发者来说是非常有必要的。

6. Arduino的库函数Arduino的库函数是一些预定义的函数,用于实现各种功能,例如控制数字引脚、模拟引脚、串口通信等。

在编写程序时,开发者可以直接调用这些库函数,简化代码的编写过程。

了解Arduino的库函数,对于开发者来说是非常重要的。

7. Arduino的通信接口Arduino支持多种通信接口,例如串口、I2C、SPI等。

这些通信接口可以用于连接各种外部设备,将Arduino板与其他设备进行数据交换。

Arduino学习笔记一

Arduino学习笔记一

Arduino学习笔记一by:齿轮第一讲点亮Arduino我们首先打开Arduino IDE(我用的是1.6.5版本下载地址是https:///en/Main/Software)我们点击文件>示例>Basics>Blink然后打开Blink并下载至Arduino观察板子上的灯你会发现有一个灯一直在以一定频率在闪烁,注:“这个灯是接到13号针脚上的。

”现在观察代码你发现了什么?首先可以看到“//”后灰色的部分,那些是注释不进行编译我们现在先不管它,接下来可以看见“V oid setup()”这是Arduino 编程中的初始化函数。

初始化函数在整个程序的执行过程中只执行一次,注:所有Arduino程序都必须包含“V oid setup()”函数。

然后可以看到“pinMode(13, OUTPUT);”“pinMode”是用来定义针脚模式的,括号中的13代表13号数字针脚,OUTPUT 表示输出INPUT表示输入(后面我们会用到“INPUT”的现在用不到)“;”分号是C语言中的命令结束标志所以当你输入完每一条指令后都要在末尾输入分号。

“pinMode(13, OUTPUT);”的意思便是定义针脚13为输出口。

注:“当你需要使用引脚时必须在初始化函数中定义针脚模式,除通信以外”这个语句之所以被写在“V oid setup()”中是因为“pinMode(13, OUTPUT);”在整个程序中只执行一次。

注:“初始化函数中的所有命令都要写在那两个大括号之间{}。

”“V oid loop()”是Arduino语言中的循环函数,所有除写在初始化函数中的指令以外的指令都必须写在“V oid loop()”中。

注:“循环函数会不断的循环执行其中的命令。

”“digitalWrite(13,HIGH);”的意思是“数字写入13号针脚为高电平。

13表示13号针脚,这个与“pinMode”函数所表示的含义一样,括号中逗号前的数字表示针脚号,逗号后的表示状态,为HIGH或LOW前者表示高电平后者表示低电平,这就是为什么LED亮灭的原因。

arduino学习笔记3 –利用循环使6个led闪烁

arduino学习笔记3 –利用循环使6个led闪烁

arduino学习笔记3 –利用循环使6个led闪烁通过上一节学习,知道了怎样让一个led进行闪烁,下面的实验会对6个led进行控制。

一、实验现象用控制板来实现6个LED闪烁二、实验器材:控制板、LED6个、电阻6个、面包板和杜邦线。

三、实验所用函数及语句整形变量:int 变量名;变量名以字母开始。

算术运算:自加i++,等同于i=i+1、i+=1;自减i—等同于i=i-1、i-=1;循环:用来明定一段区域代码重复指行的次数。

for (初始化部分; 条件判断部分; 数据递增部分) {//语句块}初始化部分被第一个执行,且只执行一次。

每次通过这个循环,条件判断部分将被测试;如果为真,语句块和数据递增部分就会被执行,然后条件判断部分就会被再次测试,当条件测试为假时,结束循环。

例如: for (int i=3; i <= 6; i++){digitalWrite(i, HIGH);依次点亮3,4,5,6号端口上的LEDdelay(10);//变量i只能在循环括号内访问}while(条件判断部分){//语句块}while循环将会连续地无限地循环,直到圆括号()中的表达式变为假。

被测变量必须要有所变化,否则while循环将一直不会停。

例如: int i=2;//i只在 "loop" 函数内可用While(i<=6){digitalWrite(i, HIGH);依次点亮3,4,5,6号端口上的LEDdelay(10);i++;//一定要有变化,否则一直循环}四、实验电路五、编写程序void setup(){for(int i=2;i<8;i++){pinMode(i,INPUT);// 变量i只能在循环括号内访问}}void loop(){for(int i=2;i<8;i++){digitalWrite(i,HIGH);// 变量i只能在循环括号内访问delay(100);digitalWrite(i,LOW);delay(100);}}大家用改变端口如2、4、6、8、10、12或用while循环改写一下上面的代码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对于一些对电路板大小要求比较严格的地方,arduino团队提供了arduino Nano,此板体积做的非常小。如下图:
arduino板子上基本端口如图描述,对几个比较特殊的端口下面详细说明下:
VIN端口:VIN是input voltage的缩写,表示有外部电源时的输入端口。
AREF:Reference voltage for the analog inputs(模拟输入的基准电压)。使用analogReference()命令调用。
硬件开源并可扩展-Arduino板基于Atmel的ATMEGA8和ATMEGA168/328单片机。Arduino基于Creative Commons许可协议,所以有经验的电路设计师能够根据需求设计自己的模块,可以对其扩展或改进。甚至是对于一些相对没有什么经验的用户,也可以通过制作试验板来理解Arduino是怎么工作的,省钱又省事。
ICSP:也有称为ISP(In System Programmer),就是一种线上即时烧录,目前比较新的芯片都支持这种烧录模式,包括大家常听说的8051系列的芯片,也都慢慢采用这种简便的烧录方式。我们都知道传统的烧录方式,都是将被烧录的芯片,从线路板上拔起,有的焊死在线路板上的芯片,还得先把芯片焊接下来才能烧录。为了解决这种问题,发明了ICSP线上即时烧录方式。只需要准备一条R232线(连接烧录器),以及一条连接烧录器与烧录芯片针脚的连接线就可以。电源的+5V,GND,两条负责传输烧录信息的针脚,再加上一个烧录电压针脚,这样就可以烧录了。
Arduino的编程语言就像似在对一个类似于物理的计算平台进行相应的连线,它基于处理多媒体的编程环境。
为什么要使用Arduino?
有很多的单片机和单片机平台都适合用做交互式系统的设计。例如:Parallax Basic Stamp,Netmedia’s BX-24,Phidgets,MIT’s Handyboard和其它等等提供类似功能的。所有这些工具,你都不需要去关心单片机编程繁琐的细节,提供给你的是一套容易使用的工具包。Arduino同样也简化了同单片机工作的流程,但同其它系统相比Arduino在很多地方更具有优越性,特别适合老师,学生和一些业余爱好者们使用:
arduino学习笔记
arduino学习笔记1 -什么是arduino?
要了解arduino就先要了解什么是单片机,arduino平台的基础就是AVR指令集的单片机。
1、什么是单片机?它与个人计算机有什么不同?
一台能够工作的计算机要有这样几个部份构成:中央处理单元CPU(进行运算、控制)、随机存储器RAM(数据存储)、存储器ROM(程序存储)、输入/输出设备I/O(串行口、并行输出口等)。在个人计算机(PC)上这些部份被分成若干块芯片,安装在一个被称之为主板的印刷线路板上。而在单片机中,这些部份全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如模拟量/数字量转换(A/D)和数字量/模拟量转换(D/A)等。
2、单片机有什么用?
实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用酷睿处理器吗?应用的关键是看是否够用,是否有很好的性能价格比。如果一台冰箱都需要用酷睿处理起来进行温度控制,那价格就是天价了。
单片机通常用于工业生产的控制、生活中与程序和控制有关(如:电子琴、冰箱、智能空调等)的场合。
Analog I/O模拟输入/输出端口0-5。
支持ICSP下载,支持TX/RX。
输入电压:USB接口供电或者5V-12V外部电源供电。
输出电压:支持3.3V级5V DC输出。
处理器:使用Atmel Atmega168 328处理器,因其支持者众多,已有公司开发出来32位的MCU平台支持arduino。
Arduino基于AVR平台,对AVR库进行了二次编译封装,把端口都打包好了,寄存器啦、地址指针之类的基本不用管。大大降低了软件开发难度,适宜非专业爱好者使用。优点和缺点并存,因为是二次编译封装,代码不如直接使用AVR代码编写精练,代码执行效率与代码体积都弱于AVR直接编译。
性能:
Digita其它平台相比,Arduino板算是相当便宜了。最便宜的Arduino版本可以自己动手制作,即使是组装好的成品,其价格也不会超过200元。
跨平台-Arduino软件可以运行在Windows,Macintosh OSX,和Linux操作系统。大部分其它的单片机系统都只能运行在Windows上。
简易的编程环境-初学者很容易就能学会使用Arduino编程环境,同时它又能为高级用户提供足够多的高级应用。对于老师们来说,一般都能很方便的使用Processing编程环境,所以如果学生学习过使用Processing编程环境的话,那他们在使用Arduino开发环境的时候就会觉得很相似很熟悉。
软件开源并可扩展-Arduino软件是开源的,对于有经验的程序员可以对其进行扩展。Arduino编程语言可以通过C++库进行扩展,如果有人想去了解技术上的细节,可以跳过Arduino语言而直接使用AVR C编程语言(因为Arduino语言实际上是基于AVR C的)。类似的,如果你需要的话,你也可以直接往你的Arduino程序中添加AVR-C代码。
下图就是一个Atmega328P-PU单片机,基于AVR指令集的8位处理器,频率20MHz,存储器空间32KB。
什么是Arduino?
Arduino是一个能够用来感应和控制现实物理世界的一套工具。它由一个基于单片机并且开放源码的硬件平台,和一套为Arduino板编写程序的开发环境组成。
Arduino可以用来开发交互产品,比如它可以读取大量的开关和传感器信号,并且可以控制各式各样的电灯、电机和其他物理设备。Arduino项目可以是单独的,也可以在运行时和你电脑中运行的程序(例如:Flash,Processing,MaxMSP)进行通讯。Arduino板你可以选择自己去手动组装或是购买已经组装好的;Arduino开源的IDE可以免费下载得到。
目前arduino的控制板最新的为Arduino Uno,如下图:
国内使用比较多的为Arduino Duemilanove 2009,主要原因是Uno的usb控制芯片封装方式改变,制造成本上升,其他变化不大,性价比还是Arduino Duemilanove 2009比较好。
因其开源特性,生产arduino控制板的厂商众多,同样的Duemilanove 2009就有很多种颜色。
相关文档
最新文档