Arduin学习笔记
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学习笔记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学习笔记
arduino学习笔记12 - ADXL345加速度传感器实验2011-8-19 09:55|发布者: 弘毅|查看: 134|评论: 12|原作者: 弘毅摘要: 本次实验使用arduino用过IIC接口驱动ADXL345加速度传感器,使XYZ 三坐标加速度值显示在1602液晶上,学习ADXL345加速度传感器与IIC接口的基本使用方法。
前两天我们做了温度传感器实验,大家一定还有印象。
今天我们来研究另外一种传感器加速度传感器。
什么是加速度传感器加速度传感器,作用是测量在加速过程中产生的力。
最基本的如咱们平常所熟悉的是重力加速度,大小是1g。
加速度传感器一般用于什么地方通过测量由重力引起的加速度,你可以计算出设备相对于水平面的倾斜角度。
通过分析动态加速度,你可以分析出设备的移动方式。
自平衡车中就是使用加速度传感器与陀螺仪进行卡尔曼滤波进行姿态矫正。
本次试验使用的ADXL345数字传感器,通过I2C或者SPI接口直接输出数字信号。
在1g的加速度下,输出数值为256.下面是硬件连接图下面是代码1.#include <Wire.h> //调用arduino自带的I2C库2.#include <LiquidCrystal.h> //调用arduino自带的LiquidCrystal库3.4.#define Register_ID 05.#define Register_2D 0x2D6.#define Register_X0 0x327.#define Register_X1 0x338.#define Register_Y0 0x349.#define Register_Y1 0x3510.#define Register_Z0 0x3611.#define Register_Z1 0x3712.13.LiquidCrystal lcd(12, 11, 10, 9, 8, 7);//设置接口14.15.int ADXAddress = 0xA7>>1; //转换为7位地址16.int reading = 0;17.int val = 0;18.int X0,X1,X_out;19.int Y0,Y1,Y_out;20.int Z1,Z0,Z_out;21.double Xg,Yg,Zg;22.23.void setup()24.{25.lcd.begin(16, 2); //初始化LCD26.delay(100);27.Wire.begin(); //初始化I2C28.delay(100);29.Wire.beginTransmission(ADXAddress);30.Wire.send(Register_2D);31.Wire.send(8);32.Wire.endTransmission();33.}34.35.void loop()36.{37.Wire.beginTransmission(ADXAddress);38.Wire.send(Register_X0);39.Wire.send(Register_X1);40.Wire.endTransmission();41.Wire.requestFrom(ADXAddress,2);42.if(Wire.available()<=2);43.{44.X0 = Wire.receive();45.X1 = Wire.receive();46.X1 = X1<<8;47.X_out = X0+X1;48.}49.50.Wire.beginTransmission(ADXAddress);51.Wire.send(Register_Y0);52.Wire.send(Register_Y1);53.Wire.endTransmission();54.Wire.requestFrom(ADXAddress,2);55.if(Wire.available()<=2);56.{57.Y0 = Wire.receive();58.Y1 = Wire.receive();59.Y1 = Y1<<8;60.Y_out = Y0+Y1;61.}62.63.Wire.beginTransmission(ADXAddress);64.Wire.send(Register_Z0);65.Wire.send(Register_Z1);66.Wire.endTransmission();67.Wire.requestFrom(ADXAddress,2);68.if(Wire.available()<=2);69.{70.Z0 = Wire.receive();71.Z1 = Wire.receive();72.Z1 = Z1<<8;73.Z_out = Z0+Z1;74.}75.76.Xg = X_out/256.00;//把输出结果转换为重力加速度g,精确到小数点后2位。
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 学习笔记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学习笔记(四)--常⽤函数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程序的主函数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语言基础
1.前言在初步认识什么是Arduino之后,我们就开始讲解一下Arduino语言基础,我们需要知道到底Arduino提供了什么平台以及什么语言来让我们做开发(技术基本上都是先学习开发语言)。
2.Arduino语言以及程序结构Arduino使用C/C语言编写程序(绝大部分的程序员大学都学了这个)。
C语言是一种面向过程的编程语言,C是一种面向对象的编程语言(虽然楼主已经忘光了这个)。
早期Arduino核心库使用C语言编写,后来引进了面向对象的思想,目前最新核心库采用C与C++混合编程。
通常所说的Arduino语言,就是指Arduino核心库提供的各种API的集合。
这些API是对更底层的单片机支持库进行二次封装所形成的(玩过单片机的人估计都是经常和各种寄存器打交道)。
Arduino提供的API可以让初学者不用理会单片机复杂寄存器配置,然后就能直观控制Arduino,提高开发效率。
Arduino程序的基本结构如下:void setup() {// put your setup code here, to run once(这里代码只运行一次):}void loop() {// put your main code here, to run repeatedly(这里代码不断运行):}这个模型可以这样理解(估计学过c语言的都知道main):int main() {setup() ;while(1) {loop() ;}}3.语言基础对于学过C语言的人,可以直接大概扫描一下。
3.1 数据类型3.1.1 常量程序运行中,值不能改变,常量可以是字符,也可以是数字,语句:#define 常量名常量值例子:一般人都要用到调试功能(这里我个人是用串口),但是在真正最终代码的时候又想关闭调试功能,那么就可以这么用:#define MyDebugSerial Serial//该条语句用于使能DEBUG输出信息,屏蔽掉就不会输出debug调试信息#define DEBUG#ifdef DEBUG#define DBGLN(message) MyDebugSerial.println(message)#else#define DBGLN(message)#endifvoid setup() {MyDebugSerial.begin(9600);DBGLN("setup end");}void loop() {}3.1.2 变量程序中可变的值称为变量。
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 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学习笔记word版本
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学习笔记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闪烁通过上一节学习,知道了怎样使用循环对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 - 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学习笔记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-按键实验我们讲了数字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知识点总结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 uno r3学习笔记_12864液晶
arduinouno r3学习笔记(四)12864液晶模块1、功能:显示128*68分辨率图形文字。
按4行8列16*16取模显示。
2、接口:SCK=CLK=>E; MOSI=SID=>RW; CS=RS=>RS3、必须包含头文件:#include <LCD12864RSPI.h>4、创建类并定义接口:LCD12864RSPI(int _latchPin,int _dataPin,int _clockPin);定义接口(RS,RW,CLK)例如:LCD12864RSPI LCDA(A0,A1,A2); //A0接RS,A1接RW,A2接CLK5、特别说明:unsigned char show0[]={0xBC,0xAB,0xBF,0xCD,0xB9,0xA4,0xB7,0xBB};//极客工坊。
定义显示的中文,用内码查询软件生成,一个汉字2个字节。
unsigned char logo0[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,……..略} //笑脸显示图形,用取模软件生成。
6、应用的函数:Print (char);显示文字例如LCDA.print("the answer is ");LCDA.print(answer);chinese(uchar *ptr,intdat)显示中文,LCDA.chinese(show0,AR_SIZE(show0))注:#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )clear()清屏,例如LCDA.clear();//清屏setCursor(uint8_t X,uint8_t Y)设置显示位置(行,列)LCDA.setCursor(1,2); //第2行,第3列;0开始DrawFullScreen(uchar *p) 显示图形例如:LCDA.DrawFullScreen(logo0);。
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闪烁通过上一节学习,知道了怎样让一个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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Arduin学习笔记void setup{}函数初始化void loop{}函数循环pinMode(13,OUTPUT/INPUT)引脚13定义为输出、入模式digitalWrite(13,HIGH/LOW)13引脚输出高、低电平delay()延迟函数analogRead() 读取模拟量函数analogWrite()写入模拟量函数map()函数Serial.begin(波特率值)串口通信函数Serial.print()是输出你要的内容横排显示Serial.println()是输出要显示的内容后自动换行Arduino参考手册Arduino开发语言提供全部的C语言特性和C++语言的部分特性.通过链接到AVR的libc库online~,可以使用库中提供的函数.具体的应用细节请参考相关文档.程序结构在Arduino中, 标准的程序入口main函数在内部被定义,用户只需要关心以下两个函数:void setup()void loop()setup()函数用于初始化, loop()函数用于执行. 初始化函数一般放在程序开头, 用于设置一些引脚的输出/输入模式, 初始化串口通讯等类似工作. loop()函数中的代码将被循环执行, 例如: 读入引脚状态,设置引脚输出状态等.控制语句ifif...elseforswitchwhiledo...whilebreakcontinuereturngoto相关语法;(分号){}(大括号)// (单行注释)/* * /(多行注释)#define#include算术运算符= (赋值)+ (加)- (减)* (乘)/ (除)% (取模)比较运算符== (等于)!= (不等于)< (小于)> (大于)<=(小于等于) >= (大于等于)布尔运算符&& (逻辑与) || (逻辑或) ! (逻辑非)指针运算符* 指针运算符& 地址运算符位运算& (位与)| (位或)^ (位异或)~ (位非)<< (左移) >> (右移)端口操作复合运算符++ (自加)-- (自减)+= (复合加) -= (复合减) *= (复合乘) /= (复合除) &= (复合与) |= (复合或)变量常量HIGH|LOWINPUT|OUTPUTtrue|false整数常量浮点数常量数据类型void(无类型)boolean(布尔型)char(字符型)unsigned char(无符号字符型) byte(字节型)int(整型)unsigned int(无符号整型) long(长整型)unsigned long(符号长整型) float(单精度)double(双精度)string(字符串)array(数组)数据类型转换char()byte()int()word()long()float()变量作用域&修饰符变量作用域static (静态变量)volatile (易变变量)const (不可改变变量)辅助工具sizeof() (sizeof运算符) ASCII码表基本函数数字I/OpinMode(pin, mode) digitalWrite(pin, value) digitalRead(pin)模拟I/OanalogReference(type)analogRead(pin)analogWrite(pin, value)- PWM高级I/OshiftOut(dataPin, clockPin, bitOrder, val) pulseIn(pin, state, timeout)时间millis()delay(ms)delayMicroseconds(us)数学库min(x, y)max(x, y)abs(x)constrain(x, a, b)map(x, in_min, in_max, out_min, out_max) pow(base, exponent)sqrt(x)三角函数sin(rad)cos(rad)tan(rad)随机数randomSeed(seed)random(howbig)random(howsmall, howbig)位操作lowByte()highByte()bitRead()bitWrite()bitSet()bitClear()bit()设置中断函数attachInterrupt(interrupt, function, mode) detachInterrupt(interrupt)开关中断interrupts()noInterrupts()串口通讯Serial.begin(speed)Serial.available()Serial.read()Serial.flush()Serial.print(data)Serial.println(data)扩展库如果要使用一些已有的库, 可以选择菜"Sketch->Import Library", 然后选择相应的库. Sketch工具会自己在代码的开头包含库的头文件(#include). 在引入库之后, 程序的体积也将会因为包含了库的代码).对于不是必要的库, 直接删除对应的#include语句就可以了.官方扩展库以下是Arduino官方提供的扩展库, 被默认包含在开发工具中.EEPROM- 读写EEPROM存储区.Ethernet- 以太网支持.Firmata- 基于串口的通讯协议LiquidCrystal- LCD液晶显示Servo- 伺服电机.1.1点亮LEDint led=13........................................定义LED引脚位13引脚Void setup(){pinMode(led,OUTPUT);..........引脚13定义为输出模式(INTOUP输入)}Void loop(){digitalWrite(led,HIGH);..............写出的信号 13引脚高电平Delay(1000);.................................延迟1000毫秒=1秒 digitalWrite(led, LOW); // led引脚变为低电平delay(1000); // 延时1秒}1.2不使用延时函数的led闪烁程序这里闪烁led没有使用延时函数,使用了定时器的内容,阿德罗已经封装成了库,我们使用更简单// 定义引脚const int ledPin = 13; // led连接的引脚,标准的uno开发板上已经// 变量int ledState = LOW; // led状态,亮或者灭,可以修改long previousMillis = 0; // 存储最后一次的led状态// 这里使用了长整型变量,因为使用了ms,瞬间的数值变化非常大。
long interval = 1000; // 间隔闪烁的时间长度void setup(){// 初始化引脚输出模式pinMode(ledPin, OUTPUT);}void loop(){// 这里可以添加其他的程序unsigned long currentMillis = millis();if(currentMillis - previousMillis > interval){// 保存当前值,方便下次再次和当前时间比较previousMillis = currentMillis;// 如果led熄灭就把它点亮,反之亦然if (ledState == LOW)ledState = HIGH;elseledState = LOW;// 把对应的LED状态反应到led引脚上。
// 之前都是用变量再处理,处理完成后把最终结果输出到终端。
digitalWrite(ledPin, ledState);}}1.3简易流水灯// 引脚定义const int ledCount = 8; // led个数int ledPins[] = { 0,1,2, 3, 4, 5, 6, 7, }; // 对应的led引脚void setup(){// 循环设置,把对应的led都设置成输出for (int thisLed = 0; thisLed < ledCount; thisLed++)pinMode(ledPins[thisLed], OUTPUT);}}void loop(){// 熄灭所有led,不同的电路连接也会得到点亮所有ledfor (int num = 0; num < 8; num++){digitalWrite(ledPins[num], HIGH);}// 循环顺序点亮led然后等待200ms后熄灭for (int num = 0; num < 8; num++){digitalWrite(ledPins[num], LOW);delay(200);digitalWrite(ledPins[num], HIGH);// 这样就形成了简易的led流水效果}}2.1 利用A0输入的模拟量,控制led点亮状态,可以直观看到电压大小引脚定义Const int analogPin= A0;........模拟输入Const int ledCount = 8;........led个数Int ledPins[] = {0,1,2,3,4,5,6,7, }.....对应引脚Void setup(){For (int thisLed = 0;thisLed < ledCount;thisLed++).....循环设置,把对应的led设置成输出{pinMpde(ledPins[rhisLed],OUTPUT);}}Void loop(){int sensorReading = analogRead(analogPin);.......读取电位器的值 Int ledLevel = map(sensorReading ,0,1023,0,ledCount);.....吧对应的值转换成0-8}// 循环对比输出到led:for (int thisLed = 0; thisLed < ledCount; thisLed++) {if (thisLed < ledLevel) {digitalWrite(ledPins[thisLed], HIGH);}else {digitalWrite(ledPins[thisLed], LOW);}}}3.0读取端口端电平信号并输出到串口段/* 读取Pin2的电平信号,并把结果打印到串口,也同时反映到LED灯*/// 定义引脚int pushButton = 2;int led = 13;// 初始化void setup() {// 初始化串口Serial.begin(9600);// 把按键引脚设置为输入// 德飞莱增强版有高电平和低电平触发的2个按键,都可以使用,直接接KEY_H或者KEY_LpinMode(pushButton, INPUT); // 独立模块LY-51S开发板上独立按键K1-K8都可以使用。