Arduino 小项目 (欢迎机器)

写在前面
这个项目怎么说呢,就是arduino的小作业,功能自我有一点鸡肋,不过大家混作业的时候还是可以用一用

说正经的
设计一个放在商店门口欢迎客人的小东西,可以显示环境光值,客流量,同时配置了相关的音乐以及灯光展示。

主要功能
超声波测距模块用来检测客流量。当顾客距离门口小于10cm时,蜂鸣器会发出声响提醒客人到来,LCD显示屏上的number数值加1,并且主机会向从机发送数据1,让所有和从机相连的LED灯闪烁(即LED灯样式1);其中,当number数值变为10的倍数时,抽取该位顾客为幸运儿,LCD显示屏上Y的数值加1。
若得知商店内某顾客当天生日,可通过按键1进行播放生日快乐歌,并且主机向从机发送数据2,让所有和从机相连的LED灯按样式2 的代码执行。
一般情况下,店员也可以通过按键2和按键3控制两只老虎和小星星的播放,以及各自对应的LED灯样式。

代码
因为我们要用蜂鸣器播放音乐,所有需要现在主机函数里面加一个pitches.h文件。
添加方式即是打开arduino软件界面,点击右上角的倒三角(▼)图标,点击新建标签,或者直接Ctrl+Shift+N,会出现下面这个界面

在框内输入pitches.h,点击回车,然后将下面这一段代码复制到里面

#define NOTE_B0 31 //B0 ····7#define NOTE_C1 33 //C1 ···1#define NOTE_CS1 35 //C1##define NOTE_D1 37 //D1 ···2#define NOTE_DS1 39 //D1##define NOTE_E1 41 //E1 ···3#define NOTE_F1 44 //F1 ···4#define NOTE_FS1 46 //F1##define NOTE_G1 49 //G1 ···5#define NOTE_GS1 52 //G1##define NOTE_A1 55 //A1 ···6#define NOTE_AS1 58 //A1##define NOTE_B1 62 //B1 ···7#define NOTE_C2 65 //C2 ··1#define NOTE_CS2 69 //C2##define NOTE_D2 73 //D2 ··2#define NOTE_DS2 78 //D2##define NOTE_E2 82 //E2 ··3#define NOTE_F2 87 //F2 ··4#define NOTE_FS2 93 //F2##define NOTE_G2 98 //G2 ··5#define NOTE_GS2 104 //G2##define NOTE_A2 110 //A2 ··6#define NOTE_AS2 117 //A2##define NOTE_B2 123 //B2 ··7#define NOTE_C3 131 //C3 ·1#define NOTE_CS3 139 //C3##define NOTE_D3 147 //D3 ·2#define NOTE_DS3 156 //D3##define NOTE_E3 165 //E3 ·3#define NOTE_F3 175 //F3 ·4#define NOTE_FS3 185 //F3##define NOTE_G3 196 //G3 ·5#define NOTE_GS3 208 //G3##define NOTE_A3 220 //A3 ·6#define NOTE_AS3 233 //A3##define NOTE_B3 247 //B3 ·7#define NOTE_C4 262 //C4 1(中央C大调)#define NOTE_CS4 277 //C4##define NOTE_D4 294 //D4 2#define NOTE_DS4 311 //D4##define NOTE_E4 330 //E4 3#define NOTE_F4 349 //F4 4#define NOTE_FS4 370 //F4##define NOTE_G4 392 //G4 5#define NOTE_GS4 415 //G4##define NOTE_A4 440 //A4 6#define NOTE_AS4 466 //A4##define NOTE_B4 494 //B4 7#define NOTE_C5 523 //C5 1·#define NOTE_CS5 554 //C5##define NOTE_D5 587 //D5 2·#define NOTE_DS5 622 //D5##define NOTE_E5 659 //E5 3·#define NOTE_F5 698 //F5 4·#define NOTE_FS5 740 //F5##define NOTE_G5 784 //G5 5·#define NOTE_GS5 831 //G5##define NOTE_A5 880 //A5 6·#define NOTE_AS5 932 //A5##define NOTE_B5 988 //B5 7·#define NOTE_C6 1047 //C6 1··#define NOTE_CS6 1109 //C6##define NOTE_D6 1175 //D6 2··#define NOTE_DS6 1245 //D6##define NOTE_E6 1319 //E6 3··#define NOTE_F6 1397 //F6 4··#define NOTE_FS6 1480 //F6##define NOTE_G6 1568 //G6 5··#define NOTE_GS6 1661 //G6##define NOTE_A6 1760 //A6 6··#define NOTE_AS6 1865 //A6##define NOTE_B6 1976 //B6 7··#define NOTE_C7 2093 //C7 1···#define NOTE_CS7 2217 //C7##define NOTE_D7 2349 //D7 2···#define NOTE_DS7 2489 //D7##define NOTE_E7 2637 //E7 3···#define NOTE_F7 2794 //F7 4···#define NOTE_FS7 2960 //F7##define NOTE_G7 3136 //G7 5···#define NOTE_GS7 3322 //G7##define NOTE_A7 3520 //A7 6···#define NOTE_AS7 3729 //A7##define NOTE_B7 3951 //B7 7···#define NOTE_C8 4186 //C8 1····#define NOTE_CS8 4435 //C8##define NOTE_D8 4699 //D8 2····#define NOTE_DS8 4978 //D8#

用到的库函数有LiquidCrystal和Wire,软件没有自带的可自行进行下载,下载方式在arduino专栏—三位一体数码管那篇文章里有提到,下面是主机程序的代码,注释很全

#include "pitches.h"
#include <LiquidCrystal.h>
#include <Wire.h>#define Trig 4    //超声波引脚   向Trig输入一个10uS以上的高电平,可触发模块测距
#define Echo 3    //当测距结束时,Echo会输出一个高电平,电平宽度为超声波往返时间之和。#define Buzzer 8  //蜂鸣器引脚
#define KeyPin1 5 //按键1、2、3的引脚
#define KeyPin2 6
#define KeyPin3 7int KEY_NUM1 = 0; //按键变量赋初值
int KEY_NUM2 = 0;
int KEY_NUM3 = 0;IRrecv irrecv(PIN_RECV);
decode_results results;const int rs = 9, en = 10, d4 = 13, d5 = 12, d6 = 11, d7 = 2; //LCD1602的引脚设计
int vol =0;     //光敏传感器OUT引脚接A0
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);  //初始化LCD1602int num = 0;    //用来记录客流量的变量num
int y = 0;      //用来记录幸运人数的变量yint a = 1;
int b = 2;
int c = 3;
int d = 4;
int *s[] = {&a, &b, &c, &d};    //主机向从机传送数据时所用到的指针数组//生日快乐歌对应的旋律和持续时间
int melody1[] = {NOTE_G4,  NOTE_G4, NOTE_A4, NOTE_G4, NOTE_C5, NOTE_B4, 0,NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_D5, NOTE_C5, 0, NOTE_G4,NOTE_G4, NOTE_G5, NOTE_E5, NOTE_C5, NOTE_B4,  NOTE_A4, 0,NOTE_F5, NOTE_F5, NOTE_E5, NOTE_C5, NOTE_D5, NOTE_C5, 0,};
int noteDurations1[] = {8,8,4,4,4,4, 4, 8,8,4,4,4,4, 4, 8,8,4,4,4,4,2, 8, 8,8,4,4,4,2, 4,};//两只老虎对应的旋律和持续时间
int melody2[]={NOTE_C4, NOTE_D4, NOTE_E4,  NOTE_C4,  NOTE_C4,  NOTE_D4, NOTE_E4, NOTE_C4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_C4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_C4, NOTE_D4, NOTE_G3, NOTE_C4, 0, NOTE_D4, NOTE_G3, NOTE_C4, 0,};
int noteDurations2[]={8,8,8,8, 8,8,8,8, 8,8,4, 8,8,4, 8,8,8,8,4,4, 8,8,8,8,4,4, 4,4,4,4, 4,4,4,4,};//小星星对应的旋律和持续时间
int melody3[] = {NOTE_C4,NOTE_C4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4,NOTE_G4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_D4,NOTE_C4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4,NOTE_G4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_D4,NOTE_C4};
int noteDurations3[] = {4, 4, 4, 4, 4, 4, 2, 4,4,4,4,4,4,2,4, 4, 4, 4, 4, 4, 2, 4,4,4,4,4,4,2,4, 4, 4, 4, 4, 4, 2, 4,4,4,4,4,4,2};void BUZZER(){      //有顾客到来时的响声代码模块for(int i=0;i<80;i++){digitalWrite(Buzzer, HIGH);delay(1);digitalWrite(Buzzer, LOW);delay(1);}}void BUZZER1(){//歌曲1:生日快乐for(int thisNote = 0; thisNote < 29; thisNote++) {int noteDuration = 1000/noteDurations1[thisNote];tone(8, melody1[thisNote],noteDuration);int pauseBetweenNotes = noteDuration * 1.30;delay(pauseBetweenNotes);noTone(8);}}void BUZZER2(){//歌曲2:两只老虎for(int thisNote = 0; thisNote < 29; thisNote++){int noteDuration = 1000/noteDurations2[thisNote];//计算旋律持续时间//1秒(1000ms)除以音符类型//比如:四分音符:1000/noteDurations[thisNote],//八分音符:1000/noteDurations[thisNote].tone(8,melody2[thisNote], noteDuration);//播放音乐int pauseBetweenNotes = noteDuration * 1.30;//为了区别不同旋律,设置一个最小的间隔时间,一般设置为旋律持续时间的130%比较合适delay(pauseBetweenNotes);noTone(8);}}//停止当前旋律播放void BUZZER3(){//歌曲3:小星星for(int thisNote = 0; thisNote < 29; thisNote++) {int noteDuration = 1000/noteDurations3[thisNote];tone(8, melody3[thisNote],noteDuration);int pauseBetweenNotes = noteDuration * 1.30;delay(pauseBetweenNotes);noTone(8);}}void ScanKey1(){    //按键1KEY_NUM1 = 0;     //清空变量                 if(digitalRead(KeyPin1) == LOW)  //判断按键1是否按下 {delay(20);        //防抖动               if(digitalRead(KeyPin1) == LOW){ KEY_NUM1 = 1;      //改变KEY_NUM1的值           while(digitalRead(KeyPin1) == LOW);}}   //等待按键松开    if(KEY_NUM1 == 1){ BUZZER1(); DataTransfer2();}} //播放歌曲1,并且向从机发送整型数据2void ScanKey2(){    //按键2KEY_NUM2 = 0;     //清空变量                  if(digitalRead(KeyPin2) == LOW)   //判断按键2是否按下{delay(20);      //防抖动                  if(digitalRead(KeyPin2) == LOW){ KEY_NUM2 = 1;    //改变KEY_NUM2的值           while(digitalRead(KeyPin2) == LOW);}}    //等待按键松开   if(KEY_NUM2 == 1){BUZZER2(); DataTransfer3(); } } //播放歌曲2,并且向从机发送整型数据3void ScanKey3(){    //按键3KEY_NUM3 = 0;     //清空变量                 if(digitalRead(KeyPin3) == LOW)   //判断按键3是否按下{delay(20);    //防抖动                    if(digitalRead(KeyPin3) == LOW){ KEY_NUM3 = 1;   //改变KEY_NUM3的值             while(digitalRead(KeyPin3) == LOW);}}  //等待按键松开    if(KEY_NUM3 == 1){BUZZER3(); DataTransfer4();}}  //播放歌曲3,并且向从机发送整型数据4void RangeFree(){   //超声波测距模块long IntervalTime = 0;    //时间变量digitalWrite(Trig,HIGH);  //向Trig输入一个15uS以上的高电平,触发模块测距delayMicroseconds(15);    digitalWrite(Trig,LOW);IntervalTime = pulseIn(Echo,HIGH);    //Echo输出一个高电平,电平宽度为超声波往返时间之和,将值赋给IntervalTimefloat S = IntervalTime/58.00;         //计算距离(cm)Serial.print("测距:");Serial.print(S);Serial.println("cm");if(S < 10){             //当距离小于10cm时,蜂鸣器执行BUZZER()函数,num值加1,主机向从机发送数据1;如果num值增为10的倍数,y增1BUZZER();num++;if(num%10 == 0) y++;DataTransfer1();}        elseS = 0;IntervalTime = 0;}void LCD(){      //LCD显示模块vol = analogRead(0);   读取A0的值lcd.setCursor(0, 1);   //设置光标定位到第0列,第1行(从0开始)Serial.println(vol,DEC);   //串口打印环境光值lcd.print("AmbientLight=");  //显示屏显示AmbientLight=lcd.print(vol);              //显示屏显示环境光值lcd.setCursor(0, 0);   //设置光标定位到第0列,第0行lcd.print("number=");lcd.print(num);lcd.setCursor(10, 0);    //设置光标定位到第10列,第0行lcd.print("Y=");lcd.print(y);delay(200);} void DataTransfer1(){Wire.beginTransmission(4); // 向地址位8的从机指定要传送到的主机地址Wire.write("c = ");            // 将要发送的数据加入发送队列  //发送字符串Wire.write(*s[0]);             //调用指针发送数据1Wire.endTransmission();     // 结束发送,以使从机正常接收数据delay(500);}void DataTransfer2(){Wire.beginTransmission(4); // 向地址位8的从机指定要传送到的主机地址Wire.write("c = ");            // 将要发送的数据加入发送队列 //发送字符串Wire.write(*s[1]);             //调用指针发送数据2Wire.endTransmission();     // 结束发送,以使从机正常接收数据delay(500);} void DataTransfer3(){Wire.beginTransmission(4); // 向地址位8的从机指定要传送到的主机地址Wire.write("c = ");            // 将要发送的数据加入发送队列 //发送字符串Wire.write(*s[2]);             //调用指针发送数据3Wire.endTransmission();     // 结束发送,以使从机正常接收数据delay(500);} void DataTransfer4(){Wire.beginTransmission(4); // 向地址位8的从机指定要传送到的主机地址Wire.write("c = ");            // 将要发送的数据加入发送队列 //发送字符串Wire.write(*s[3]);             //调用指针发送数据4Wire.endTransmission();     // 结束发送,以使从机正常接收数据delay(500);} void setup(){      pinMode(Echo,INPUT);    //Echo引脚设置为输入模式pinMode(Trig,OUTPUT);Serial.begin(9600);     //串口初始化pinMode(Buzzer,OUTPUT);pinMode(KeyPin1,INPUT_PULLUP);    //按键引脚设置为输入上拉模式pinMode(KeyPin2,INPUT_PULLUP);pinMode(KeyPin3,INPUT_PULLUP);pinMode(13,OUTPUT);pinMode(0,OUTPUT);lcd.begin(16, 2);   //设置LCD要显示的列数、行数,即2行16列Wire.begin();     //作为主机加到IIC总线}void loop(){ RangeFree();ScanKey1();ScanKey2();ScanKey3();LCD();delay(500);}  

至此主机的程序填写完毕

下面看一下从机程序,从机需要做的就是接收从主机发来的数据,然后控制相对应的LE灯程序进行执行

#include<Wire.h>
#define LED1 2      //定义12个LED灯引脚
#define LED2 3
#define LED3 4
#define LED4 5
#define LED5 6
#define LED6 7
#define LED7 8
#define LED8 9
#define LED9 10
#define LED10 11
#define LED11 12
#define LED12 13int  t=0;         //IIC通信用到的标志位void setup(){   for(int i=2;i<14;i++)pinMode(i,OUTPUT);    //初始化端口Wire.begin(4);      //作为从机加入IIC总线,从机地址为4  Wire.onReceive(receiveEvent);      //注册一个IIC事件Serial.begin(9600);      //  初始化串口}void sty1(){    //12个LED灯同时闪烁for(int i=2;i<14;i++)digitalWrite(i,HIGH);delay(200);for(int i=13;i>1;i--)digitalWrite(i,LOW);delay(200);  }void sty2(){    //LED5 6 7 8亮,然后1 2 3 4亮;然后1 2 3 4灭,5 6 7 8灭;最后中心的9、10、11、12亮灭for(int i=2;i<6;i++){digitalWrite(i+4,HIGH);delay(200);}for(int i=2;i<6;i++){digitalWrite(i,HIGH);delay(200);}for(int i=10;i<14;i++){digitalWrite(i,HIGH);delay(200);}for(int i=13;i>9;i--){digitalWrite(i,LOW);delay(200);}for(int i=9;i>5;i--){digitalWrite(i-4,LOW);delay(200);}for(int i=9;i>5;i--){digitalWrite(i,LOW);delay(200);}for(int i=9;i<14;i++){digitalWrite(i,HIGH);delay(200);}for(int i=13;i>8;i--){digitalWrite(i,LOW);delay(200);}    }void sty3(){    //首先LED1 5 9亮;然后1 5 9灭的同时,3、4 7、8 11、12亮;最后3、4 7、8 11、12灭的同时,2 6 10亮digitalWrite(2,HIGH);delay(200); digitalWrite(6,HIGH);delay(200);digitalWrite(10,HIGH);delay(200);digitalWrite(10,LOW);digitalWrite(4,HIGH);digitalWrite(5,HIGH);delay(200); digitalWrite(6,LOW);digitalWrite(8,HIGH);digitalWrite(9,HIGH);delay(200); digitalWrite(2,LOW);digitalWrite(12,HIGH);digitalWrite(13,HIGH);delay(200);   digitalWrite(3,HIGH);delay(200); digitalWrite(7,HIGH);delay(200);digitalWrite(11,HIGH);delay(200);  digitalWrite(11,LOW);delay(200); digitalWrite(7,LOW);delay(200);digitalWrite(3,LOW);delay(200);                                     }void sty4(){  //样式4:从外围向中心亮,再从中心向外围灭for(int i=2;i<6;i++)digitalWrite(i,HIGH);delay(200);for(int i=2;i<6;i++)digitalWrite(i+4,HIGH);delay(200);for(int i=2;i<6;i++)digitalWrite(i+8,HIGH);delay(200); for(int i=13;i>9;i--)digitalWrite(i,LOW);   delay(200); for(int i=13;i>9;i--)digitalWrite(i-4,LOW);   delay(200);for(int i=13;i>9;i--)digitalWrite(i-8,LOW);   delay(200);                  }void loop(){if(t==1) sty1();    //t值对应的LED流水灯样式if(t==2) sty2();  if(t==3) sty3();if(t==4) sty4();     delay(200); }void receiveEvent(int howMany){当主机发送的数据被收到时,将触发receiveEvent()事件while(1<Wire.available()) {    //循环读取收到的数据,最后一个数据单独接收char c=Wire.read();       //以字符形式接收数据Serial.print(c);}         //  串口输出该字符int x= Wire.read();     //以整形形式接收数据Serial.println(x);      //串口输出改整型变量if(x == 1)  t=1;        //读取x的值,更改对应的t值if(x == 2)  t=2;if(x == 3)  t=3;if(x == 4)  t=4;}

所谓的LED灯样式大家可以自行更改,给大家看一下我当时的LED灯分布图

写在最后
说一下我在做这个简单的项目是踩到的坑,其实严格意义上来说也不是坑,只能说是我这个新手会犯的错误
① 红外遥控和蜂鸣器的定时器冲突
②从机接收数据时,不可以在从机的receiveEvent()中写入过多的代码,如果想让其执行某些代码块,可通过标志位的设置将执行代码的过程转移到loop函数。

Arduino 小项目 (欢迎机器)相关推荐

  1. Arduino小项目1---esp8266 WiFi 签到机

    Arduino小项目1---ESP8266 WiFi 签到机 前言 0.使用的材料和软件 1.准备一个HTML网页 A.搭建出适合手机的页面框架 B.在body中加入表单元素 form标签:它的常用属 ...

  2. 处女作,,QT+arduino的物联网小项目

    这是大三所做的项目,距离完成项目的时间已经过去快十个月之久了,至于为什么今天想发出来是因为马上面临找工作了,想把所做的项目再复习复习,,希望能温故而知新吧O(∩_∩)O. 项目名称叫"智慧停 ...

  3. arduino智能闹钟_【Arduino综合项目】小闹钟

    小闹钟项目 在额济纳支教这一年,给孩子们上了很多Arduino开发的课,也带他们完成了几个Arduino综合项目,下面陆续把这些小项目放上来,欢迎围观~~~非科班出身,C语言学的不好,望各路大神批评指 ...

  4. Arduino开发小项目—光控灯

    @Arduino开发小项目-光控灯 本篇文章介绍光敏电阻,通过模拟输入采集环境光强来控制LED灯亮度,做一个无需人为干预的自动控制设备. 传感器是一种检测装置,能感受并采集到被测量的信息,在当下物联网 ...

  5. ESP32S2小项目-FM-网络时钟/电台-Arduino开发环境

    ESP32S2小项目,FM,网络时钟/电台,Arduino开发环境 效果展示 文章目录 ESP32S2小项目,FM,网络时钟/电台,Arduino开发环境 效果展示 开机动画: 网络时钟: FM模块: ...

  6. python开发web运维工具_【实战小项目】python开发自动化运维工具--批量操作主机...

    有很多开源自动化运维工具都很好用如ansible/salt stack等,完全不用重复造轮子.只不过,很多运维同学学习Python之后,苦于没小项目训练,本篇演示用Python写一个批量操作主机的工具 ...

  7. 典型的开发国内小项目没失败的经验分享

    我们分公司不大不小有100来号人,开发人员有几十个,也算在国内是不大不小的那种吧,公司有一个优点就是清一色用.NET开发,这也正好一些优点可以派上用处了,我比较讨厌弄Java就是一个字折腾死人,何必跟 ...

  8. 2017年度盘点:15个最流行的GitHub机器学习项目 By 机器之心2017年12月21日 15:23 在本文中,作者列出了 2017 年 GitHub 平台上最为热门的知识库,囊括了数据科学、机

    2017年度盘点:15个最流行的GitHub机器学习项目 By 机器之心2017年12月21日 15:23 在本文中,作者列出了 2017 年 GitHub 平台上最为热门的知识库,囊括了数据科学.机 ...

  9. 使用重力感应传感器和Arduino的手机控制机器人车

    原文地址:https://circuitdigest.com/microcontroller-projects/g-sensor-controlled-robot-car-arduino 使用G传感器 ...

最新文章

  1. 3D Slicer实现纤维追踪(大脑纤维束成像)+核磁共振影像数据处理
  2. 大神推荐:国内较强的NLP高校实验室有哪些?
  3. Physical Standby Database (11g)-ADG
  4. python性能解决_我们如何发现并解决Python代码中性能下降的问题
  5. java复选框批量删除_vue+element+Java实现批量删除功能
  6. flash flip 效果集
  7. NS3 MyApp Class Reference
  8. c语言strTrimed函数用法介绍,linux type命令用法_转
  9. Java操作Mysql实例
  10. GEO数据挖掘(学习笔记)
  11. 灯的开关状态 :有 N 个灯放在一排,从 1 到 N 依次顺序编号。有 N 个人也从 1 到 N 依次编号。1 号将灯 全部关闭,2 将凡是 2 的倍数的灯 打开;3 号将凡是 3 的倍数的灯作相
  12. docker最新版本发布,附面试答案
  13. 【Vue】基于Element-UI的文件上传与下载
  14. [WDS]Disconnected!
  15. html调用 另存为,【HTML】前台页面调出文件另存为对话框几种方法
  16. 大疆社招测开面经(一年经验,已通过)
  17. 相空间重构 matlab 程序源,matlab求相空间重构延迟时间和嵌入维数
  18. 把对象push进数组
  19. 163邮箱申请注册个人,163邮箱付费与免费版有什么区别?
  20. 解决【VS/VC】中文乱码问题-5种解决办法

热门文章

  1. curl 访问https接口_微信/QQ域名检测-最新腾讯域名检测官方接口
  2. ArduCopter调试
  3. 基于matlab蓝牙跳频系统,基于Matlab软件的蓝牙跳频改进算法
  4. android gps 电子围栏,GPS定位系统平台电子围栏的功能和应用
  5. 并发与多线程之线程安全篇
  6. 【java并发系列】Fork/Join任务(转)
  7. 【网络】【操作系统】详解select、poll、epoll
  8. Rust 1.7.0 语法基础 标识符(ident)和分隔符的约束
  9. unity学习3D坦克大战(一)
  10. python 基础 9.9 查询数据