本文为作者学习笔记
欢迎交流讨论,喜欢的话点个赞吧

欢迎去看我的主页: NicholasYe’s Hompage.


L298N电机驱动

const int negR=4;//右负极
const int posR=5;//右正极
const int negL=6;//左负极
const int posL=7;//左正极
const int pwmR=9;//右轮pwm
const int pwmL=10;//左轮pwm//设置初值
void setup()
{pinMode(posR,OUTPUT);//引脚4pinMode(negR,OUTPUT);//引脚5pinMode(posL,OUTPUT);//引脚6pinMode(negL,OUTPUT);//引脚7pinMode(pwmR,OUTPUT);//引脚9pinMode(negL,OUTPUT);//引脚10
}//主循环
void loop()
{forward(200,200);delay(2000);pause(0,0);delay(2000);back(200,200);delay(2000);pause(0,0);delay(2000);
}//前进函数
void forward(byte RmotorSpeed,byte LmotorSpeed)
{analogWrite(pwmR,RmotorSpeed);//右轮转速analogWrite(pwmL,LmotorSpeed);//左轮转速digitalWrite(posR,HIGH);//右轮正转digitalWrite(negR,LOW);digitalWrite(posL,LOW);//左轮反转digitalWrite(negL,HIGH);
}//后退函数
void back(byte RmotorSpeed,byte LmotorSpeed)
{analogWrite(pwmR,RmotorSpeed);//右轮转速analogWrite(pwmL,LmotorSpeed);//左轮转速digitalWrite(posR,LOW);//右轮反转digitalWrite(negR,HIGH);digitalWrite(posL,HIGH);//左轮正转digitalWrite(negL,LOW);
}//停止函数
void pause(byte RmotorSpeed,byte LmotorSpeed)
{analogWrite(pwmR,RmotorSpeed);//右轮转速analogWrite(pwmL,LmotorSpeed);//左轮转速digitalWrite(posR,LOW);//右轮停止digitalWrite(negR,LOW);digitalWrite(posL,LOW);//左轮停止digitalWrite(negL,LOW);
}//右转
void right(byte RmotorSpeed,byte LmotorSpeed)
{analogWrite(pwmR,RmotorSpeed);//右轮转速analogWrite(pwmL,LmotorSpeed);//左轮转速digitalWrite(posR,LOW);//右轮停止digitalWrite(negR,LOW);digitalWrite(posL,LOW);//左轮反转digitalWrite(negL,HIGH);
}//左转
void left(byte RmotorSpeed,byte LmotorSpeed)
{analogWrite(pwmR,RmotorSpeed);//右轮转速analogWrite(pwmL,LmotorSpeed);//左轮转速digitalWrite(posR,HIGH);//右轮正转digitalWrite(negR,LOW);digitalWrite(posL,LOW);//左轮停止digitalWrite(negL,LOW);
}

超声波传感器

const int trig =4;//引脚
const int echo =5;float distance;//返回数值void setup()
{Serial.begin(9600);//串口调试pinMode(trig,OUTPUT);//针脚输出pinMode(echo,INPUT);//针脚输入}void loop()
{//向引脚发送10us的高电平digitalWrite(trig,LOW);delayMicroseconds(2);digitalWrite(trig,HIGH);delayMicroseconds(10);digitalWrite(trig,LOW);//测算距离distance = (pulseIn(echo,HIGH)/58.00);//串口打印Serial.print(distance);Serial.print("cm");Serial.println();//延迟1000msdelay(1000);
}

舵机

#include <Servo.h>Servo myservo;  // 定义Servo对象来控制
int pos = 0;    // 角度存储变量void setup()
{myservo.attach(9);  // 控制线连接数字9
}void loop()
{for (pos = 0; pos <= 180; pos++) { // 0°到180°// in steps of 1 degreemyservo.write(pos);              // 舵机角度写入delay(5);                       // 等待转动到指定角度}for (pos = 180; pos >= 0; pos--) { // 从180°到0°myservo.write(pos);              // 舵机角度写入delay(5);                       // 等待转动到指定角度}
}

舵机红色线接开发板5V,棕色线接开发板GND,橙色信号线接开发板数字引脚

#include <Servo.h>Servo myservo;  // 定义Servo对象来控制
int pos = 180;    // 角度存储变量void setup()
{myservo.attach(7);  // 控制线连接数字7myservo.write(90);delay(2000);
}void loop()
{pos=pos-180;myservo.write(pos);delay(3000);pos=pos+360;myservo.write(pos);delay(3000);pos=pos-180;myservo.write(pos);delay(3000);
}

#include <Servo.h>Servo myservo;  // 定义Servo对象来控制
int pos = 180;    // 角度存储变量void setup()
{myservo.attach(9);  // 控制线连接数字7myservo.write(0);delay(2000);
}void loop()
{myservo.write(0);delay(1500);myservo.write(200);delay(1500);myservo.write(0);delay(1500);myservo.write(200);delay(1500);myservo.write(0);delay(1500);
}


光电传感器

int light1=3;//光电传感器
int v_light1;//光电传感器返回数值void setup()
{pinMode(LED_BUILTIN, OUTPUT);//LED闪烁 Serial.begin(9600);
}//主循环
void loop()
{light_test();
}//传感器检测
void light_test()
{//读取光电传感器数值int value=0;v_light1=digitalRead(light1);value=v_light1;Serial.print(value);Serial.println();//条件判断if(value==0){digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)}else{digitalWrite(LED_BUILTIN, LOW);   // turn the LED on (HIGH is the voltage level)}
}

棕色正极蓝色负极黑色信号输出

灯亮(距离近)时digital.read()为0(LOW)

灯灭(距离远)时digital.read()为1(HIGH)

HIGH和LOW是系统常量,定义分别是1(高)0(低),还有,=是赋值,==是判断


灰度传感器


const int gray1 = A1;//灰度传感器GR1
int graynum1;//灰度传感器返回数值
int* level = NULL;//灰度传感器数值的指针// the setup function runs once when you press reset or power the board
void setup()
{Serial.begin(9600);//开启9600端口Serial.println("Senesor:");pinMode(gray1, INPUT);//灰度传感器GR4}// the loop function runs over and over again until power down or reset
void loop()
{Gray();Serial.print(*level);Serial.println();
}//灰度传感器Gray(指针写法)
int Gray()
{graynum4 = analogRead(4);level = &graynum4;
}

灰度传感器连续快速返回数值,因此,在不是很稳定的情况下,建议配合快速排序函数取中值一同使用

const int gray1 = A0;//灰度传感器GR1(车左前)
int graynum1;//灰度传感器返回数值
int* level1 = NULL;//存储灰度传感器数值graynum的指针void setup()
{Serial.begin(9600);pinMode(gray1, INPUT);//灰度传感器GR1pinMode(LED_BUILTIN, OUTPUT);//LED闪烁
}void loop()
{int gray_level1[21] = {0};for (int m = 0; m < 21; m++){Gray1();gray_level1[m] = *level1;}int median1 = quickSort(gray_level1, 0, 20);Serial.print(median1);Serial.println();}//取中值函数
int quickSortPartition(int s[], int l, int r) {//Swap(s[l], s[(l + r) / 2]); //若以中间数为基准,则先将中间的这个数和第一个数交换即可int i = l, j = r, x = s[l]; //将最左元素记录到x中while (i < j){// 从右向左找第一个<x的数// 无需考虑下标越界while (i < j && s[j] >= x)j--;if (i < j)s[i++] = s[j]; //直接替换掉最左元素(已在x中存有备份)// 从左向右找第一个>x的数while (i < j && s[i] <= x)i++;if (i < j)//替换掉最右元素(已在最左元素中有备份)//最左元素一定被覆盖过,若没有,则表明右侧所有元素都>x,那么算法将终止s[j--] = s[i];}s[i] = x;  //i的位置放了x,所以其左侧都小于x,右侧y都大于xreturn i;
}int quickSort(int s[], int l, int r)
{//数组左界<右界才有意义,否则说明都已排好,直接返回即可if (l >= r) {return s[10];}// 划分,返回基准点位置int i = quickSortPartition(s, l, r);// 递归处理左右两部分,i处为分界点,不用管i了quickSort(s, l, i - 1);quickSort(s, i + 1, r);return s[10];
}//灰度传感器Gray1
int Gray1()
{graynum1 = analogRead(0);level1 = &graynum1;return graynum1;
}

红外ToF传感器


/*
This example takes range measurements with the VL53L1X and displays additional
details (status and signal/ambient rates) for each measurement, which can help
you determine whether the sensor is operating normally and the reported range is
valid. The range is in units of mm, and the rates are in units of MCPS (mega
counts per second).
*/#include <Wire.h>
#include <VL53L1X.h>VL53L1X sensor;void setup()
{Serial.begin(115200);Wire.begin();Wire.setClock(400000); // use 400 kHz I2Csensor.setTimeout(500);if (!sensor.init()){Serial.println("Failed to detect and initialize sensor!");while (1);}// Use long distance mode and allow up to 50000 us (50 ms) for a measurement.// You can change these settings to adjust the performance of the sensor, but// the minimum timing budget is 20 ms for short distance mode and 33 ms for// medium and long distance modes. See the VL53L1X datasheet for more// information on range and timing limits.sensor.setDistanceMode(VL53L1X::Long);sensor.setMeasurementTimingBudget(50000);// Start continuous readings at a rate of one measurement every 50 ms (the// inter-measurement period). This period should be at least as long as the// timing budget.sensor.startContinuous(50);
}void loop()
{sensor.read();Serial.print("range: ");Serial.print(sensor.ranging_data.range_mm);Serial.print("\tstatus: ");Serial.print(VL53L1X::rangeStatusToString(sensor.ranging_data.range_status));Serial.print("\tpeak signal: ");Serial.print(sensor.ranging_data.peak_signal_count_rate_MCPS);Serial.print("\tambient: ");Serial.print(sensor.ranging_data.ambient_count_rate_MCPS);Serial.println();
}

串口函数

void setup()
{Serial.begin(9600);Serial.println("Senesor:");
}void loop()
{Serial.print();Serial.println();
}

若有需要同时输出多个数值:

//以灰度传感器为例
Serial.print(XHEADER + analogRead(xpin) + TAB);
Serial.print(YHEADER + analogRead(ypin) + TAB);
Serial.print(ZHEADER + analogRead(zpin));
Serial.println();
delay(200);

或者

Serial.print(((float)x - zero_G)/scale);
Serial.print("\t");
Serial.print(((float)y - zero_G)/scale);
Serial.print("\t");
Serial.print(((float)z - zero_G)/scale);
Serial.print("\n");

蓝牙模块

#include <SoftwareSerial.h>SoftwareSerial mySerial(10, 11); //定义RX和TX接口void setup() {//开启USB连线的串口通信Serial.begin(57600);Serial.println("Goodnight moon!");//开启蓝牙模块的串口通信mySerial.begin(4800);mySerial.println("Hello, world?");
}void loop() { //mySerial.available()检测蓝牙模块是否正常工作//mySerial.read()读取蓝牙模块传回的数据if (mySerial.available()) {//将蓝牙模块传回的数值打印在USB连接的电脑串口上Serial.write(mySerial.read());}
}

请在转载文章过程中明确标注文章出处!尊重原创,尊重知识产权,谢谢!

Arduino传感器(L298N、超声波传感器、舵机、光电传感器、灰度传感器、蓝牙模块)相关推荐

  1. 【雕爷学编程】Arduino动手做(77)---模拟灰度传感器

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  2. 模拟灰度传感器循迹的程序_灰度传感器的工作原理

    灰度传感器是模拟传感器,有一只发光二极管和一只光敏电阻,安装在同一面上.灰度传感器利用不同颜色的检测面对光的反射程度不同,光敏电阻对不同检测面返回的光其阻值也不同的原理进行颜色深浅检测.在有效的检测距 ...

  3. Arduino灰度传感器PID巡线

    接前面博客的PID巡线部分代码: 采用两个灰度传感器循黑线测试. PID公式: 编程时具体用到的公式: #define left_pin A0//左侧模拟灰度传感器 #define right_pin ...

  4. 四轮两驱小车(四):STM32驱动5路灰度传感器PID循迹

    目录 前言: 小车效果展示: 5路数字灰度传感器: 巡线思路: 加入PID调节的代码: 前言: 之前买了一批5路灰度传感器,想用这传感器进行循迹,无奈网上和官方的资料提供的还是比较少,这里还是做一下当 ...

  5. 灰度传感器(模拟和智能)两种

    索引 1. 模拟灰度传感器 概述 技术规格 引脚定义 模拟灰度传感器引脚定义 连接示意图 示例代码 2. Smart Grayscale Sensor 智能灰度传感器 概述 技术指标 智能灰度传感器测 ...

  6. arduino与蓝牙模块

    一.蓝牙模块与Arduino 主要分两步,第一步设置蓝牙模块(AT模式),如,设置成从动任何设备可连接,设置名称及密码等:第二步,编写相应的控制程序: HC05(ZS-040)蓝牙模块与手机连接参考链 ...

  7. Arduino使用HC05蓝牙模块与手机连接(转载)

    通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...

  8. Arduino使用HC05蓝牙模块与手机连接

    通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...

  9. 【DX-BT24蓝牙模块连接Arduino与手机透传教程】

    [DX-BT24蓝牙模块连接Arduino与手机透传教程] 1. 前言 2. 接线 3. 程序设计详解 4. 演示效果 5. 小结 1. 前言 大夏龙雀科技DX-BT24&BT24-S& ...

最新文章

  1. 一份详细的“入坑Phd指南”---教你如何做笔记、整理参考书目、管理时间、如何写作、对自己和导师合理预期...
  2. TortoiseSVN找不到系统指定路径
  3. Kubernetes — Pod
  4. springmvc参数绑定
  5. OCA第2部分中的Java难题
  6. 写作工具_4种加快数据科学写作速度的工具
  7. abap开发注释快捷键_让ABAP开发者更加轻松的若干快捷键
  8. 北京环球影城上线王者荣耀英雄主题活动
  9. [译]GLUT教程 - 笔划字体
  10. androidannotations 在android studio中的使用
  11. 遥感专业学c语言吗,2019遥感科学与技术专业怎么样、学什么、前景好吗
  12. html5font标签菜鸟教程,菜鸟教程
  13. Discuz搜索模块解析
  14. 诺兰模型(百度百科)
  15. html取消父元素样式,CSS以防止子元素继承父样式
  16. 制造业MES系统数字化转型
  17. 扫描用计算机名称不成功,电脑中使用扫描仪时提示通讯错误时请更新扫描端口的解决方法...
  18. 溢出部分用省略号表示
  19. 用 Python 远程控制 Windows 服务器,太好用了!
  20. 通用方法 windows下安装Git +Gerrit环境以及配置提交日志模板

热门文章

  1. 最新i7编译android源码,编译ROC-RK3328-CC Android7.1源码教程
  2. Android开发好友管理,好友管理
  3. Celery 学习笔记(3)- 任务和任务执行
  4. c语言学习3--1 if语句
  5. java作业:用GUI实现一个科学计算器的设计
  6. 浅谈字节最新开源联邦机器学习平台Fedlearner
  7. Qt 国际化 (中英文切换)
  8. Android动画之旅-开篇动画简介
  9. gpj文件怎么转化成html,001.html
  10. python 培训 太原