创客电路箱ARDUNIO程序分析

本文详细解析了一段涉及多种传感器和模块的电路箱控制代码,包括温湿度传感器、超声波模块、舵机等,阐述了代码的工作原理及各部分功能。

在这里插入图片描述
一共1013行的代码分析。由于各种原因这里不会直接上整体代码,仅仅进行分析与流程分析。

本代码包括该电路箱的各个模块,包括舵机、风扇、摇杆、温湿度传感器、滑动变阻器、语音模块、指纹模块、超声波模块、OLED屏、按键模块、蓝牙模块、还有视觉处理模块,串口显示屏。
如下图所示:
在这里插入图片描述
接下来是代码分析:

  1. 首先引入库文件,

在这里插入图片描述
2.预定义部分
在这里插入图片描述
其中
DHT dht39(39,11)是定义引脚,39是引脚号,11是温湿度传感器的型号。DHT11型号的温湿度传感器
3.接下来定义变量
在这里插入图片描述
不全部进行显示,以此为例。
4.接下来进行真正的代码块部分

  • 超声波部分

在这里插入图片描述
首先进行定义超声波距离的函数,超声波工作原理
超声波模块的需要一个高低电平脉冲进行触发。
在这里插入图片描述

float checkdistance_12_11()                          //净距离超声波函数
    {
        digitalWrite(12, LOW);                       //先给一个低电平
        delayMicroseconds(2);                        //持续时间2毫秒 
        digitalWrite(12, HIGH);                      //再给一个高电平
        delayMicroseconds(10);                       //持续时间10毫秒 
        digitalWrite(12, LOW);                       //再产生一个低电平
//前四句是产生10us的TTL信号
        float distance = pulseIn(11, HIGH) /58;     
 //pulseIn()单位为微秒bai,声速340m/s,单片机的晶du振频率约为14MHZ, 所以距zhi离cm=340*100/(1000000-14000)*pulseIn()/2,及化简dao为pulseIn()/[(1000000-14000)*2/(340*100)]等于pulseIn()/58.0.
                                                               
                                                    
        delay(10);
          return distance;
     }

TTL电平
TTL电平信号规定,+5V等价于逻辑“1”,0V等价于逻辑“0”(采用二进制来表示数据时)。这样的数据通信及电平规定方式,被称做TTL(晶体管-晶体管逻辑电平)信号系统。

  • · void setup()函数部分

初始化变量,管脚模式,调用库函数等

其中我认为关键的我不太容易直接看出来的摘录分析,比较简单的启动温湿度传感器的等省略。
在这里插入图片描述
其中定义这几个变量储存字符串,具体功能随后分析。

  1. void loop()

连续执行函数内的语句
在这里插入图片描述
目的:所有收到的数据全部存放在data中,先将所有传感器数据收集起来,组成一个字符串,到Python再拆开。
在这里插入图片描述
当串口是闲置,item的值为读取串口的字符串,当读到字符串是=时,item1是item的第i个字符,item2接收了item的所有字符
String.charAt() 方法返回指定索引处的char值。索引范围是从0到length() - 1。对于du数组索zhi引,序列的第一个char值是在索引为dao0,索引1,依此类推。
这一串代码的目的主要是进行RGB灯亮度调节,等号后面跟的数字就是亮度。
在这里插入图片描述

void U8G2::drawXBM(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap)
void U8G2::drawXBMP(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap)

源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义建 函数名称随意-地区随意-运行环境Python3....
循迹小车环岛Ardunio程序如下: ```C++ // 定义左右电机引脚 int leftMotor1 = 2; int leftMotor2 = 3; int rightMotor1 = 4; int rightMotor2 = 5; // 定义循迹模块引脚 int trackSensorPin1 = 6; int trackSensorPin2 = 7; int trackSensorPin3 = 8; int trackSensorPin4 = 9; int trackSensorPin5 = 10; // 定义循迹模块的值 int trackSensorValue1 = 0; int trackSensorValue2 = 0; int trackSensorValue3 = 0; int trackSensorValue4 = 0; int trackSensorValue5 = 0; void setup() { // 设置左右电机引脚为输出模式 pinMode(leftMotor1, OUTPUT); pinMode(leftMotor2, OUTPUT); pinMode(rightMotor1, OUTPUT); pinMode(rightMotor2, OUTPUT); // 设置循迹模块引脚为输入模式 pinMode(trackSensorPin1, INPUT); pinMode(trackSensorPin2, INPUT); pinMode(trackSensorPin3, INPUT); pinMode(trackSensorPin4, INPUT); pinMode(trackSensorPin5, INPUT); } void loop() { // 读取循迹模块的值 trackSensorValue1 = digitalRead(trackSensorPin1); trackSensorValue2 = digitalRead(trackSensorPin2); trackSensorValue3 = digitalRead(trackSensorPin3); trackSensorValue4 = digitalRead(trackSensorPin4); trackSensorValue5 = digitalRead(trackSensorPin5); // 如果循迹模块的值为白色,则表示小车离开了黑线,需要掉头 if (trackSensorValue1 == HIGH && trackSensorValue2 == HIGH && trackSensorValue3 == HIGH && trackSensorValue4 == HIGH && trackSensorValue5 == HIGH) { // 控制小车停止 digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, LOW); // 控制小车掉头 digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, HIGH); // 延时一段时间,等待小车掉头完成 delay(500); // 控制小车向前行驶 digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); // 延时一段时间,等待小车重新进入黑线 delay(500); } // 如果循迹模块的值为黑色,则表示小车在黑线上 if (trackSensorValue1 == LOW && trackSensorValue2 == LOW && trackSensorValue3 == LOW && trackSensorValue4 == LOW && trackSensorValue5 == LOW) { // 控制小车向前行驶 digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); } // 如果循迹模块的值为其他颜色,则表示小车在黑线旁边 if (trackSensorValue1 == HIGH && trackSensorValue2 == LOW && trackSensorValue3 == LOW && trackSensorValue4 == LOW && trackSensorValue5 == LOW) { // 控制小车向左转 digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, HIGH); } if (trackSensorValue1 == LOW && trackSensorValue2 == LOW && trackSensorValue3 == HIGH && trackSensorValue4 == LOW && trackSensorValue5 == LOW) { // 控制小车向左转 digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, HIGH); } if (trackSensorValue1 == LOW && trackSensorValue2 == LOW && trackSensorValue3 == LOW && trackSensorValue4 == LOW && trackSensorValue5 == HIGH) { // 控制小车向右转 digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, HIGH); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); } if (trackSensorValue1 == LOW && trackSensorValue2 == LOW && trackSensorValue3 == LOW && trackSensorValue4 == HIGH && trackSensorValue5 == LOW) { // 控制小车向右转 digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, HIGH); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); } } ``` 该程序主要实现了循迹小车在环岛行驶的功能。在程序中,通过读取循迹模块的值,判断小车当前所处的位置,从而控制左右电机的转动来实现小车的行驶。当循迹模块的值为白色时,表示小车离开了黑线,此时需要掉头,掉头完成后再重新进入黑线。当循迹模块的值为黑色时,表示小车在黑线上,此时只需要让小车向前行驶即可。当循迹模块的值为其他颜色时,表示小车在黑线旁边,此时需要让小车向左或向右转弯,从而重新进入黑线。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值