ARDUINO 入门学习第三课
文章目录
- <1>匹配一个字符串并且输出相应的内容
- <2>实现目的:呼吸灯
- <3>通过光敏电阻与程序实现对LED灯的控制
- <4>光敏呼吸灯
<1>匹配一个字符串并且输出相应的内容
(1)我的第一想法是用serial.read() 函数,但是我们知道,串口通讯函数serial.read() 的功能是从串口缓存区读取一个字符并将之删除,此时我的想法是构建一个 Str类,用+=语法将每次读取的一个字符存入一个变量为str的字符串中,那么代码如下
void loop(){String str="";while(Serial.available()>0){char ch=Serial.read();str +=ch;}Serial.print("input the str:");Serial.println(str);
}
当我们向串口发送"hello"时,可以看到结果如下:
好像已经成功了一半,我们再加一个判断语句
if (str=="hello"){Serial.println("hello,world!");
}
可是当我们把程序烧录到ARDUINO上再向串口发送"hello"时,结果还是一样这是怎么回事呢?
其实"==“判断语句比较字符串时只会比较第一个字符,如果是比较字符当然没问题,可却是不能判断字符串。
(2)这个时候我又想到了用strcmp(str1,str2)函数,它的功能是对两个字符串进行比较,如果相等则返回"0”。好,我们用函数来试一下,把上面的if语句改为:
if (strcmp(str,"hello")==0){Serial.println("hello,world!");
}
但是当我们验证程序时报错了,错误信息如下:
我去网上查了一下,我的理解是这样的:传入strcmp()函数的两个参数一个是string 类型,而另外一个是char 类型,所以报错了。好吧我们换一种方法,让两个参数都变成char类型,可以创建一个char类型的数组,把读取到的字符存在里面,我的代码如下:
char trystring[6];
char serialdata[6];
void setup() {// put your setup code here, to run once:Serial.begin(9600);strcpy(trystring,"hello");
}void loop() {// put your main code here, to run repeatedly:if (Serial.available()>0){for (int i=0;i<=4;i++){char str = Serial.read();serialdata[i]=str;}}if (strcmp(trystring,serialdata)==0){Serial.print("data is: ");Serial.println(serialdata);Serial.println("hello,world!");}delay(500);}
当我们再次向串口发送"hello"时,来看看运行结果:
结果达到了我们的目的,perfect!
<2>实现目的:呼吸灯
(1)呼吸灯?那是啥?呃…就是从亮到暗从再从暗到亮,我们知道数字输出要么输出5V要么输出0V,那我们如果让输出的电压从0~5V一点一点的增加再一点一点的减少不就可以了吗?
(2)要实现这个目的,我们就要用到PWM波模拟值函数analogWrite(pin,value)函数了,他和digiralWrite(pin,value)用法一样,只是value值变成了0~255,映射到了0–5V,代码如下:
int LED=9;
void setup(){pinMode(LED,OUTPUT);
}void loop(){for (int i=0;i<=255;i++){digital.Write(LED,i);delay(5);}for (int i=255;i>=0;i--){digital.Write(LED,i);delay(5);}
}
<3>通过光敏电阻与程序实现对LED灯的控制
话不多说,上代码:
void setup() {// put your setup code here, to run once:pinMode(2,OUTPUT);pinMode(4,OUTPUT);pinMode(A0,INPUT);pinMode(A1,INPUT);Serial.begin(9600);digitalWrite(2,HIGH);delay(500);digitalWrite(4,HIGH);delay(500);
}void loop() {// put your main code here, to run repeatedly:int a =analogRead(A0);int b= analogRead(A1);if (a>b){digitalWrite(2,LOW);digitalWrite(4,HIGH);delay(300);}else if(a<b){digitalWrite(4,LOW);digitalWrite(2,HIGH);delay(300);}delay(500);Serial.print("a: ");Serial.println(a);Serial.print("b: ");Serial.println(b);}
我们在这里用到了analogRead(pin)函数,它的功能是模拟输入,用于模拟输入引脚读取数值,可以将0–5V的电压映射到数值0–1023,也就是0V等于0,5V等于1023,
线的连接如下:
只需要测量两个光敏电阻上的电压大小,再进行比较就可以实现了,当左边电阻减小时,让右边亮起来,当右边电阻减小时,让左边亮起来,当我们挡住任意一边时,另一边永远都不会亮。还可以打开串口看看程序具体实现过程哟!
<4>光敏呼吸灯
这个实验就是结合<2>和<3>稍稍改动就可以了,来看代码:
void setup() {// put your setup code here, to run once:pinMode(3,OUTPUT);pinMode(5,OUTPUT);pinMode(A0,INPUT);pinMode(A1,INPUT);Serial.begin(9600);analogWrite(3,127);analogWrite(5,127);for (int i=127;i<=255;i++){analogWrite(3,i);analogWrite(5,255-i);delay(10);}
}void loop() {// put your main code here, to run repeatedly:int a =analogRead(A0);int b= analogRead(A1);if (a>b){for (int i=0;i<=255;i++){analogWrite(3,255-i);analogWrite(5,i);delay(5);}}else if(a<b){for (int i=0;i<=255;i++){analogWrite(5,255-i);analogWrite(3,i);delay(5);}}delay(100);Serial.print("a: ");Serial.println(a);Serial.print("b: ");Serial.println(b);}
ARDUINO 入门学习第三课相关推荐
- Arduino Uno 学习第三课,常量与变量
本节目标: 1.常量的定义和种类. 2.变量与常变量. ①区别与差别 ②格式 ③需定义后才可使用 ④数据类型 ⑤变量名命名规则 ⑥变量初始化 ⑦作用域 ⑧类型转换 常量 ...
- Arduino 入门学习8 Arduino MEGA + TCS3200进行颜色识别
Arduino 入门学习8 Arduino MEGA + TCS3200进行颜色识别 一.颜色识别原理 二.一般颜色识别实现方式 三.TCS3200 简介 四.TCS3200 工作原理 五.TCS32 ...
- JavaScript学习 第三课(三)
JavaScript学习 第三课(三) 学习内容 一.日期和时间对象 二.日期和对象常用的方法 三.修改日期和对象常用的方法 四.将日期和时间转化为字符串 五.日期时间对象的比较 一.日期和时间对象 ...
- TIA博途SCL入门学习(三)创建SCL程序及更改FB块接口的视图样式
TIA博途SCL入门学习(三)创建SCL程序及更改FB块接口的视图样式 TIA博途中创建SCL程序有2种方式,具体可参考以下内容: 在LAD程序段或FBD程序段种可以插入SCL程序段,实现两种语言混合 ...
- 菜鸟教程php 文件上传,php入门学习知识点三 PHP上传
if(is_uploaded_file($_FILES["Imgs"]["tmp_name"])){ $phpupfile=$_FILES["Imgs ...
- Python学习第三课-基本数据类型
Python学习第三课-基本数据类型 一.基本概念 1.1表达式 1.2语句 1.3程序 1.4函数 内置函数 自定义函数 参数 返回值 二.标识符 2.1 关键字 2.2标识符概念 驼峰命名法 下划 ...
- 0.0 目录-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
文章目录 第五课 第四课 第三课 第二课 第一课 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1.2 数学符号 ...
- OpenGL入门学习 课程 (三) 绘制几何图形的一些细节问题
http://oulehui.blog.163.com/blog/static/79614698201191832753312/ 先回顾一下我们都学习了些什么: 第一课,编写第一个OpenGL程序 第 ...
- Python精简入门学习(三)
Python精简入门学习之流程控制(上) -流程控制 -While循环: 适用于对未知的循环次数 用于判断 -for使用: 适用于已知的循环次数[可迭代对象遍历] -单分支 -双分支 -多分支 [外链 ...
- SQL零基础入门学习(三)
SQL零基础入门学习(二) SQL WHERE 子句 WHERE 子句用于提取那些满足指定条件的记录. SQL WHERE 语法 SELECT column1, column2, ... FROM t ...
最新文章
- 软件测试实验--性能测试工具LoadRunner
- 9个技巧让你的PyTorch模型训练变得飞快!
- Phpcms v9专题分类增加模板设置的方法
- 安装虚拟机后,启动出错的解决办法
- 爬虫 动态生成useragent的功能 fake-useragent库
- CFS调度器的思想的新理解
- Django:ORM单表操作和多表操作、锁和事务
- Mycat全局序列号失效的诡异事件
- ECShop 替换手机版购物首页(2)
- 撩妹方式,你值得拥有!!
- wifi android透传源代码,【终极版】ESP8266远程控制wifi透传模块带调试app
- Nvidia Maxine 精讲(一)AR-SDK安装使用——BodyTrack 【非官方全网首发】
- Learning Angular 学习Angular Lynda课程中文字幕
- 【威联通Nas】安装docker版本,包含百度云,迅雷x,火狐浏览器,图形化压缩软件,文本编辑器,qb下载器,中文桌面支持
- 武汉理工实验3 循环结构(1)——7-3 最大公约数和最小公倍数
- 实用技巧| 电脑系统提升20%上网速度,记得学会拿去装X哈
- Sample Codes之Query features from a FeatureLayer
- css实现一个3D转动的骰子(附GIF效果图)
- win2003与win2008启动原理及双启动的原理
- VS+Qt无法打开源文件QWidget
热门文章
- 区块链钱包之ETH钱包生成
- 【tcp】网络连接中的长连接和短连接是什么意思?
- python docx删除word段落
- 2021春招美团算法笔试题
- 《SEM长尾搜索营销策略解密》一一2.1 起因:核心词成本过高
- 幕布笔记按字母顺序导出(Python+Opml)
- ubuntu-22.04.1磁盘分区和挂载
- linux vnc共享时权限设置,用VNC实现远程桌面共享(支持Windows, Linux, ...) - 易水博客...
- 2022 年面向开发人员的七个优秀 Java IDE
- Word导出PDF图片模糊、失真 解决办法