文章目录

  • <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 入门学习第三课相关推荐

  1. Arduino Uno 学习第三课,常量与变量

    本节目标: 1.常量的定义和种类. 2.变量与常变量.   ①区别与差别   ②格式   ③需定义后才可使用   ④数据类型   ⑤变量名命名规则   ⑥变量初始化   ⑦作用域   ⑧类型转换 常量 ...

  2. Arduino 入门学习8 Arduino MEGA + TCS3200进行颜色识别

    Arduino 入门学习8 Arduino MEGA + TCS3200进行颜色识别 一.颜色识别原理 二.一般颜色识别实现方式 三.TCS3200 简介 四.TCS3200 工作原理 五.TCS32 ...

  3. JavaScript学习 第三课(三)

    JavaScript学习 第三课(三) 学习内容 一.日期和时间对象 二.日期和对象常用的方法 三.修改日期和对象常用的方法 四.将日期和时间转化为字符串 五.日期时间对象的比较 一.日期和时间对象 ...

  4. TIA博途SCL入门学习(三)创建SCL程序及更改FB块接口的视图样式

    TIA博途SCL入门学习(三)创建SCL程序及更改FB块接口的视图样式 TIA博途中创建SCL程序有2种方式,具体可参考以下内容: 在LAD程序段或FBD程序段种可以插入SCL程序段,实现两种语言混合 ...

  5. 菜鸟教程php 文件上传,php入门学习知识点三 PHP上传

    if(is_uploaded_file($_FILES["Imgs"]["tmp_name"])){ $phpupfile=$_FILES["Imgs ...

  6. Python学习第三课-基本数据类型

    Python学习第三课-基本数据类型 一.基本概念 1.1表达式 1.2语句 1.3程序 1.4函数 内置函数 自定义函数 参数 返回值 二.标识符 2.1 关键字 2.2标识符概念 驼峰命名法 下划 ...

  7. 0.0 目录-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授

    文章目录 第五课 第四课 第三课 第二课 第一课 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1.2 数学符号 ...

  8. OpenGL入门学习 课程 (三) 绘制几何图形的一些细节问题

    http://oulehui.blog.163.com/blog/static/79614698201191832753312/ 先回顾一下我们都学习了些什么: 第一课,编写第一个OpenGL程序 第 ...

  9. Python精简入门学习(三)

    Python精简入门学习之流程控制(上) -流程控制 -While循环: 适用于对未知的循环次数 用于判断 -for使用: 适用于已知的循环次数[可迭代对象遍历] -单分支 -双分支 -多分支 [外链 ...

  10. SQL零基础入门学习(三)

    SQL零基础入门学习(二) SQL WHERE 子句 WHERE 子句用于提取那些满足指定条件的记录. SQL WHERE 语法 SELECT column1, column2, ... FROM t ...

最新文章

  1. 软件测试实验--性能测试工具LoadRunner
  2. 9个技巧让你的PyTorch模型训练变得飞快!
  3. Phpcms v9专题分类增加模板设置的方法
  4. 安装虚拟机后,启动出错的解决办法
  5. 爬虫 动态生成useragent的功能 fake-useragent库
  6. CFS调度器的思想的新理解
  7. Django:ORM单表操作和多表操作、锁和事务
  8. Mycat全局序列号失效的诡异事件
  9. ECShop 替换手机版购物首页(2)
  10. 撩妹方式,你值得拥有!!
  11. wifi android透传源代码,【终极版】ESP8266远程控制wifi透传模块带调试app
  12. Nvidia Maxine 精讲(一)AR-SDK安装使用——BodyTrack 【非官方全网首发】
  13. Learning Angular 学习Angular Lynda课程中文字幕
  14. 【威联通Nas】安装docker版本,包含百度云,迅雷x,火狐浏览器,图形化压缩软件,文本编辑器,qb下载器,中文桌面支持
  15. 武汉理工实验3 循环结构(1)——7-3 最大公约数和最小公倍数
  16. 实用技巧| 电脑系统提升20%上网速度,记得学会拿去装X哈
  17. Sample Codes之Query features from a FeatureLayer
  18. css实现一个3D转动的骰子(附GIF效果图)
  19. win2003与win2008启动原理及双启动的原理
  20. VS+Qt无法打开源文件QWidget

热门文章

  1. 区块链钱包之ETH钱包生成
  2. 【tcp】网络连接中的长连接和短连接是什么意思?
  3. python docx删除word段落
  4. 2021春招美团算法笔试题
  5. 《SEM长尾搜索营销策略解密》一一2.1 起因:核心词成本过高
  6. 幕布笔记按字母顺序导出(Python+Opml)
  7. ubuntu-22.04.1磁盘分区和挂载
  8. linux vnc共享时权限设置,用VNC实现远程桌面共享(支持Windows, Linux, ...) - 易水博客...
  9. 2022 年面向开发人员的七个优秀 Java IDE
  10. Word导出PDF图片模糊、失真 解决办法