树莓派的学习(二)——撸基础实验

前言

前面了解了树莓派的皮毛,这篇文章我们就开始去做具体的实验。

 

 

 


双色LED实验

介绍

双色LED灯准确来说叫双基色LED灯,是指模块只能显示两种颜色,一般是红色和绿色,可由有三种形态:灭、颜色1亮、颜色2亮,根据颜色组合的不同,分为红蓝双色、黄蓝双色、红绿双色等等。

双色LED是一种常见的LED,常于指示状态,比如:红色表示忙碌,绿色表示Ready

 

实验步骤

建立电路

树莓派 T型转接板 双色LED模块
GPIO1 GPIO18 G(S)
GPIO0 GPIO17 R(中间)
GND GND GND

部署目录

首次使用时,需要在树莓派的pi目录下新进一个文件夹,取名为CLBDEMO,通过FileZilla软件进行新建,首先,进入Pi目录,右键创建目录,设置好名字,确定即可完成文件目录的创建。

然后在该目录下创建目录:01_Double_color_LED。

在01_Double_color_LED目录下创建一个01_Double_color_LED.c。

 

编程实现

接下来我们最好使用VNC远程控制或者直接连接显示屏操作编程。

用Geany打开刚才创建的C文件,然后写代码:

#include <wiringPi.h>
#include <softPwm.h>
#include <stdio.h> 

#define uchar unsigned char    //宏定义
#define makerobo_Led_PinRed 0 //redLED
#define makerobo_Led_PinGreen 1 //redLED

void makerobo_Led_init(void){
	softPwmCreate(makerobo_Led_PinRed,0,100);
	softPwmCreate(makerobo_Led_PinGreen,0,100);	
}
void makerobo_Led_ColorSet(uchar r_val,uchar g_val){
	softPwmWrite(makerobo_Led_PinRed,r_val);
	softPwmWrite(makerobo_Led_PinGreen,g_val);
}
int main(void){
	if(wiringPiSetup()==-1){
			printf("setup wiringPi failed!");
			return 1;
		}
	makerobo_Led_init();
	while(1){
			makerobo_Led_ColorSet(0xff,0x00);
			delay(500);
			makerobo_Led_ColorSet(0x00,0xff);
			delay(500);
			makerobo_Led_ColorSet(0xff,0x45);
			delay(500);
			makerobo_Led_ColorSet(0xff,0xff);
			delay(500);
			makerobo_Led_ColorSet(0x7c,0xfc);
			delay(500);
	}
	return 0;
}

 

效果

灯成功闪烁。

解析

上例代码虽然看不懂,但也能看出个大概,我们的C程序调用了两个重要的方法来实现的。这里我们介绍一下PWM。

WiringPi中包含了一个软件驱动的PWM处理库,可以在任意的树莓派GPIO上输出PWM信号,我们需要两个库:

#include <wiringPi.h> 
#include <softPwm.h>

然后我们来说两个重要方法:

softPwmCreate

int softPwmCreate(int pin,int initialValue,int pwmRange);

该函数会创建一个软件控制的PWM管脚,可以使用任意一GPIO管脚,pwmRange参数可以为0(关)~100(全开)。

返回0代表成功,否则是失败。

softPwmWrite

void softPwmWrite(int pin,int value)

该函数将会更新指定管脚的PWM值,value参数的范围将会被检查,如果指定的管脚之前没有通过softPwmCreate初始化,将会被忽略。

 

另外我们后面还用到了一个函数:

wiringPiSetup

该函数初始化wiringPi,并假定程序将使用wiringPi的管脚定义图。具体管脚映射,可以使用gpio  readall来查看。

 


RGB-LED实验

介绍

RGB-LED模块中的R、G、B分别代表红色、绿色、蓝色,单个RGB-LED实际上在单个灯泡中包含三个LED。这些都是光的原色。也就是说,理论上您可以使用这三种颜色的某种组合来创建任何颜色的光。将纯红色与纯蓝色混合会产生品红色,可以通过混合三种原色的不同强度来制作不同的色调。

实验原理

在本案例中,我们将使用到PWM(脉宽调制)技术来控制RGB-LED的亮度。

一般来说,PWM主要来控制直流电机的速度,控制舵机的角度等,通过数字信号的方式来控制模拟输出的技术。

通过RaspberryPi获得PWM输出。PWM代表“脉冲宽度调制”。PWM是用于从恒定电源获得可变电压的方法。我们将从树莓派PI生成PWM信号,并通过改变连接到Pi的LED的亮度来演示PWM。

因此,再频率为1HZ的情况下,占空比为一半的情况下,LED灯会在500mm内保持高电平,500mm内为低电平,如果将频率提高到100HZ,则肉眼将看到LED灯发出一半的亮度,亮度比较黯淡而已,而看不到闪烁。

我的浅显理解就是:直流电输出的幅度通过PWM后,实际电压输出会只是直流电输出的幅度的一部分。

我们来了解一些PWM的术语
TON(接通时间):这是信号为高的时间
TOFF(关闭时间):这是信号低电平的时间
时间:这是接通时间和关闭时间的总和
占空比:这是一段时间内信号为高电平的时间百分比

实验步骤

连接电路

树莓派 T型转接板 双色LED模块
GPIO2 GPIO27 B
GPIO1 GPIO18 G
GPIO0 GPIO17 R
GND GND GND

编程实现

还是在我们的GeanyIDE中,写如下C代码:

#include <wiringPi.h>
#include <softPwm.h>
#include <stdio.h>

#define uchar unsigned char
#define makerobo_Led_PinRed 0
#define makerobo_Led_PinGreen 1
#define makerobo_Led_PinBlue 2

void makerobo_led_Init(void){
	softPwmCreate(makerobo_Led_PinRed,0,100);
	softPwmCreate(makerobo_Led_PinGreen,0,100);
	softPwmCreate(makerobo_Led_PinBlue,0,100);
}
void makerobo_led_Color_Set(uchar r_val,uchar g_val,uchar b_val){
	softPwmWrite(makerobo_Led_PinRed,r_val);
	softPwmWrite(makerobo_Led_PinGreen,g_val);
	softPwmWrite(makerobo_Led_PinBlue,b_val);
}
int main(void){
	if(wiringPiSetup()==-1){
		printf("setup wiringPi failed !");
		return 1;
	}
	makerobo_led_Init();
	while(1){
		makerobo_led_Color_Set(0xff,0x00,0x00);  //红色 255,0,0
		delay(500);
		makerobo_led_Color_Set(0x00,0xff,0x00);  //绿色  0,255,0
		delay(500);
		makerobo_led_Color_Set(0x00,0x00,0xff);  //蓝色  0,0,255
		delay(500);
		makerobo_led_Color_Set(0xff,0xff,0x00);   //黄色  255,255,0
		delay(500);
		makerobo_led_Color_Set(0xff,0x00,0xff);   //粉色  255,0,255
		delay(500);
	}
	return 0;
}

效果

 


七彩LED灯闪烁

介绍

七色LED灯模块,由于内置了IC芯片,所以只要通电就可以看到七彩LED灯闪烁,不需要做控制,采用不同型号的七色LED灯模块的闪烁情况会有所区别,如快闪和慢速等等。

实验原理

七彩LED模块只需串联一个限流电阻就可以组成控制电路。

实验步骤

连接电路

树莓派 T型转接板 双色LED模块
GND GND GND中间管脚
5v 5v VCC(S)

直接连接然后通电即可,这个实验不需要编程。

 

效果

 


继电器实验

介绍

继电器模块是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路的作用。

实验原理

继电器是电动开关,通过接收来自外部源的电信号来打开和关闭电路。就好比“接力比赛”,嵌入电气产品中的“继电器”的工作方式与此类似。他们接收电信号,然后通过打开和关闭开关将信号发送到其他设备。

在许多应用中使用各种类型的继电器来控制不同的电流量和电路数量。

 

实验步骤

这个实验我们除了继电器,还需要一个双色LED灯。

连接电路

树莓派 T型转接板 继电器模块
GPIO0 GPIO17 IN
5v 5v0 DC+
GND GND DC-
5v 5v COM

 

双色LED模块 T型转接板 继电器模块
中间(R) * NC
GND GND *
S(G) * NO

 

 

编程实现

#include <wiringPi.h>
#include <stdio.h>
#define makerobo_RelayPin  0   //继电器GPIO管脚 T板:GPIO17,即WIRING库中0
int main(void){
        //初始化失效时,将消息打印到屏幕
	if(wiringPiSetup()==-1){
		printf("setup wiringPi failed!");
		return 1;
	}
        //继电器管脚设置为输出模式
	pinMode(makerobo_RelayPin,OUTPUT);
	while(1){
		digitalWrite(makerobo_RelayPin,HIGH); //打开继电器
		delay(1000);
		digitalWrite(makerobo_RelayPin,LOW);  //关闭继电器
		delay(1000);
	}
	return 0;
}

如果顺利,你会听到嘀嗒的声音,这是常闭触点打开,常闭触点闭合。你可以将要控制的高压设备(如220v灯泡)连接到继电器的输出端口,然后继电器将充当自动开关。

继电器板中亮红灯说明IN传入高电。

效果


激光传感器实验

介绍

激光传感器常用于测距用途。它由激光器、激光检测器和测量电路组成。激光传感器是新型测量仪表,他的优点是能实现无接触远距离测量,速度快,精度高,量程大,抗光、电干扰能力强等。

激光传感器由一个650nm红色激光二级管头和一个电阻器组成。

小心操作,请勿直视激光头。

实验原理

激光传感器是利用激光技术进行测量的传感器。它由激光器、激光检测器、测量电路组成。激光传感器是新型测量仪表,他的优点是能实现无接触远距离测量,速度快,精度高,量程大。

激光传感器工作时,先由激光发射二极管对准目标发射激光脉冲。经目标反射后激光向各方向散射。部分散射光返回到传感器接收器,被光学系统接收后成像到雪崩光电二极管上。雪崩光电二极管是一种内部具有放大功能的光学传感器,因此它能检测极其微弱的光信号,并将其转化为相应的电信号。

实验步骤

建立电路

树莓派 T型转接板 激光传感器模块
GPIO0 GPIO17 SIG(S)
5V 5V VCC
GND GND GND(-)

编程实现

#include <wiringPi.h>
#include <stdio.h>

#define makerobo_LaserPin  0  //激光传感器管脚定义

int main(void){
        //初始化连接失败时,将消息打印到屏幕
	if(wiringPiSetup()==-1){
		printf("setup wiringPi failed!");
		return 1;
	}
	pinMode(makerobo_LaserPin,OUTPUT);  //激光传感器设置为输出模式
	while(1){
		digitalWrite(makerobo_LaserPin,HIGH);  //打开激光传感器
		delay(500);
		digitalWrite(makerobo_LaserPin,LOW);  //关闭激光传感器
		delay(500);
	}
	return 0;
}

 

效果

 


轻触开关按键实验

介绍

轻触按键模块是最为常见的开关模块,内部有一个轻触拨盘,当按下输出低电平时,松开以保持高电平。

实验原理

使用轻触开关作为树莓派的输入设备,当按下开关时,通过树莓派的GPIO口设置为输入模式检测到低电平(0V),表示按键被按键;当松开按键时,树莓派检测到高电平(3.3V),在本项目中我们将通过命令行来提示LED是否被按键。

实验步骤

建立电路

树莓派 T型转接板 轻触按键模块
GPIO0 GPIO17 SIG(S)
5V 5V0 VCC
GND GND GND(-)

 

树莓派 T型转接板 双色LED模块
GPIO1 GPIO18 R(中间)
GPIO2 GPIO27 G(S)
GND GND GND

编程实现

#include <wiringPi.h>
#include <stdio.h>
#include <string.h>

#define makerobo_BtnPin   0 //轻触按键PIN口
#define makerobo_RPin   1  //红色LED灯模块PIN
#define makerobo_GPin   2  //绿色LED灯模块PIN

void double_colorLED(char* color){
        //设置为输出模式
	pinMode(makerobo_RPin,OUTPUT);
	pinMode(makerobo_GPin,OUTPUT);
	
        //点亮红色LED灯
	if(!strcmp(color,"makeroboRED")){
		digitalWrite(makerobo_RPin,HIGH);
		digitalWrite(makerobo_GPin,LOW);
	}else if(!strcmp(color,"makeroboGREEN")){ //点亮绿色
		digitalWrite(makerobo_RPin,LOW);
		digitalWrite(makerobo_GPin,HIGH);
	}else{
		printf("makerobo Double Color LED Error");
	}
}
int main(void){
        //初始化连接失败时,将消息打印到屏幕上
	if(wiringPiSetup()==-1){
		printf("setup wiringPi failed!");
		return 1;
	}
        //轻触按键Pin设置为输入模式
	pinMode(makerobo_BtnPin,INPUT);
	double_colorLED("makeroboGREEN");
	while(1){
                //轻触按键去除抖动处理
		if(0==digitalRead(makerobo_BtnPin)){ //按下(红灯)
	                delay(10);  //延时去抖动
			if(0==digitalRead(makerobo_BtnPin)){
                                //点亮红灯
				double_colorLED("makeroboRED");
				printf("Button is pressed\n");
			}
		}else if(1==digitalRead(makerobo_BtnPin)){  //没有按下(绿灯)
			delay(10);
			if(1==digitalRead(makerobo_BtnPin)){
				while(!digitalRead(makerobo_BtnPin));
                                //点亮绿灯
				double_colorLED("makeroboGREEN");
				printf("No Button is pressed\n");
			}
		}
	}
	return 0;
}

效果

 


倾斜开关实验

介绍

倾斜传感器内部带有金属球的球形倾斜开关。它用于检测小角度的倾斜,在简单的倾斜用途中,如倾倒触发报警,倾斜断电等用途。

实验原理

在倾斜开关中金属球以不同的倾斜角度移动以从而触发电路。倾斜开关模块的结构为双向传导的球形倾斜开关。当它向任一侧倾斜时,只要倾斜度和力满足条件时,开关就会通电,从而输出低电平信号。

实验步骤

建立电路

树莓派 T型转接板 倾斜开关模块
GPIO0 GPIO17 D0
5V 5V VCC
GND GND GND

 

树莓派 T型转接板 双色LED模块
GPIO1 GPIO18 R(中间)
GPIO2 GPIO27 G(S)
GND GND GND

编程实现

#include <wiringPi.h>
#include <stdio.h>
#include <string.h>

#define makerobo_TiltPin 0  //倾斜传感器管脚定义
#define makerobo_RPin 1  //红色LED模块管脚定义
#define makerobo_GPin 2  //绿色LED模块管脚定义

void double_colorLED(char* color){
        //设置为输出模式
	pinMode(makerobo_GPin,OUTPUT);
	pinMode(makerobo_RPin,OUTPUT);
	
	if(strcmp(color,"makeroboRED")){   //点红灯
		digitalWrite(makerobo_RPin,HIGH);
		digitalWrite(makerobo_GPin,LOW);
	}else if(strcmp(color,"makeroboGREEN")){  //点绿灯
		digitalWrite(makerobo_RPin,LOW);
		digitalWrite(makerobo_GPin,HIGH);		
	}else
		printf("Double color LED Error!");	
}
int main(void){
        //初始化连接失败,将消息打印到屏幕上
	if(wiringPiSetup()==-1){
		printf("setup wiringPi failed!");
		return 1;
	}
        //倾斜传感器Pin设置为输入模式
	pinMode(makerobo_TiltPin,INPUT);
	double_colorLED("makeroboGREEN");

	while(1){
                //倾斜传感器去除抖动处理
		if(0==digitalRead(makerobo_TiltPin)){
			delay(10);   //延时去抖动
			if(0==digitalRead(makerobo_TiltPin)){
				double_colorLED("makeroboRED");
				printf("Tile\n");
			}
		}else if(1==digitalRead(makerobo_TiltPin)){
			delay(10);
			if(1==digitalRead(makerobo_TiltPin)){
				while(!digitalRead(makerobo_TiltPin));
				double_colorLED("makeroboGREEN");
				printf("No Tile\n");
			}
		}
	}
}

效果

 

 


振动开关传感器实验

实验介绍

振动开关传感器模块采用的是常闭型振动传感器,可用于跟踪振动触发作用,如防盗报警、智能小车、地震报警,该振动传感器与常开型振动传感器相比,振动触发事件长,可以驱动继电器模块。

实验原理

采用常开高灵敏度震动开关。开关在静止时为开路OFF状态,当受到外力碰触而达到相应震动力时,或移动速度达到适当离(偏)心力时,导电接脚会产生瞬间导通呈瞬间ON状态;当外力消失时,开关恢复为开路OFF状态。

在此次实验中,将双色LED模块连接到Raspberry Pi 作为指示作用。敲击或敲击震动传感器时,它将打开双色LED将闪烁红色。再次点击它,LED将变成绿色  –  每次敲击或敲击两种颜色之间交替闪烁。

实验步骤

连接电路

树莓派 T型转接板 振动开关模块
GPIO0 GPIO17 D0
5V 5V VCC
GND GND GND

 

树莓派 T型转接板 双色LED模块
GPIO1 GPIO18 R(中间)
GPIO2 GPIO27 G(S)
GND GND GND

编程实现

#include <wiringPi.h>
#include <stdio.h>

#define makerobo_VibratePin  0 //振动传感器
#define makerobo_Rpin  1  //红色LEd
#define makerobo_Gpin  2  //绿色LEd

int clb_tmp=0;
//双色LED控制
void double_colorLED(int color){
	pinMode(makerobo_Gpin,OUTPUT); //设置为输出模式
	pinMode(makerobo_Rpin,OUTPUT); //设置为输出模式
	if(0==color){  //点亮红色灯
		digitalWrite(makerobo_Rpin,HIGH);
		digitalWrite(makerobo_Gpin,LOW);
	}else if(1==color){ //点亮绿色灯
		digitalWrite(makerobo_Rpin,LOW);
		digitalWrite(makerobo_Gpin,HIGH);
	}else{
		printf("Makerobo Double color LED Error");
	}
}
//打印信息,打印出振动传感器的状态
void makerobo_Print(int x){
	if(x!=clb_tmp){
		if(x==0)
			printf("...Makerobo ON\n");
		if(x==1)
			printf("Makerobo OFF.. \n");
		clb_tmp=x;
	}
}
int main(void){
	int clb_status=0;  //状态值
	int clb_tmp=0;  //比较值
	int clb_value=1;  //当前值
        //初始化连接失败时,将消息打印到屏幕
	if(wiringPiSetup()==-1){
		printf("setup wiringPi failed !");
		return 1;
	}
        //振动传感器Pin设置为输入模式
	pinMode(makerobo_VibratePin,INPUT);
	while(1){
                //获取振动传感器的值
		clb_value=digitalRead(makerobo_VibratePin);
		if(clb_tmp!=clb_value){  //值发生改变
			clb_status++;   //状态加1
			if(clb_status>1){  //状态发生改变判断
				clb_status=0;  //状态复位
			}
			double_colorLED(clb_status); //控制双色LED模块
			makerobo_Print(clb_status);  //打印出状态
			delay(1000);  //延时1s
		}
	}
	return 0;
}

效果

 


蜂鸣器实验

实验介绍

蜂鸣器是属于声音模块,有源蜂鸣器常用于发出单一的提示性报警声音,没有频率变化,内置振荡器,无源蜂鸣器的驱动方式为频率脉冲振动,可以发出各种有频率的信号声音。

黑色蜂鸣器下边凹空隙的那个就是无源蜂鸣器,反之为有源。

实验原理

将两个蜂鸣器的引脚朝上,您可以看到带有绿色电路板的引脚是一个无源蜂鸣器,而另一个带有黑色塑料外壳而不是电路板的蜂鸣器就是有源蜂鸣器。

有源蜂鸣器内部有一个简单的振荡电路,能将恒定的直流电转化成一定频率的脉冲信号,程序控制方便但频率固定,单片机一个高低电平就可以让其发出声音。

无源蜂鸣器和电磁扬声器一样没有内部驱动电路需要接在音频输出电路中才能发声。如果给直流信号是不响的,因为磁路恒定,必须用2K^5K的方波去驱动它。声音频率可控,可以做出音乐的效果。

 

有源蜂鸣器-实验步骤

建立电路

注意:有源蜂鸣器具有内置振荡源,因此只要接线,他就会发出蜂鸣声,但它只能以固定频率发出蜂鸣声。

树莓派 T型转接板 有源蜂鸣器模块
GPIO0 GPIO17 I/O
3.3V 3.3V VCC
GND GND GND

编程实现

#include <wiringPi.h>
#include <stdio.h>

#define makerobo_BuzzerPin  0 //有源蜂鸣器管脚定义

int main(void){
	//初始化连接失败时,将消息打印到屏幕
	if(wiringPiSetup()==-1){
		printf("setup wiringPi failed!");
		return 1;
	}
	//有源蜂鸣器设置为输出模式
	pinMode(makerobo_BuzzerPin,OUTPUT);
	while(1){
		//蜂鸣器为低电平触发,所以使蜂鸣器让其发声
		digitalWrite(makerobo_BuzzerPin,LOW);
		delay(100);
		//高电平,关掉蜂鸣器
		digitalWrite(makerobo_BuzzerPin,HIGH);
		delay(100);
	}
	return 0;
}

效果

因为是声音我就不截图了,实验很成功,最后的声音虽然难听,但是也还蛮有成就感。

后记:电路芯片从桌子上拿起来,并且撕掉蜂鸣器上面的贴纸之后,声音还挺干净的。

 

无源蜂鸣器-实验步骤

建立电路

牛逼了,我们要奏乐了!

树莓派 T型转接板 无源蜂鸣器模块
GPIO0 GPIO17 I/O
3.3V 3.3V VCC
GND GND GND

 

连接图和上图几乎一样,这里不再贴出来了。

 

编程实现

下面是我对照着网上的简谱一点一点弄出来的,运行起来之后,王菲姐姐的《红豆》跃然入耳。

#include <wiringPi.h>
#include <softTone.h>
#include <stdio.h>

#define makerobo_BuzPin 0

//低C音符的频率
#define Tone_CL1 131
#define Tone_CL2 147
#define Tone_CL3 165
#define Tone_CL4 175
#define Tone_CL5 196
#define Tone_CL6 221
#define Tone_CL7 248
//中C音符的频率
#define Tone_CM1 262
#define Tone_CM2 294
#define Tone_CM3 330
#define Tone_CM4 350
#define Tone_CM5 393
#define Tone_CM6 441
#define Tone_CM7 495
//高C音符的频率
#define Tone_CH1 525
#define Tone_CH2 589
#define Tone_CH3 661
#define Tone_CH4 700
#define Tone_CH5 786
#define Tone_CH6 882
#define Tone_CH7 990
//第一首歌音谱
int makerobo_song_1[]={
	Tone_CL5,Tone_CL6,
	Tone_CM2,Tone_CM1,Tone_CM2,Tone_CM2,Tone_CM1,Tone_CM2,
	Tone_CL5,Tone_CL6,
	Tone_CM2,Tone_CM1,Tone_CM2,Tone_CM2,Tone_CM3,Tone_CM2,
	Tone_CL5,Tone_CL6,
	Tone_CM2,Tone_CM1,Tone_CM1,Tone_CM1,Tone_CL6,
	Tone_CM2,Tone_CM3,Tone_CM2,Tone_CM2,Tone_CM1,
	Tone_CM2,Tone_CM1,Tone_CM1,Tone_CM1,Tone_CL6,Tone_CL5,
	
	Tone_CL5,Tone_CL6,
	Tone_CM2,Tone_CM1,Tone_CM2,Tone_CM2,Tone_CM1,Tone_CM2,
	Tone_CL5,Tone_CL6,
	Tone_CM2,Tone_CM1,Tone_CM2,Tone_CM2,Tone_CM3,Tone_CM2,
	Tone_CL5,Tone_CL6,
	Tone_CM2,Tone_CM1,Tone_CM1,Tone_CM1,Tone_CL6,
	Tone_CM2,Tone_CM3,Tone_CM2,Tone_CL2,Tone_CM1,
	Tone_CM6,Tone_CM5,Tone_CM5,Tone_CM5,Tone_CM3,Tone_CM2,
	
	Tone_CM1,Tone_CM2,Tone_CM5,Tone_CM5,
	Tone_CM1,Tone_CM2,Tone_CM3,Tone_CM3,
	Tone_CM3,Tone_CM2,Tone_CM2,Tone_CM1,
	Tone_CM3,Tone_CH1,Tone_CM7,Tone_CM6,Tone_CM3,Tone_CM3,
	Tone_CM7,Tone_CM6,Tone_CM5,Tone_CM6,
	Tone_CM6,Tone_CM5,Tone_CM4,Tone_CM5,
	Tone_CM3,Tone_CM2,Tone_CM1,Tone_CM2,Tone_CM2,Tone_CM1,
	Tone_CL6,Tone_CM3,Tone_CM2,Tone_CM2,
	
	Tone_CM1,Tone_CM2,Tone_CM5,Tone_CM5,
	Tone_CM1,Tone_CM2,Tone_CM3,Tone_CM3,
	Tone_CM3,Tone_CM2,Tone_CM2,Tone_CM1,
	Tone_CM3,Tone_CH1,Tone_CM7,Tone_CH1,Tone_CM6,
	Tone_CM6,Tone_CH3,Tone_CH2,Tone_CM7,Tone_CM5,Tone_CM3,Tone_CM6,
	Tone_CM3,Tone_CM2,Tone_CM1,Tone_CM2,Tone_CM2,
	Tone_CM6,Tone_CM6,Tone_CM5,Tone_CM2,Tone_CM3,Tone_CM2,Tone_CM1
};
//第一首歌的节拍:红豆!
int makerobo_beat_1[]={
	2,2,
	2,1,1,1,2,4,
	2,2,
	2,1,1,1,2,4,
	2,2,
	2,1,1,1,2,
	2,1,1,1,2,
	2,1,1,1,2,4,
	
	2,2,
	2,1,1,1,2,4,
	2,2,
	2,1,1,1,2,4,
	2,2,
	2,1,1,1,2,
	2,1,1,1,2,
	2,1,1,1,2,4,
	
	2,1,1,4,
	2,1,1,4,
	1,1,1,1,
	2,2,2,1,1,4,
	2,2,2,4,
	2,2,2,4,
	1,1,1,1,2,2,
	1,2,1,4,
	
	2,1,1,4,
	2,1,1,4,
	1,1,1,1,
	2,2,2,2,4,
	2,2,2,2,1,2,4,
	1,1,1,1,2,
	2,2,2,2,2,2,4
	
};
int main(void){
	int i;
	//初始化连接失败时,将消息打印
	if(wiringPiSetup()==-1){
		printf("makerobo setup wiringPi failed!");
		return 1;
	}
	//软件模拟Tone库初始化识别,将消息打印
	if(softToneCreate(makerobo_BuzPin)==-1){
		printf("makerobo setup softTone failed!");
		return 1;
	}
	while(1){
		printf("makerobo music is being played...\n");
		for(i=0;i<sizeof(makerobo_song_1)/4;i++){
			//第一首歌音谱
			softToneWrite(makerobo_BuzPin,makerobo_song_1[i]);
			//第一首歌的节拍
			delay(makerobo_beat_1[i]*500);
		}
	}
	return 0;
}

 


 

 

 

 

商业转载 请联系作者获得授权,非商业转载 请标明出处,谢谢

 

发表评论