点亮LED和超声波测距
-
点亮LED灯
#include <Arduino.h>
void setup()
{
pinMode(2,OUTPUT); // 2号引脚为output模式
}
void loop()
{
digitalWrite(2,LOW); // 低电平,打开LED
delay(1000);
// 休眠1000ms
digitalWrite(2,HIGH); // 高电平,关闭LED
delay(1000);
} -
超声波测量距离
原理:发出一段高电平,检测高电平持续时间,利用高电平持续时间来计算传感器与物体之间的距离
公式:(单位换算,输出时间为微秒,声速为343m/s)
#include <Arduino.h>
#define TRIG 27 // 超声波与哪一个引脚相连
#define ECHO 21
void setup()
{
pinMode(TRIG,OUTPUT); // TRIG为输出模式
pinMode(ECHO,INTPUT); // TRIG为输入模式
}
void loop()
{
digitalWrite(TRIG,HIGH);
delayMicroseconds(10); // 延时10微妙
digitalWrite(TRIG,LOW);
double delta_time = pulseln(ECHO,HIGH); //检测高电平持续时间
float detect_distance = delta_time * 0.0343 / 2; //计算距离
Serial.printf("distance=%f cm\n", detect_distance)
} -
使用第三方库来驱动IMU(惯性测量器)
arduino支持第三方库
MP6050
-
引入开源库
lib_deps = https://github.com/fishros/MPU6050_light.git -
修改代码
在example中查看如何使用
/* Get all possible data from MPU6050
* Accelerometer values are given as multiple of the gravity [1g = 9.81 m/s²]
* Gyro values are given in deg/s
* Angles are given in degrees
* Note that X and Y are tilt angles and not pitch/roll.
*
* License: MIT
*/
#include "Wire.h"
#include <MPU6050_light.h>
MPU6050 mpu(Wire);
void setup() {
Serial.begin(115200); //波特率
Wire.begin(18,19); //sda, scl初始化总线I^2C通信协议
byte status = mpu.begin();
Serial.print(F("MPU6050 status: "));
Serial.println(status);
while(status!=0){ } // stop everything if could not connect to MPU6050
Serial.println(F("Calculating offsets, do not move MPU6050"));
delay(1000);
mpu.calcOffsets(true,true); // gyro and accelero
Serial.println("Done!\n");
}
unsigned long timer = 0;
void loop() {
mpu.update();
if(millis() - timer > 1000){ // print data every second
Serial.print(F("TEMPERATURE: "));Serial.println(mpu.getTemp());
Serial.print(F("ACCELERO X: "));Serial.print(mpu.getAccX());
Serial.print("\tY: ");Serial.print(mpu.getAccY());
Serial.print("\tZ: ");Serial.println(mpu.getAccZ());
Serial.print(F("GYRO X: "));Serial.print(mpu.getGyroX());
Serial.print("\tY: ");Serial.print(mpu.getGyroY());
Serial.print("\tZ: ");Serial.println(mpu.getGyroZ());
Serial.print(F("ACC ANGLE X: "));Serial.print(mpu.getAccAngleX());
Serial.print("\tY: ");Serial.println(mpu.getAccAngleY());
Serial.print(F("ANGLE X: "));Serial.print(mpu.getAngleX());
Serial.print("\tY: ");Serial.print(mpu.getAngleY());
Serial.print("\tZ: ");Serial.println(mpu.getAngleZ());
Serial.println(F("=====================================================\n"));
timer = millis();
}
}
-