精华内容
下载资源
问答
  • Arduino蓝牙小车程序
    千次阅读 多人点赞
    2020-01-25 17:45:10

    Arduino蓝牙小车


    我做的是舵机控制方向,一个电机驱动的简单蓝牙小车。
    板子:arduino uno;
    拓展版我用的是:PM—R3电机拓展版(2路直流电机输出);
    蓝牙模块:HC-06;
    舵机:MG996R;
    电机:不知道;
    若干杜邦线;
    程序:

    int servopin=9;//定义舵机接口数字接口9
    int myangle;//定义角度变量
    int pulsewidth;//定义脉宽变量
    int val;
    char _val;
    const int led1=10;
    const int led2=11;
    void servopulse(int servopin,int myangle)//定义一个脉冲函数
    {
      pulsewidth=(myangle*11)+500;//将角度转化为500-2480的脉宽值
      digitalWrite(servopin,HIGH);//将舵机接口电平至高
      delayMicroseconds(pulsewidth);//延时脉宽值的微秒数
      digitalWrite(servopin,LOW);//将舵机接口电平至低
      delay(20-pulsewidth/1000);
    }
    void setup() {
      // put your setup code here, to run once:
    pinMode(6,OUTPUT);//驱动模块上的输出脚
    pinMode(7,OUTPUT);//驱动模块上的输出脚
    pinMode(servopin,OUTPUT);
    Serial.begin(9600);   
    Serial.println("系统已准备好");
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
     _val = Serial.read();//读取串行端口的值
    switch(_val){  
      case 'g':     //前进
      digitalWrite(6,HIGH);   
      digitalWrite(7,LOW);break;
      case 'b':    //后退
      digitalWrite(6,HIGH);
      digitalWrite(7,HIGH);break;
      case 's':   //小车停下
      digitalWrite(6,LOW);
      digitalWrite(7,LOW);break;
      case 'z':    //小车左转向
      val=60;
      Serial.print("moving servo to ");   //显示舵机转动的角度
      Serial.print(val,DEC);
        Serial.println();
        for(int i=0;i<=30;i++)//给予舵机足够的时间让它转到指定角度
         {
            servopulse(servopin,val);//引用脉冲函数
          }
          break;
       case 'y':   //小车右转
       val=140;
      Serial.print("moving servo to ");
      Serial.print(val,DEC);
        Serial.println();
        for(int i=0;i<=30;i++)//给予舵机足够的时间让它转到指定角度
         {
            servopulse(servopin,val);//引用脉冲函数
          }
          break;
        case 'h':  //使小车方向回正;我这定义的是舵机角度为100时方向为正
        val = 100;
      Serial.print("moving servo to ");
      Serial.print(val,DEC);
      Serial.println();
      for(int i=0;i<=30;i++)//给予舵机足够的时间让它转到指定角度
         {
            servopulse(servopin,val);//引用脉冲函数
          }break;
        case 'a':   //以下是控制车上的灯
        digitalWrite(led1,HIGH);
        digitalWrite(led2,LOW);break;
        case 'c':
        digitalWrite(led1,LOW);
        digitalWrite(led2,HIGH);break;
        case 'k':
        digitalWrite(led1,LOW);
        digitalWrite(led2,LOW);break;
        case 'q':
        digitalWrite(led1,HIGH);
        digitalWrite(led2,HIGH);break;
          default:
          break;
    }
    }
    

    在这里插入图片描述

    在这里插入图片描述
    YYM,给LZ点赞!!!!
    最后祝大家新年快乐;

    更多相关内容
  • arduino的蓝牙小车程序

    2018-01-28 21:37:15
    arduino的蓝牙小车程序,手机app控制.........................................................
  • 蓝牙小车程序

    2017-09-10 17:14:47
    小车由俩个步进电机,一个蓝牙模块HC05,和一个万向轮搭起来的一台简单小车,单片机采用51单片机,控制简单,由手机控制,具体软件可以上网查找。仅供参考。
  • 智能蓝牙小车程序

    2018-07-12 09:48:22
    使用蓝牙模块对智能小车进行驱动,可是实现手机对他的控制
  • 51单片机蓝牙小车程序详解

    千次阅读 2021-11-16 15:02:17
    1.串口初始化 void UART_Init(void) //函数初始化。9600bps@11.0592MHz { PCON &= 0x7F; //波特率不倍速 SCON = 0x50; //8位数据,可变波特率 //... } } 接线: 51单片机蓝牙小车接线(L298N供电,分别电源供电)

    1.串口初始化

    void UART_Init(void)		//函数初始化。9600bps@11.0592MHz
    {
    	PCON &= 0x7F;		//波特率不倍速
    	SCON = 0x50;		//8位数据,可变波特率
    	//AUXR |= 0x40;		//定时器1时钟为Fosc,即1T(删除。高级的单片机才有这个选项)
    	//AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器(删除。高级的单片机才有这个选项)
    	TMOD &= 0x0F;		//清除定时器1模式位
    	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
    	TL1 = 0xFD;		//设定定时初值
    	TH1 = 0xFD;		//设定定时器重装值
    	ET1 = 0;		//禁止定时器1中断
    	TR1 = 1;		//启动定时器1
        EA=1;		// CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。
    	ES=1;		//串行口中断允许位,ES=1,允许串行口中断,ES=0,禁止串行口中断。
    }
    

    2.配置端口及驱动程序

    sbit IN1=P0^0;
    sbit IN2=P0^1;
    sbit IN3=P0^2;
    sbit IN4=P0^3;
    
     void stop()
    {
    	IN1=0;
    	IN2=0;
    	IN3=0;
    	IN4=0;
    }
    
    void forward()
    {
    	IN1=1;
    	IN2=0;
    	IN3=1;
    	IN4=0; 
    }
    
    void back()
    {
    	IN1=0;
    	IN2=1;
    	IN3=0;
    	IN4=1;
    }
    
    void left()
    {
    	IN1=1;
    	IN2=0;
    	IN3=0;
    	IN4=0;
    }
    
    void right()
    {
    	IN1=0;
    	IN2=0;
    	IN3=1;
    	IN4=0;
    }
    

    3.主函数

    void main()
    {
    	UART_Init();
    	while(1)
    	{
    	}
    }
    

    4.中断函数

    void UART_Routine() interrupt 4    //8个中断请求源中的串口中断。
    {
    	unsigned char S;		//定义一个S存放 SBUF中的数据。
    	if(RI==1)  			    //判断接收中断请求标志位,TI为1 表示用开始可以开始接收了。
    	{
    		stop();			    //电机控制,先停止再执行指令。
    		S=SBUF;			    //手机蓝牙信号发送指令 储存在SBUF中。从SBUF里面 拿出指令赋给S。
    		switch(S)			
    		{
    			case ('1'):		//判断S中是不是指令“1”
    				forward();break;
    			case ('2'):		//判断S中是不是指令“2”
    				back();break;
    			case ('3'):
    				left();break;
    			case ('4'):
    				right();break;
    			case ('0'):
    				stop();break;
    		}	
    		RI=0;			//单片机接收中断请求标志位,接收完之后自动变为1,接收完成之后要手动置为0。为0下次才可以接收。
    	}
    
    

    注意:

    1.中断函数里面的1,2,3,4,0要在手机蓝牙APP中设置。

    2.手机蓝牙APP中设置,按下按键/松开按键,电机转动的。

            或者按下按键电机转动,松开按键 电机停止等。


    完整代码:

    #include <REGX52.H>
    
    sbit IN1=P0^0;
    sbit IN2=P0^1;
    sbit IN3=P0^2;
    sbit IN4=P0^3;
    
     void stop()
    {
    	IN1=0;
    	IN2=0;
    	IN3=0;
    	IN4=0;
    }
    
    void forward()
    {
    	IN1=1;
    	IN2=0;
    	IN3=1;
    	IN4=0; 
    }
    
    void back()
    {
    	IN1=0;
    	IN2=1;
    	IN3=0;
    	IN4=1;
    }
    
    void left()
    {
    	IN1=1;
    	IN2=0;
    	IN3=0;
    	IN4=0;
    }
    
    void right()
    {
    	IN1=0;
    	IN2=0;
    	IN3=1;
    	IN4=0;
    	
    }
    
    void UART_Init(void)		
    {
    	PCON &= 0x7F;		
    	SCON = 0x50;		
    	TMOD &= 0x0F;		
    	TMOD |= 0x20;		
    	TL1 = 0xFD;	
    	TH1 = 0xFD;		
    	ET1 = 0;		
    	TR1 = 1;		
    	EA=1;		
    	ES=1;		
    }
    
    
    void main()
    {
    	UART_Init();
    	while(1)
    	{
    	}
    }
    
    void UART_Routine() interrupt 4
    {
    	unsigned char S;
    	if(RI==1)  
    	{
    		stop();
    		S=SBUF;
    		switch(S)		
    		{
    			case ('1'):		
    				forward();break;
    			case ('2'):		
    				back();break;
    			case ('3'):
    				left();break;
    			case ('4'):
    				right();break;
    			case ('0'):
    				stop();break;
    		}	
    		RI=0;
    	}
    }

    接线:

    51单片机蓝牙小车接线(L298N供电,分别电源供电)

    展开全文
  • #include #define uchar unsigned char #define uint unsigned int uint MA=0; uint MB=0; uint SpeedA=65; uint SpeedB=65; uchar a; sbit IN1=P0^0; sbit IN2=P0^1; sbit IN3=P0^2; sbit IN4=P0^3;...
  • 这个是这个蓝牙小车的主程序,单片机用的是stm8,希望对广大爱好智能车的朋友所帮助。
  • android控制蓝牙小车程序
  • 程序和安卓端上位机互联例如(spp等),安卓端的编程需要用户自己编写在百度上搜索spp等软件教程即可
  • 这是基于STM32的小车蓝牙程序,拥有PWM调速功能,能实现前进,后退,左转,右转。
  • 89C52蓝牙小车程序

    2018-07-13 14:51:30
    通过串口通信,实现小车用手机蓝牙控制,手机上需要下载蓝牙串口,abcd前后左右,e结束
  • MSP430G253蓝牙小车程序

    2015-07-06 20:38:21
    程序可以通过驱动L298N 两路电机 实现小车的前后左右 ,具体代码取决于你的接线,自己可以根据接线修改
  • 89C52单片机蓝牙小车程序(带有PWM调速功能)
  • 蓝牙小车遥控程序

    2018-01-19 00:15:29
    蓝牙遥控小车C语言程序,可用于51,stm32最小系统等制作智能小车使用通过该程序能使用手机端蓝牙发送信息到小车蓝牙接收,实现转弯,前进,后退等操作
  • 基于Qt的串口上位机控制蓝牙小车程序。 通过五个按键实现小车的移动控制,如果你的下位机是通过上位机的单个指令发送然后switch实现的,那么你只需要修改一下数字就可以用来操作你的下位机小车了。
  • stc89c51/52蓝牙循迹小车,双l298n驱动,循迹使用7个传感器,蓝牙使用hc-05
  • arduino蓝牙小车程序

    2021-01-24 15:38:35
    arduino蓝牙小车程序
  • 然后,在android手机上安装“蓝牙通信”应用程序后,打开该APP,然后选择“允许打开蓝牙”。点击设备列表中的“开始搜索按钮”,在设备列表中选择蓝牙模块的名字进行连接。 完成上述工作以后,就可以在手机上通过按...
  • 通过串口接收命令数据,调用函数实现相应动作并能用PWM进行调速,另有超声波壁障,遇到障碍后刹车,旋转舵机,超声波扫描周围物体,并向空旷地带转弯。有疑问可以联系我QQ
  • 本代码为大二单片机课程大作业,使用arduino mega2560板子控制蓝牙小车运动,实现了测速,测量温度,加速减速,灯光显示运动状态等功能,后续有时间我还会上传各个模块的介绍,下载的朋友可以私信我要硬件部分的资料...
  • arduino蓝牙小车的实现 材料: arduino uno 开发板 蓝牙JDY-32 四驱小车套件 杜邦线若干 3.7v电池两节 软件: arduino IDE 开发平台 移动app----SPP(找了很多款,都搜索不到蓝牙,发现这款还好,一下子就连上...

    arduino蓝牙小车的实现

    材料:

    • arduino uno 开发板
    • 蓝牙JDY-32
    • 四驱小车套件
    • 杜邦线若干
    • 3.7v电池两节

    软件:

    • arduino IDE 开发平台在这里插入图片描述

    • 移动app----SPP(找了很多款,都搜索不到蓝牙,发现这款还好,一下子就连上了蓝牙)在这里插入图片描述

    相关程序:

    注:代码来源为引用相关博客加以修改和优化(pwm调速),以实现小车的控制。
    在调试的过程中,也存在一些问题,比如小车的左右转有一些bug.

    #define STOP      0
    #define FORWARD   1
    #define BACKWARD  2
    #define TURNLEFT  3
    #define TURNRIGHT 4
    
    int leftMotor1 = 5;
    int leftMotor2 = 6;
    int rightMotor1 = 9;
    int rightMotor2 = 10;
    
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
      pinMode(leftMotor1, OUTPUT);
      pinMode(leftMotor2, OUTPUT);
      pinMode(rightMotor1, OUTPUT);
      pinMode(rightMotor2, OUTPUT);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      //usart read
      if(Serial.available()>0)
      {
        char cmd = Serial.read();//读取蓝牙模块发送到串口的数据
      
        
        motorRun(cmd);
          
      }  
    }
    void motorRun(int cmd)
    {
      switch(cmd){
         case'F':
          Serial.println("前进"); //输出状态
          analogWrite(leftMotor1,100);      
          analogWrite(leftMotor2,0);         
          analogWrite(rightMotor1,100);      
          analogWrite(rightMotor2,0);         
          delay(3000);
          Stop();
          break;
         case'B':
          Serial.println("后退"); //
          analogWrite(leftMotor1,0);      
          analogWrite(leftMotor2,100);        
          analogWrite(rightMotor1,0);      
          analogWrite(rightMotor2,100); 
          delay(3000);
          Stop();
          break;
         case 'L':
          Serial.println("左转"); //
          digitalWrite(leftMotor1, 100);
          digitalWrite(leftMotor2,200);
          digitalWrite(rightMotor1, 200);
          digitalWrite(rightMotor2, 100);
          delay(3000);
          Stop();
          break;
         case 'l':    //原地左转
          analogWrite(leftMotor1,0);      
          analogWrite(leftMotor2,200);         
          analogWrite(rightMotor1,200);      
          analogWrite(rightMotor2,0); 
          Serial.println("右转"); 
          delay(3000);
          Stop();
          break;
          case 'R':
          Serial.println("右转"); //
          digitalWrite(leftMotor1, 200);
          digitalWrite(leftMotor2, 100);
          digitalWrite(rightMotor1, 100);
          digitalWrite(rightMotor2, 200);
          delay(3000);
          Stop();
          break;
         case 'r':    //原地右转
          analogWrite(leftMotor1,200);      
          analogWrite(leftMotor2,0);         
          analogWrite(rightMotor1,0);      
          analogWrite(rightMotor2,200); 
          delay(3000);
          Stop();
          break;
         
      }
    }
    
    void Stop(void)
    {
      analogWrite(leftMotor1,0);      
      analogWrite(leftMotor2,0);         //左轮静止不动
      analogWrite(rightMotor1,0);      
      analogWrite(rightMotor2,0);         //右轮静止不动
    }
    
    展开全文
  • 51单片机循迹蓝牙小车c程序
  • STM32蓝牙小车可调速程序。我在网上找了好久都没有找到用stm32写的可调速小车程序,于是花了一下午自己写了一个,希望可以帮到大家。
  • 作为一个软件程序猿,在我眼里,Arduino是学习“可怕硬件”的一个便捷通道。它把复杂的硬件名称,属性给我们隐藏起来,只需要一些简单的软件知识,就可以学习硬件开发。1.2 怎么选择Arduino开发板1.2.1 官方版本还是...

    第1节 选择Arduino开发板

    1.1 Arduino是什么

    对Arduino,官方有一堆解释。

    作为一个软件程序猿,在我眼里,Arduino是学习“可怕硬件”的一个便捷通道。它把复杂的硬件名称,属性给我们隐藏起来,只需要一些简单的软件知识,就可以学习硬件开发。

    1.2 怎么选择Arduino开发板

    1.2.1 官方版本还是兼容版本

    Arduino是开源项目,硬件结构,软件设计都开源。

    所以不存在盗版的问题。

    官方版质量肯定是杠杠的,但价格也贵。

    两者价格数字差不多,一个卖人民币,一个卖美元。

    不差钱就买官方版,否则兼容版也不错。

    1.2.2 Uno还是Mega

    Arduino有一系列各种用途的开发板,最常见的有两种,Uno和Mega。

    Uno价格便宜一些,功能简单。

    Mega价格比Uno贵二十多块,官方版贵二十多美元,兼容版贵二十多人民币。

    大家买Arduino开发板,主要用途就是学习,要求能方便的了解到更多特性。

    Uno接口太少,比如做个小车,接了四个马达后,基本就不能再添加其他模块了。

    如果你要做个蓝牙小车,调试时噩梦就来了。因为Uno只有一个串口,蓝牙和USB共用。

    你的先拔下蓝牙模块的连接线才能上传程序,上传完成后,然后再插上蓝牙连接线才能开始测试。

    如果你不只是学习,而是要研发产品,要考虑产品的成本价。。。

    选择Mega也任然没有错,你可以现在Mega上完成开发,最后在Uno上做性能测试。

    所以,我的建议是选Mega。

    第2节 从HelloWorld开始

    我记得从学习C语言开始,都是先写个HelloWorld程序。

    Arduino我们也从这里开始吧。

    2.1 搭建开发环境

    官网下载Arduino集成开发环境(以后都简称Arduino IDE)。

    解压后,双击此目录下的arduino.exe,启动Arduino IDE。

    我这里是以Windows平台为例,Mac,Linux界面、操作基本相同,也可以参照本例学习。

    2.2 新建工程

    启动Arduino IDE,点击菜单 文件->新建(快捷键Ctrl+N),生成新的工程。

    0818b9ca8b590ca3270a3433284dd417.png

    点击菜单 文件->保存(快捷键Ctrl+S),保存生成的工程。

    文件名这里我填“HelloWorld”,Arduino IDE会生成一个名称叫“HelloWorld”的文件夹,并在这个文件夹下生成一个同名的HelloWorld.ino文件。

    0818b9ca8b590ca3270a3433284dd417.png

    .ino文件是Arduino工程的主文件,Arduino要求ino文件必须置于一个同名文件夹下。

    2.3 Hello World

    新生成的工程自动生成了setup()和loop()两个函数。

    我们先改改代码,输出“Hello World”,有点切身感受。稍后再来讲解代码结构。

    在setup函数里设置串口波特率

    void setup() {

    // put your setup code here, to run once:

    Serial.begin(9600);

    }

    用串口输出”Hello world!”

    void loop() {

    // put your main code here, to run repeatedly:

    Serial.println("Hello world!");

    }

    点右上角的按钮打开串口监视器(快捷键Ctrl+Shift+m)

    0818b9ca8b590ca3270a3433284dd417.png

    波特率必须和setup里设置的相同,本例是9600.

    可以看到不断输出“Hello world!”

    0818b9ca8b590ca3270a3433284dd417.png

    2.4 代码结构

    HelloWorld.ino文件就两个函数

    void setup()

    void loop()

    它们是怎么运行起来的呢?

    看下面这段代码

    void setup(void);

    void loop(void);

    int main(void) {

    setup();

    while(1) {}

    loop();

    }

    return 0;

    }

    是不是很清楚了。

    main和while这些代码去哪了呢?Arduino IDE隐藏了,让我们的代码结构更清晰。

    setup()只执行一次,用来放初始化的函数

    loop()不断循环执行,用来检查各传感器状态,驱动程序运行。

    2.5 Serial

    Arduino IDE通过串口和PC(或其他设备)通讯。

    在Arduino IDE中Serial就是串口的化身。

    注意,Serial是系统对象,不是类,所以使用时直接Serial.begin()。

    2.5.1 官网详述

    2.5.2 Serial硬件结构

    Uno示例

    0818b9ca8b590ca3270a3433284dd417.png

    USB接口和0、1引脚都是接Serial

    Mega示例

    0818b9ca8b590ca3270a3433284dd417.png

    USB接口和0、1引脚都是接Serial

    18、19引脚是接Serial1

    16、17引脚是接Serial2

    14、15引脚是接Serial3

    第3节 控制LED灯开关

    Arduino自带了很多例子。

    Blink是其中为数不多的只要有Arduino开发板就可以开始学习的例子。

    菜单 文件->示例->01.Basic->Blink打开今天要讲的例子。

    3.1 setup函数

    void setup() {

    // initialize digital pin 13 as an output.

    pinMode(13, OUTPUT);

    }

    学习硬件开发,一个很大的门槛是要记住许多复杂的寄存器地址。

    Arduino的NB之处就在于她简化了这许多地址,定义了几种不同类型的硬件插口,称为引脚。

    编程时只需要对这几类引脚做操作就可以了。

    今天先讲最常用的引脚,DigitalPins。

    官网解释如下:

    https://www.arduino.cc/en/Tutorial/DigitalPins

    简单说就是一种可以输入或输出数字信号0,1的引脚。

    某个引脚是用来输入还是输出信号,就通过pinMode函数来定义。

    pinMode(13, OUTPUT);

    这段代码的意思是编号为D13的引脚,定义为输出模式。

    3.2 为什么是D13引脚?

    因为D13引脚连接着一个焊接在Arduino开发板上的LED灯。

    所以,如果没有可外接的LED模块,就用D13引脚来做演示。

    3.3 loop函数

    void loop() {

    digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)

    delay(1000); // wait for a second

    digitalWrite(13, LOW); // turn the LED off by making the voltage LOW

    delay(1000); // wait for a second

    }

    loop函数总共4行代码

    digitalWrite(13, HIGH);

    将D13置高,也就是通电。

    切记,只有之前将引脚设置为OUTPUT,digitalWrite才能生效。

    delay(1000);

    延时1秒,在这1秒钟,LED灯状态不变,即点亮状态。

    digitalWrite(13, LOW);

    将D13置低,也就是断电。

    delay(1000);

    延时1秒,在这1秒钟,LED灯状态不变,即熄灭状态。

    之后loop函数被再次执行,我们看到的现象就是LED灯一秒亮、一秒暗的不停闪烁。

    3.4 D13控制的LED灯在哪个位置?

    不同的开发板,D13控制的LED灯位置,颜色都略有不同。

    相信大多数看官我在下一样,都是搞软件出身的。根本分不清LED灯长啥样:P

    开发板连接到上电源(USB线接电脑也算)后,如果只有一个LED灯亮着,这个LED灯旁边肯定有一个“On”标记,这个是表示电源接通的LED灯。

    上传本例到开发板后,闪烁的那个就是我们要找到D13 LED灯了。可以在这个LED灯旁看到个‘L’标记。

    0818b9ca8b590ca3270a3433284dd417.png

    第4节 控制LED灯的亮度

    LED灯是最常见的Arduino模块,上一节我们讲了控制Arduino开发板自带的LED灯。

    这一节还讲LED灯,讲外接、可控亮度的LED灯。

    4.1 PWM

    先介绍个概念,Pulse Width Modulation简称PWM。

    数字接口只能输出0或1两种状态,PWM通过在0、1两种状态间快速切换,生成一个介于0、1之间的值。

    比如1000ms中,平均400ms处于1(高),平均600ms处于0(低),两种状态均匀分布,就输出了一个0.4的值。

    4.2 LED模块

    你的LED模块可能是这样子

    0818b9ca8b590ca3270a3433284dd417.png

    也可能是这样子

    0818b9ca8b590ca3270a3433284dd417.png

    不管长什么样,只要单色可调光LED,都是三根线。

    标注字符IN的是控制线、VCC是电源线、GND是地线。

    4.3 连接模块

    Mega开发板,2-13引脚都支持PWM,随便选一个都可以。

    0818b9ca8b590ca3270a3433284dd417.png

    Uno开发板,3,5,6,9,10,11引脚支持PWM,可以在开发板上看到引脚数字边上有个’~’。

    0818b9ca8b590ca3270a3433284dd417.png

    LED灯IN连接到Mega D2引脚;VCC接到Mega 5V引脚;GND接到Mega GND引脚。

    0818b9ca8b590ca3270a3433284dd417.png

    早期的开发板,为了防止电压不稳定击穿电子器件,需要连接个电阻。

    现在的开发板,只在接马达时才需要增加电阻,惯常的做法是增加一块扩展板。

    4.4 修改代码

    4.4.1 修改引脚

    因为这次我们使用了D2引脚,所以需要修改此处的13为2

    pinMode(13, OUTPUT);

    还要修改此处的13为2

    void loop() {

    digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)

    delay(1000); // wait for a second

    digitalWrite(13, LOW); // turn the LED off by making the voltage LOW

    delay(1000); // wait for a second

    }

    点击菜单 项目->上传,上传代码到开发板。

    可以看到这个外接的LED灯也像内置的LED灯一样闪烁了。

    4.4.2 优化代码

    刚才我们因为更换引脚,修改了3处代码。

    在arduoni开发中,更换引脚是很经常发生的事,常见的做法是在setup函数之前增加宏定义

    define LED_PIN 2

    void setup() {

    ...

    将代码中的D2相关代码都用LED_PIN替换,以后再更换引脚就很方便了。

    4.5 调节LED亮度

    4.5.1 调整为固定值

    用analogWrite函数控制PWM引脚,第一个参数是引脚序号,第二个是输出到这个引脚的值,范围0~255.

    analogWrite(LED_PIN, 10)这行代码使LED灯发出微弱的光。

    void loop() {

    analogWrite(LED_PIN, 10);

    }

    4.5.2 动态调整亮度

    我们通过串口输入一个介于0-255的数字来调整LED灯亮度。

    本例我们将演示四个Serial对象函数的使用方法。

    4.5.1.1 初始化

    使用begin()函数在setup函数里设置串口波特率。

    void setup() {

    Serial.begin(9600);

    pinMode(LED_PIN, OUTPUT);

    }

    4.5.1.2 检测串口是否有数据输入

    Serial.available()返回true表示串口有数据待读取

    void loop() {

    while (Serial.available()) {

    ...

    4.5.1.3 从串口读入一个long型数字

    Serial.parseInt()读取串口中输入的字符串。如果输入的是非数字,会被解析为0.

    void loop() {

    while (Serial.available()) {

    Serial.parseInt();

    4.5.1.4 改变LED灯亮度

    analogWrite()函数用来给模拟接口写入数据。

    第一个参数指定引脚序号,第二个参数指定写入引脚的值。

    long ledLevel = 10;

    void loop() {

    while (Serial.available()) {

    ledLevel = Serial.parseInt();

    }

    analogWrite(LED_PIN, ledLevel);

    }

    因为analogWrite接受的值在0-255之间,所以代码可以做些优化。

    用uint8_t代替long型。

    uint8_t ledLevel = 10;

    void loop() {

    while (Serial.available()) {

    ledLevel = Serial.parseInt();

    }

    analogWrite(LED_PIN, ledLevel);

    }

    4.5.1.5 输出Debug信息

    print在串口输出参数信息。

    println在串口输出参数信息,并回车。

    uint8_t ledLevel = 10;

    void loop() {

    while (Serial.available()) {

    ledLevel = Serial.parseInt();

    Serial.print("ledLevel=");

    Serial.println(ledLevel);

    }

    analogWrite(LED_PIN, ledLevel);

    }

    4.5.1.6 串口模拟器设置修改

    串口模拟器稍作修改,右下角这里改成“没有结束符”。

    否则parseInt会把结束符解析成0,导致LED灯错误熄灭。

    0818b9ca8b590ca3270a3433284dd417.png

    4.6 测试

    0818b9ca8b590ca3270a3433284dd417.png

    展开全文
  • STM32循迹避障蓝牙小车,有啥问题可以留言吧,应该能看到。笔者自写可用!!!
  • stc89c51蓝牙小车程序

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,626
精华内容 650
关键字:

蓝牙小车程序

友情链接: python.rar