Arduino 语法手册(2)

2018-12-04 15:38

int val = 0; //定义变量存以储读值 void setup() {

pinMode(ledPin,OUTPUT); //设置引脚为输出引脚 }

void loop() {

val = analogRead(analogPin); //从输入引脚读取数值

analogWrite(ledPin,val / 4); // 以val / 4的数值点亮LED(因为analogRead读取的数值从0到1023,而analogWrite输出的数值从0到255) } 高级 I/O tone()

在一个引脚上产生一个特定频率的方波(50%占空比)。持续时间可以设定,否则波形会一直产生直到调用noTone()函数。该引脚可以连接压电蜂鸣器或其他喇叭播放声音。

在同一时刻只能产生一个声音。如果一个引脚已经在播放音乐,那调用tone()将不会有任何效果。如果音乐在同一个引脚上播放,它会自动调整频率。

使用tone()函数会与3脚和11脚的PWM产生干扰(Mega板除外)。

注意:如果你要在多个引脚上产生不同的音调,你要在对下一个引脚使用tone()函数前对此引脚调用noTone()函数。 tone(pin, frequency)

tone(pin, frequency, duration) pin:要产生声音的引脚

frequency: 产生声音的频率,单位Hz,类型unsigned int duration:声音持续的时间,单位毫秒(可选),类型unsigned long

noTone()

停止由tone()产生的方波。如果没有使用tone()将不会有效果。 noTone(pin)

pin: 所要停止产生声音的引脚

shiftOut()

将一个数据的一个字节一位一位的移出。从最高有效位(最左边)或最低有效位(最右边)开始。依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。

注意:如果你所连接的设备时钟类型为上升沿,你要确定在调用shiftOut()前时钟脚为低电平,如调用digitalWrite(clockPin, LOW)。

注意:这是一个软件实现;Arduino提供了一个硬件实现的SPI库,它速度更快但只在特定脚有效。

shiftOut(dataPin, clockPin, bitOrder, value) dataPin:输出每一位数据的引脚(int)

clockPin:时钟脚,当dataPin有值时此引脚电平变化(int) bitOrder:输出位的顺序,最高位优先或最低位优先 value: 要移位输出的数据(byte)

dataPin和clockPin要用pinMode()配置为输出。 shiftOut目前只能输出1个字节(8位),所以如果输出值大于255需要分两步。 //最高有效位优先串行输出 int data= 500; //移位输出高字节

shiftOut(dataPin, clock, MSBFIRST, (data >> 8)); //移位输出低字节

shiftOut(data, clock, MSBFIRST, data); //最低有效位优先串行输出 data = 500; //移位输出低字节

shiftOut(dataPin, clock, LSBFIRST, data); //移位输出高字节

shiftOut(dataPin, clock, LSBFIRST, (data >> 8)); 例子:

相应电路,查看tutorial on controlling a 74HC595 shift register //引脚连接到74HC595的ST_CP int latchPin = 8;

//引脚连接到74HC595的SH_CP int clockPin = 12; // //引脚连接到74HC595的DS int dataPin = 11; void setup() { //设置引脚为输出

pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); }

void loop() { //向上计数程序

for(J = 0; J <256; J + +){ //传输数据的时候将latchPin拉低 digitalWrite(latchpin, LOW);

shiftOut(dataPin,clockPin,LSBFIRST,J); //之后将latchPin拉高以告诉芯片 //它不需要再接受信息了

digitalWrite(latchpin, HIGH); delay(1000); } }

shiftIn()

将一个数据的一个字节一位一位的移入。从最高有效位(最左边)或最低有效位(最右边)开始。对于每个位,先拉高时钟电平,再从数据传输线中读取一位,再将时钟线拉低。

注意:这是一个软件实现;Arduino提供了一个硬件实现的SPI库,它速度更快但只在特定脚有效。

shiftIn(dataPin,clockPin,bitOrder) dataPin:输出每一位数据的引脚(int)

clockPin:时钟脚,当dataPin有值时此引脚电平变化(int) bitOrder:输出位的顺序,最高位优先或最低位优先

pulseIn()

读取一个引脚的脉冲(HIGH或LOW)。例如,如果value是HIGH,pulseIn()会等待引脚变为HIGH,开始计时,再等待引脚变为LOW并停止计时。返回脉冲的长度,单位微秒。如果在指定的时间内无脉冲函数返回。

此函数的计时功能由经验决定,长时间的脉冲计时可能会出错。计时范围从10微秒至3分钟。(1秒=1000毫秒=1000000微秒) pulseIn(pin, value) pulseIn(pin, value, timeout) pin:你要进行脉冲计时的引脚号(int)。 value:要读取的脉冲类型,HIGH或LOW(int)。

timeout (可选):指定脉冲计数的等待时间,单位为微秒,默认值是1秒(unsigned long) 返回:脉冲长度(微秒),如果等待超时返回0(unsigned long) 例子: int pin = 7;

unsigned long duration; void setup() {

pinMode(pin, INPUT); }

void loop() {

duration = pulseIn(pin, HIGH);; } 时间 millis()

返回Arduino开发板从运行当前程序开始的毫秒数。这个数字将在约50天后溢出(归零) 例子:

unsigned long time; void setup(){

Serial.begin(9600); }

void loop(){

serial.print(\); time = millis();

//打印从程序开始到现在的时间 serial.println(time);

//等待一秒钟,以免发送大量的数据 delay(1000); }

参数 millis 是一个无符号长整数,试图和其他数据类型(如整型数)做数学运算可能会产生错误

micros()

返回 Arduino 开发板从运行当前程序开始的微秒数。这个数字将在约70分钟后溢出(归零)。在 16MHz 的 Arduino 开发板上(比如 Duemilanove 和 Nano),这个函数的分辨率为四微秒(即返回值总是四的倍数)。在 8MHz 的 Arduino 开发板上(比如 LilyPad),这个函数的分辨率为八微秒。

注意 :每毫秒是1,000微秒,每秒是1,000,000微秒。 例子:

unsigned long time; void setup(){

Serial.begin(9600); }

void loop(){

Serial.print(“Time:”); time = micros(); //打印从程序开始的时间 Serial.println(time); //等待一秒钟,以免发送大量的数据 delay(1000); }

delay()

使程序暂停设定的时间(单位毫秒)。(一秒等于1000毫秒) 参数:ms:暂停的毫秒数(unsigned long) 例子:

ledPin = 13 / / LED连接到数字13脚 void setup() {

pinMode(ledPin, OUTPUT); // 设置引脚为输出 }

void loop() {

digitalWrite(ledPin, HIGH); // 点亮LED delay(1000); // 等待1秒 digitalWrite(ledPin, LOW); // 灭掉LED delay(1000); // 等待一秒 }

虽然创建一个使用delay()的闪烁LED很简单,并且许多例子将很短的delay用于消除开关抖动,delay()确实拥有很多显著的缺点。在delay函数使用的过程中,读取传感器值、计算、引脚操

作均无法执行,因此,它所带来的后果就是使其他大多数活动暂停。其他操作定时的方法请参加millis()函数和它下面的例子。大多数熟练的程序员通常避免超过10毫秒的delay(),除非arduino程序非常简单。

但某些操作在delay()执行时任然能够运行,因为delay函数不会使中断失效。通信端口RX接收到得数据会被记录,PWM(analogWrite)值和引脚状态会保持,中断也会按设定的执行。

delayMicroseconds()

使程序暂停指定的一段时间(单位微秒)。一毫秒等于一千微秒,一秒等于1000000微秒。 目前,能够产生的最大的延时准确值是16383。这可能会在未来的Arduino版本中改变。对于超过几千微秒的延迟,你应该使用delay()代替。 例子:

int outPin = 8; // digital pin 8 void setup() {

pinMode(outPin,OUTPUT); //设置为输出的数字管脚 }

void loop() {

digitalWrite(outPin,HIGH); //设置引脚高电平 delayMicroseconds(50); // 暂停50微秒 digitalWrite(outPin, LOW); // 设置引脚低电平 delayMicroseconds(50); // 暂停50微秒 } 数学运算

min() max() abs()

constrain(x,a,b)【将一个数约束在一个范围内】 map(value, fromLow, fromHigh, toLow, toHigh) value:需要映射的值 fromLow:当前范围值的下限 fromHigh:当前范围值的上限 toLow:目标范围值的下限 toHigh:目标范围值的上限 例子:

void setup(){} void loop() {

int val = analogRead(0); val = map(val, 0, 1023, 0, 255); analogWrite(9, val); } 数学实现

long map(long x, long in_min, long in_max, long out_min, long out_max) {


Arduino 语法手册(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:新北师大版二年级数学上册教学反思

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: