这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » 小庄稼人的Sakura学习笔记四:串口篇

共27条 2/3 1 2 3 跳转至
专家
2012-12-03 17:36:05     打赏
11楼

Sakura学习笔记一:数字I/O

【语法学习】

【程序结构】

setup()

程序刚启动时,调用setup()函数.用于初始化变量,设置针脚的输出/输入类型,配置串口,引入库文件等等每次Arduino上电或重启后,setup函数只运行一次.

 

loop()

setup()函数中初始化和定义了变量之后,loop()函数,顾名思义,不停的循环,根据程序中的内容,根据一些反馈,响应改变执行情况。我们就用loop中的代码控制Arduino板。

======================================================================

【数字I/O

pinMode()

描述

将指定的引脚配置成输出或输入。详情请见digital pins。 

语法

pinMode(pin, mode) 

参数

pin:要设置模式的引脚 

mode:INPUTOUTPUT 

返回:

 

digitalWrite()

描述

给一个数字引脚写入HIGH或者LOW。 

如果一个引脚已经使用pinMode()配置为OUTPUT模式,其电压将被设置为相应的值,HIGH5V3.3V控制板上为3.3V),LOW0V。 

如果引脚配置为INPUT模式,使用digitalWrite()写入HIGH值,将使内部20K上拉电阻(详见数字引脚教程)。写入LOW将会禁用上拉。上拉电阻可以点亮一个LED让其微微亮,如果LED工作,但是亮度很低,可能是因为这个原因引起的。补救的办法是 使用pinMode()函数设置为输出引脚。

语法

digitalWrite(pin, value) 

参数

pin: 引脚编号(如1,5,10A0A3) 

value: HIGH or LOW 

返回:无 

 

digitalRead()

描述

读取指定引脚的值,HIGHLOW。 

语法

digitalReadPIN) 

参数

pin:你想读取的引脚号(int) 

返回

HIGH 或 LOW

====================================================================== 

【实验一】数字输出

本实验是对Sakura的数字I/O口的输出操作,LED流水灯。程序官网中已给出:

/*GR-SAKURA Sketch Template Version: V1.02*/

#include <rxduino.h>

 

#define INTERVAL 500

 

void setup()

{

    pinMode(PIN_LED0,OUTPUT);

    pinMode(PIN_LED1,OUTPUT);

    pinMode(PIN_LED2,OUTPUT);

    pinMode(PIN_LED3,OUTPUT);

 

}

 

void loop()

{

 

    digitalWrite(PIN_LED0, 1);

    delay(INTERVAL);

    digitalWrite(PIN_LED1, 1);

    delay(INTERVAL);

    digitalWrite(PIN_LED2, 1);

    delay(INTERVAL);

    digitalWrite(PIN_LED3, 1);

    delay(INTERVAL);

    digitalWrite(PIN_LED0, 0);

    delay(INTERVAL);

    digitalWrite(PIN_LED1, 0);

    delay(INTERVAL);

    digitalWrite(PIN_LED2, 0);

    delay(INTERVAL);

    digitalWrite(PIN_LED3, 0);

    delay(INTERVAL);

}

 

【实验二】数字输入

  本实验是检测Sakura的数字I/O口的输入,并且用板上的LED的亮灭显示输入的值。

SakuraLED原理图

    由于板上LED是给高电平点亮的,按键板上的按键在松开的时候是连接VCC,这样在没有全按下的时候,LED接高电平,全部点亮。为了方便实验的观察,将读入的按键进行取非操作。具体程序如下:

#include <rxduino.h>

//定义变量存储按键值

int val_0 = 0;

int val_1 = 0;

int val_2 = 0;

int val_3 = 0;

 

void setup()

{

    pinMode(PIN_LED0,OUTPUT); //4LED设置为输出

    pinMode(PIN_LED1,OUTPUT);

    pinMode(PIN_LED2,OUTPUT);

    pinMode(PIN_LED3,OUTPUT);

    pinMode(0, INPUT);      // 0脚设置为输入

    pinMode(1, INPUT);      // 1脚设置为输入

    pinMode(2, INPUT);      // 2脚设置为输入

    pinMode(3, INPUT);      // 3脚设置为输入

}

 

void loop()

{

    val_0 = digitalRead(0);   // 读取按键值

    val_1 = digitalRead(1); 

    val_2 = digitalRead(2);   

    val_3 = digitalRead(3);   

    digitalWrite(PIN_LED0, !val_0);    //将按键值进行取非操作 并写给LED

    digitalWrite(PIN_LED1, !val_1);    

    digitalWrite(PIN_LED2, !val_2);    

    digitalWrite(PIN_LED3, !val_3);      

}

视频:


专家
2012-12-03 18:01:07     打赏
12楼

Sakura学习笔记二:模拟I/O

【语法学习】

analogReference(type)

analogRead()

analogWrite()
 =====================================================================

 

【试验一】呼吸灯

本实验通过控制PWM脉宽的调制来控制LED的点亮的程度,实验中使用了板上的四位LED灯。

#include <rxduino.h>

 

void setup()

{

    pinMode(PIN_LED0,OUTPUT);

    pinMode(PIN_LED1,OUTPUT);

    pinMode(PIN_LED2,OUTPUT);

    pinMode(PIN_LED3,OUTPUT);

 

}

 

void loop()

{

     for (int a=0; a<=255;a++)                //循环语句,控制PWM亮度的增加

         {

             analogWrite(PIN_LED0,a);

             analogWrite(PIN_LED1,a);

             analogWrite(PIN_LED2,a);

             analogWrite(PIN_LED3,a);

             delay(10);                      //当前亮度的维持的时间,单位毫秒

         }

         

     for (int a=255; a>=0;a--)                //循环语句,控制PWM亮度的减少

         {

             analogWrite(PIN_LED0,a);

             analogWrite(PIN_LED1,a);

             analogWrite(PIN_LED2,a);

             analogWrite(PIN_LED3,a);

             delay(10);                        //当前亮度的维持的时间,单位毫秒

         }

      delay(1000);                             //完成一个循环后等待的时间,单位毫秒

      

}

 

 

【实验二】模拟I/O输入

 

#include <rxduino.h>

 

void setup()

{

    pinMode(PIN_LED0,OUTPUT);

    pinMode(PIN_LED1,OUTPUT);

    pinMode(PIN_LED2,OUTPUT);

    pinMode(PIN_LED3,OUTPUT);

 

}

 

void loop()

{

    int n = analogRead(A0);            //读取A0模拟口的数值(0-5V 对应 0-1204取值)

    analogWrite(PIN_LED0,n/4);         //PWM最大取值255  所以将模拟口的取值n除以4

    analogWrite(PIN_LED1,n/4);         

    analogWrite(PIN_LED2,n/4);         

    analogWrite(PIN_LED3,n/4);    
}     


专家
2012-12-03 18:02:23     打赏
13楼

Sakura学习笔记三:高级I/O

【实验一】防空警报实验

#include <rxduino.h>

void setup()

{

  //  pinMode(0,OUTPUT);//设置蜂鸣器的pin为输出模式

}

void loop()

{

    for(int i=200;i<=800;i++)                    //用循环的方式将频率从200HZ 增加到800HZ

    {      

        pinMode(0,OUTPUT);

        tone(0,i);                            //在一号端口输出频率

        delay(5);                              //该频率维持5毫秒  

    }

    delay(4000);                            //最高频率下维持4秒钟

    for(int i=800;i>=200;i--)

    { 

        pinMode(0,OUTPUT);

        tone(0,i);

        delay(10);

    }

}

试试了咱的低音炮音响,效果跟是上次918时候拉的防空警报一样!!


专家
2012-12-03 18:48:52     打赏
14楼

Sakura学习笔记四:串口篇

分享一个挺好用的串口:sscom32.zip

【实验一】简单的串口实验 (发送数据)
#include <rxduino.h>
void setup()
{
    Serial.begin( 38400 );
}

void loop()
{
    Serial.print( "Welcome to EEPW, I am XiaoFeng!");
    Serial.println( " " );

   }

实验实现效果图:


工程师
2012-12-03 21:41:24     打赏
15楼
不知道为什么没有实物的图片,配上图就好多了

高工
2012-12-03 21:43:02     打赏
16楼

好贴,顶一个!!问一下,用的什么cpu 啊??


专家
2012-12-03 21:46:53     打赏
17楼
明天吧上视频,今天视频发给老王,还没处理好。

专家
2012-12-03 21:49:29     打赏
18楼

RX63N (R5F563NBDDFP)(工作频率:96MHz,闪存:1 MB,RAM:128KB,内部浮点运算单元))支持以太网,支持 USB 功能/主机,数字I/O引脚:55,模拟输入引脚:16,支持XBee™,支持 JTAG


工程师
2012-12-05 18:18:17     打赏
19楼
这个视频的效果是自己弄得吗?说明一下怎么把板子连接到电脑上,刚拿到板子,要不要自己买下载线啊

高工
2012-12-05 19:38:46     打赏
20楼

真是帅呆了!!!LZ好棒哦


共27条 2/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]