实验四:激光传感器实验,摩尔斯密码

article/2025/8/20 4:50:19

注意:不要直视激光头,它会对你的眼睛造成很大的伤害。

注意:不要直视激光头,它会对你的眼睛造成很大的伤害。

注意:不要直视激光头,它会对你的眼睛造成很大的伤害。

OK,今天来讲一个稍微复杂点的实验

关键是摩尔斯密码比较复杂

复杂在我们不太用,或者说我们一般来说记不住,除非你是特工,一般人不会花时间去记

我们用代码实现,就是为了做实验,实现功能就可以了

代码的逻辑可能稍微花点时间和心思

01 摩尔斯密码


字母:

'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','N','U','V','W','X','Y','Z'

用摩尔斯密码表示
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.","...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.." 

数字
  '0','1','2','3','4','5','6','7','8','9'

用摩尔斯密码表示

"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..","----."

其中如果用激光传感器表示,-就是长亮,·就是短亮

比如A为.-那就是

短亮   长亮

比如9为----.

就是

长亮 长亮 长亮 长亮 短亮

比如我的名字首字母

WYF

就是

".--"    "-.--"  "..-."

就是

短亮 长亮 长亮   停顿   长亮 短亮 长亮  长亮  停顿  短亮 短亮 长亮 短亮

我们收到这样子的光照,就知道是WYF了

这只是举个例子,一般我们生活中不会用到,就是做实验练习用的

02 硬件


● Arduino Uno主板* 1

● USB数据线* 1

● 激光发射器模块* 1

● 面包板* 1

● 9V方型电池* 1

● 跳线若干

激光传感器

连线图

 03 代码


//#include "retrieval.h"
/*串口输入A-Z,0-9,激光灯发出相应莫尔斯码*/#define SIZE 26
const int laserPin=7;
static int dotDelay=200;
static int lineDelay=1000;
int numStore=27;
char LETTERS[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','N','U','V','W','X','Y','Z'
};
char NUMBERS[10]={'0','1','2','3','4','5','6','7','8','9'
};
String letters[SIZE]={// A to I
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",
// J to R 
".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",
// S to Z
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.." 
};String numbers[10]={"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..","----."
};void setup() {// put your setup code here, to run once:
pinMode(laserPin,OUTPUT);
Serial.begin(9600);
}void loop() {// put your main code here, to run repeatedly:
char ch=0;
if(Serial.available()>0)
{ch=Serial.read();
}
Serial.println(ch);
laserLetter(ch);
laserNumber(ch);
}void laserLetter(char ch)
{digitalWrite(laserPin,LOW);for(int i=0;i<26;i++){if(ch==LETTERS[i]){numStore=i;laserLetterBlink(numStore);}}}void laserNumber(char ch)
{digitalWrite(laserPin,LOW);for(int i=0;i<10;i++){if(ch==NUMBERS[i]){numStore=i;laserNumberBlink(numStore);}}
}void laserLetterBlink(int num)
{String str=letters[numStore];Serial.println(str);delay(1000);Serial.println(numStore);delay(1000);int j=0;j=str.length();Serial.println(j);delay(1000);char ch1[j]={0};for(int i=0;i<j;i++){ch1[i]=str[i];if(ch1[i]=='.'){digitalWrite(laserPin,HIGH);delay(dotDelay);digitalWrite(laserPin,LOW);delay(1000);}if(ch1[i]=='-'){digitalWrite(laserPin,HIGH);delay(lineDelay);digitalWrite(laserPin,LOW);delay(1000);}}digitalWrite(laserPin,LOW);delay(6000);
}void laserNumberBlink(int num)
{String str=numbers[numStore];Serial.println(str);delay(1000);Serial.println(numStore);delay(1000);int j=0;j=str.length();Serial.println(j);delay(1000);char ch1[j]={0};for(int i=0;i<j;i++){ch1[i]=str[i];if(ch1[i]=='.'){digitalWrite(laserPin,HIGH);delay(dotDelay);digitalWrite(laserPin,LOW);delay(1000);}if(ch1[i]=='-'){digitalWrite(laserPin,HIGH);delay(lineDelay);digitalWrite(laserPin,LOW);delay(1000);}}digitalWrite(laserPin,LOW);delay(6000);
}

 代码讲起来太复杂,我就不讲了,大家自己慢慢学习

我花了一年的时间把arduino用熟练,大家就辛苦下,自己读代码哈

03 运行结果


我们运行的结果就是

我们通过串口输入的字母或者数字,激光传感器发射出相应代码的光线

我们用视频来体现

输入WYF5201314

激光传感器分别输出

".--"    "-.--"      "..-."     "....."   "..---"   "-----"    ".----"   "...--"   ".----"    "....-"

W          Y        F          5           2        0            1        3            1        4

视频制作是我的短板,在学习,大家多看几次就看懂了哈

我会继续学习视频剪辑的

辛苦大家了

串口显示

W                     字母

".--"                  摩尔斯密码

22                    字母表中的位置

3                      3个字符.--

激光传感器实现摩尔斯密码

视频制作确实不够好

大家多看几次,请大家多担待


http://chatgpt.dhexx.cn/article/ZwnOJhuy.shtml

相关文章

摩斯密码加解密

摩斯密码又叫莫尔斯电码&#xff0c;摩斯电码 著名的SOS救难信号用莫尔斯电码表示为&#xff1a;...---...滴滴滴嗒嗒嗒滴滴滴 一、间隔时间 滴&#xff0c;1t&#xff0c;用.表示嗒&#xff0c;3t&#xff0c;用-表示滴嗒间&#xff0c;1t&#xff0c;不用表示字符间&#xff…

A : 摩斯密码

题目描述&#xff1a; 摩尔斯电码&#xff08;又译为摩斯密码&#xff0c;Morse code&#xff09;是一种时通时断的信号代码&#xff0c;通过不同的排列顺序来表达不同的英文字母、数字和标点符号。为了简单问题&#xff0c;去除所有的标点符号。 现在给你一段摩斯密码&#xf…

摩斯密码

摩斯密码&#xff0c;很多人肯定都听说过它的大名。但是多数人不了解它&#xff0c;认为这是个神一样的领域&#xff0c;难以企及。 但是我要告诉你&#xff0c;你如果想用这个密码日常聊天有些难&#xff0c;但是学两手来秀两手还是可以的。 比如说电影中经常出现的一个摩斯…

摩斯电码/密码入门简介

摩尔斯&#xff1a;是我们生活中非常常见的一种密码形式&#xff0c;例如电报就用的是这个哦 什么是摩尔斯电码&#xff1a; 摩斯电码是一种用于交流的系统&#xff0c;由塞缪尔•莫尔斯发明&#xff0c;它依靠一系列的点和划来传递编码信息。虽然&#xff0c;最初它被设计为…

摩尔斯电码(摩斯电码)

摩尔斯电码 简介电码对照表应用互译工具特殊符号常见缩写交流示例中文与摩斯电码 简介 摩尔斯电码&#xff08;又译为摩斯密码&#xff0c;Morse code&#xff09;是一种时通时断的信号代码&#xff0c;通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它发明于1837…

没错,我是高端吃瓜玩家(搞懂摩斯密码)

前言 大家好&#xff0c;我是bigsai大赛哥&#xff0c;好久不见&#xff0c;甚是想念。 行了&#xff0c;咱们步入正轨&#xff0c;已经进入2022&#xff0c;在2021这一年&#xff0c;很多人的快乐消遣是在吃瓜快乐中度过的&#xff0c;有的作为主动吃瓜群众第一手掌握消息&…

摩斯密码是什么?

摩斯密码是什么&#xff1f; 摩斯密码&#xff08;摩尔斯电码&#xff09;是一种时通时断的信号代码&#xff0c;通过不同的排列顺序来表达不同的英文字母、数字和标点符号&#xff1b;它的代码包括五种&#xff1a; 点、划、点和划之间的停顿、每个字符之间短的停顿、每个词之…

为什么很多人吐槽谭浩强的C语言程序设计?

这个观点在网络上已经论战了很长时间&#xff0c;出现这种情况还是历史遗留问题&#xff0c;老谭出的C语言教材几乎是国内的第一版&#xff0c;由于中英翻译问题或者对编程文化理解的差异性导致出来的书多多少少存在一些纰漏。不能只是记住其缺点&#xff0c;老谭书最主要在那个…

谭浩强老师C语言第五版第六章(上)

第3、7题难在了数学思路上&#xff08;不会或理解不了私信&#xff09; 仅代表个人看法 如有错误请指正 题目1&#xff1a;用筛选法求100 之内的素数。 代码如下&#xff1a; #include <stdio.h> #include <math.h> int main() { int i, j, n, a[101]; …

第1章 引论 - 数据结构与算法分析 c语言描述

前言&#xff1a;此类型的文章皆为本人在阅读此书后给出的关于此书的理解&#xff0c;以及知识的梳理复习。若对文章有不解之处&#xff0c;或者文章有错欢迎评论区留言。 1.1 本书讨论的内容 有一组N个数&#xff0c;要找出其中第k个最大者&#xff0c;我们称之为选择问题(se…

谭浩强老师C语言第五版第五章(上)

本文涉及字符宽度&#xff0c;暂不做讲解&#xff0c;不懂留言 仅代表个人看法 如有侵权请说明 题目1&#xff1a;请画出例 5.6 中给出的3个程序段的流程图。 程序如下1、 #include <stdio.h> int main() { int i, j, n 0; for (i 1; i < 4; i) …

谭浩强C语言程序设计(1-3章代码学习)

谭浩强C语言程序设计 参考书 C语言学习笔记记录&#xff0c;学习为主&#xff0c;新手小白入门 我所用的C语言在线编译器&#xff1a;lightly在线编译工具 可新建工程 谭浩强C语言程序设计书籍所包含的代码示例加注释说明如下&#xff1a; /*笔记记录者&#xff1a;xy;学习教…

谭浩强C语言第九章知识总结

第九章 shyu 结构体&#xff1a;用户自定义的数据类型 如&#xff1a;在描述一个学生的相关信息时&#xff0c;需要整型变量来记录学号&#xff0c;字符数组来记录名字&#xff0c;等等&#xff0c;物品们可以通过定义结构体改变变量的数据类型&#xff0c;把这些信息整成一…

谭浩强C语言第七章知识总结

第七章 定义函数 定义没有参数的函数&#xff0c; 类型名 函数名&#xff08;&#xff09; 类型名 函数名&#xff08;void&#xff09; { { 函数体 或 函数体 } …

C语言 谭浩强 题目 -第六章

文章目录 笔记字符数组字符数组输出字符串处理函数输入字符串的函数 gets&#xff08;&#xff09;字符串连接函数--strcat字符串赋值函数--strcpy字符串比较函数---strcmp测字符串长度的函数--strlen转换为大小写的函数 EG 1EG 2EG 3 排序 冒泡排序 不用函数EG 4EG 5EG 6EG 7E…

C语言 谭浩强 题目 -第八章

文章目录 笔记通过指针引用数组用数组名作函数参数以变量名和数组名作为函数参数的比较 例题【例8.2】【例8.6】【例8.3】【例 8.4】【例 8.5】【例 8.6】【例8.7】【例8.8】【例8.9】【例 8.10】选择法起泡法 【例 8.11】【例 8.12】【例 8.13】【例8.30】 用指向数组的指针作…

C语言 谭浩强 题目 -第七章

文章目录 笔记函数参数函数调用返回值函数的嵌套函数的递归数组作为函数参数多维数组名作函数参数局部变量和全局变量全局变量 变量的存储方式和生存期自动变量(auto变量)static静态局部变量寄存器变量(register变量) 全局变量在一个文件内扩展外部变量的作用域将外部变量的作用…

【C语言】谭浩强

1.分支选择结构 #include<stdio.h> int main(){ char grade; scanf(“%c”,&grade); printf(“Your score:”); switch(grade) { case’A’:printf(“85~100\n”);break; case’B’:printf(“70~84\n”);break; case’C’:printf(“60~69\n”);break; case’D’:prin…

C语言 谭浩强第五版 课后习题解答

第一章 1.什么是程序?什么是程序设计? 程序&#xff1a;就是一组能识别和执行的指令&#xff0c;每一条指令使计算机执行特定的操作 程序设计&#xff1a;是指从确定任务到得到结果、写出文档的全过程 2.为什么需要计算机语言?高级语言有哪些特点? 为什么需要计算机语言&am…

谭浩强c语言课后习题(更新中)

1.第三章 纯代公式题 #include<stdio.h>int main() {float p1.07; //第一年倍数for (int i 1; i < 10; i) //只用循环了9次&#xff0c;因为是从第一年开始{p p * 1.07;}printf("%f%%%",p*100); }第2题也是代进公式即可 其实也是代给出的公式&#xff0…