首页 > 其他分享 >Arduino调整小车速度

Arduino调整小车速度

时间:2024-07-21 22:51:22浏览次数:10  
标签:analogWrite Arduino 小车 void LOW digitalWrite 速度 Serial 100

#include<Servo.h> //引用库
//因为很多子函数要用这个变量,所以把servo定义称全局变量,作用域是整个代码文件
Servo myServo;


//全速:digitalWrite(2,3左轮;4,5右轮)
//调速:analogWrite(pin,0~255)--2,3左轮;5,
//analogWrite只支持3,5,6,9,10,11引脚
//所以对4,5的物理接线对换一下

//前进
void Forward(){
  digitalWrite(2,LOW);
  //digitalWrite(3,HIGH);
  analogWrite(3,150);
  digitalWrite(4,LOW);
  //digitalWrite(5,LOW);
  analogWrite(5,150);
}
//后退
void BackOff(){
  digitalWrite(2,LOW);
  analogWrite(3,100);
  digitalWrite(4,LOW);
  analogWrite(5,100);
}
//左转
void TurnLeft(){
  //小车左转(左轮后退)
  digitalWrite(2,LOW);
  analogWrite(3,90);
  //小车左转(右轮前进)
  digitalWrite(4,LOW);
  analogWrite(5,250);
}
//右转
void TurnRight(){
  //小车右转(左轮前进)
  digitalWrite(2,LOW);
  analogWrite(3,250);
  //小车右转(右轮后退)
  digitalWrite(4,LOW);
  analogWrite(5,90);
}

//停止
void Stop(){
  digitalWrite(2,LOW);
  analogWrite(3,0);
  digitalWrite(4,LOW);
  analogWrite(5,0);
}

//获取距离
long getLen(){
  //发送一个10us的信号给超声波
  digitalWrite(9,LOW);
  delayMicroseconds(2);
  digitalWrite(9,HIGH);
  delayMicroseconds(10);
  digitalWrite(9,LOW);//超声波内部开始震荡,准备发送波
  long time;
  long length;
  //关注Echo高电平维持的时间,代表超声波发送到返回的时间
  time = pulseIn(8,HIGH);
  //距离= 时间(us) * 速度(340m/s)=》 微秒 * 厘米 / 往返 2
  // 微秒转秒;米转厘米;=》(time/1000000) * (340*100) / 2
  length = time * 0.017000;
  return length;
}

void Init(){
  //put your setup code here, to run once:
  //串口初始化
  //配置2,3口为输出引脚(左轮初始化)
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  //配置4,5口为输出引脚(右轮初始化)
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  //Trig接9,通过9发送一个触发信号给超声波
  pinMode(9,OUTPUT);
  //Echo接8,通过读取8高电平维持的实践,确认超声波哦在空气中传播的时间
  pinMode(8,INPUT);
  //pinMode(LED_BUILTIN,OUTPUT);
  //监听串口
  Serial.begin(9600);
  //把舵机黄色信号线插在ardino的引脚10
  myServo.attach(10);
}


void setup() {
  // put your setup code here, to run once:
  Init();
}

void loop() {
  // put your main code here, to run repeatedly:
  myServo.write(100);//居中
  //TurnLeft();

  // long centerLen;
  // long leftLen;
  // long rightLen;
  // myServo.write(100);//居中
  // delay(500);
  // centerLen = getLen();
  // Serial.print("中间的距离是:");
  // Serial.println(centerLen);
  // //检测到前方有障碍物
  // if(centerLen < 50){
  //   Stop();
  //   //右边摇头确认距离
  //   myServo.write(30);//右边
  //   delay(500);
  //   rightLen = getLen();
  //   Serial.print("右边的距离是:");
  //   Serial.println(rightLen);

  //   //左边摇头确认距离
  //   myServo.write(170);//左边
  //   delay(500);
  //   leftLen = getLen();
  //   Serial.print("左边边的距离是:");
  //   Serial.println(leftLen);

  //   //回正
  //   myServo.write(100);//居中
  //   delay(500);
  //   //左边大于右边往左边走
  //   if(leftLen > rightLen){
  //     TurnLeft();
  //     Serial.println("左转");
  //     delay(100);
  //     Stop();
  //   }else{
  //     TurnRight();
  //     Serial.println("右转");
  //     delay(100);
  //     Stop();
  //   }

  // }else{//前方无障碍物,前进
  //   Forward();
  // }

}

场景:小车速度轮子转速过快,调整转速防止惯性撞墙 

 

标签:analogWrite,Arduino,小车,void,LOW,digitalWrite,速度,Serial,100
From: https://www.cnblogs.com/dzw159/p/18315086

相关文章

  • 测试磁盘读写速度
    3、测试同时读写能力   ddif=/dev/sdbof=/testrw.dbfbs=64k  一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb是读,对/testrw.dbf是写),假设它们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力。4、测试纯写入性能ddif=/dev/zeroof=testbs......
  • 速度与质量的碰撞——对抗扩散蒸馏 (ADD) 如何彻底改变图像生成
    引言DigiOps与人工智能是最新和最令人兴奋的进步之一,它是一种将速度和质量融为一体的图像生成技术。ADD的发展经历了几个关键阶段。最初,图像生成方法非常基础,而且经常产生不令人满意的结果。生成对抗网络(GAN)的引入标志着一项重大改进,可以使用双网络方法创建逼真的图像......
  • xfce下优化xrdp速度
    背景虚拟机中安装了Debian并使用了xfce4桌面,使用xrdp远程访问时感觉速度有些欠佳,应该是网络和虚拟机性能问题。解决经过测试下免费方法能够改善xrdp速度,一下在debian下xface桌面测试有效:安装xfce4和xorgxrdp-glamor设置xrdp配置修改/etc/xrdp/sesman.ini和/etc/xrdp/......
  • 净水器选型避坑:为了出水速度快那么几秒,RO膜滤芯后期多花钱不划算,选择净水器要多关注
    市面上绝大部分的大通量净水器他只是出水速度快,RO膜的使用寿命并没有延长多少,比如某尔同系列的产品400G的总净水量和1200G的一样,都是4000升,400G的RO膜使用寿命3年,按说1200G的使用寿命应该是9年,实际也才5年,但RO膜滤芯的价格确增加了不少,无形中增加了我们消费者的滤芯成本。额定......
  • 自己实现sprintf功能,用于把三个float转换成字符串格式,速度比sprintf快了20倍
     float转字符串使用sprintf太慢了,自己实现sprintf功能,用于把三个float转换成字符串格式,速度比sprintf快了20倍!运行结果如下图:例程:#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>#defineRUN_COUNT10000000//运行次数/*实现sprin......
  • 免费图床深度解析:高速 、稳定、体验上佳、速度、长期使用的绝佳选择
    在当今这个全面数字化的互联网时代,图片已然成为信息传递过程中不可或缺的重要组成部分。不管是用于展示产品的独特之处、分享生活中的美妙瞬间,还是在各类文档与网页中增强视觉效果,图片都发挥着至关重要的作用。然而,随之而来的图片存储与分享的难题,时常让我们感到烦恼。想象一下,您......
  • Grafana Loki查询加速:如何在不添加资源的前提下提升查询速度
    GrafanaLoki查询加速:如何在不添加资源的前提下提升查询速度来自GrafanaLokiqueryacceleration:Howwespedupquerieswithoutaddingresources,介绍了Loki如何通过n-grams+布隆过滤器来加速查询。在过去的5年中,我们在平衡特性开发和支持大规模用户之时,改善了日志聚合......
  • 基于Qlearning强化学习的小车弧线轨迹行驶控制matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下(完整代码运行后无水印):  2.算法涉及理论知识概要        Q-learning是一种离散时间强化学习算法,无需模型即可直接从环境中学习最优策略。当应用于小车弧线轨迹行驶控制时,其核心任务是让小车自主学习如何控制转向和速度,以在......
  • ARDUINO最新pinMode()管脚设置方法(24年7月)
    Arduino管脚配置ESP32Arduino管脚配置测试正常。pinMode()[数字I/O]描述将指定的引脚配置为输入或输出。有关引脚功能的详细信息,请参阅数字引脚部分。可以使用模式INPUT_PULLUP使能内部上拉电阻。此外,INPUT模式明确禁用内部上拉电阻。语法pinMode(pin,mode)参数......
  • Arduino小车自动避障
    #include<Servo.h>//引用库//因为很多子函数要用这个变量,所以把servo定义称全局变量,作用域是整个代码文件ServomyServo;//前进voidForward(){digitalWrite(2,LOW);digitalWrite(3,HIGH);digitalWrite(4,HIGH);digitalWrite(5,LOW);}//后退voidBackOff(){......