Arduino应用开发:第十二章代码及练习答案

本文档展示了四段Arduino代码实例:基本伺服控制、低速平滑运动、超声波驱动舵机角度反馈及麦克罗秒级控制。通过这些代码,读者将学习如何使用Servo库实现舵机的精确控制,并结合超声波传感器进行避障操作。
摘要由CSDN通过智能技术生成

代码编号:servo_simple_0

[code]
#include <Servo.h>  //导入库文件
Servo servo1;       //声明舵机变量名为servo

void setup() {
  // put your setup code here, to run once:
  servo1.attach(6); //指定控制信号连接管脚
  servo1.write(0);  //让舵机回到初始位置0度
}

void loop() {
  // put your main code here, to run repeatedly:
  servo1.write(0);    //让舵机回到0度位置
  servo1.write(180);  //让舵机回到180度位置
}
[/code]

=========================================================================

代码编号:servo_simple_1

[code]
#include <Servo.h>  //导入库文件
Servo servo1;       //声明舵机变量名为servo

void setup() {
  // put your setup code here, to run once:
  servo1.attach(6); //指定控制信号连接管脚
  servo1.write(0);  //让舵机回到初始位置0度
}

void loop() {
  // put your main code here, to run repeatedly:
  servo1.write(0);    //让舵机回到0度位置
  delay(500);         //等待500ms时间
  servo1.write(180);  //让舵机回到180度位置
  delay(500);         //等待500ms时间
}
[/code]

=========================================================================

代码编号:servo_lowSpeed

[code]
#include <Servo.h>  //导入库文件
Servo servo1;       //声明舵机变量名为servo
int tmpTgt = 0;     //用来保存下一个目标角度值
int cnt = 0;        //段数计数

void setup() {
  // put your setup code here, to run once:
  servo1.attach(6); //指定控制信号连接管脚
  servo1.write(0);  //让舵机回到初始位置0度
  tmpTgt = 0;       //变量值复位为0
  cnt = 0;          //变量值复位为0
}

void loop() {
  // put your main code here, to run repeatedly:
  for(cnt = 0; cnt <= 18 ; cnt++){
    tmpTgt = cnt * 10;
    servo1.write(tmpTgt);
    delay(40);
  }
   for(cnt = 18; cnt >= 0 ; cnt--){
    tmpTgt = cnt * 10;
    servo1.write(tmpTgt);
    delay(40);
  }
}
[/code]

===============================================================

代码编号:servo_ultrasonic

[code]
#include <Servo.h>  //舵机库
#define servo_control  11  //定义舵机的控制管脚为11号
Servo servo1;       //声明舵机变量名为servo1
int stp = 1;       //行程的步长值
int ang  = 0;       //舵机当前角度值

//HC-SR04 pins define
#define trig 8 
#define echo 7

unsigned long puls_length ; //记录超声波脉冲宽度的变量,单位是微秒
float distance;     //存储超声波测距结果的变量,单位是厘米
float warning_dis = 10;    //预设的警告阈值,当测得距离小于该值时向电脑发出警报

void setup() {
  // put your setup code here, to run once:
  servo1.attach(servo_control); //指定控制信号连接管脚
  servo1.write(0);  //让舵机回到初始位置0度
  
  pinMode(trig, OUTPUT);  //定义超声波传感器的触发信号管脚为输出
  pinMode(echo, INPUT);   //定义超声波传感器的返回信号管脚为输入
  Serial.begin(9600);     //定义串口波特率为9600,用于在电脑屏幕上显示实时数据
}

void loop() {
  // put your main code here, to run repeatedly:
  ang = ang + stp;
  servo1.write(ang);
  if( (ang == 0)||(ang == 180) ){
      stp = (-1)*stp;
  }
  digitalWrite(trig, LOW);
  delay(2);
  digitalWrite(trig, HIGH);
  delay(2);
  digitalWrite(trig, LOW);
  unsigned long times = pulseIn(echo, HIGH);
  
  float distance = 0.017*times; //根据得到的脉冲长度计算出障碍物的距离
  
  if(distance <= warning_dis){  //障碍物距离小于阈值
      Serial.println("警报,有敌人接近!");  
      Serial.print("敌人距离:");     //输出敌人距离
      Serial.print(distance);
      Serial.println("厘米");
      Serial.print("敌人所在方位:");  //输出敌人方位
      Serial.print(ang);
      Serial.println("角度");
      delay(1000);                   //停留一秒钟
  }
  delay(100);
}
[/code]

==========================================================

代码编号:servo_Mcrsecond

#include <Servo.h>  //导入库文件

Servo myservo; //声明舵机变量名为myservo

int i;

void setup()

{

  myservo.attach(6);  //指定控制信号连接管脚

  myservo.writeMicroseconds(1000);  //让舵机回到初始位置0度

  delay(5000);

}

void loop() {

  for (i=1000;i<=2000;i++){

    myservo.writeMicroseconds(i);  

    delay(5);  

  }

  for (i=2000;i>=1000;i--){

    myservo.writeMicroseconds(i);  

    delay(5);  

  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值