本帖最后由 情仇 于 2015-12-21 17:14 编辑
Arduino+ Bluetooth + MPU6050 + L1298N的手势控制的小车。现在就差Bluetooth还没有接上了
Bluetooth应该怎么写呀?一个主一个从。
#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
MPU6050 accelgyro;
/**
* 定义小车LN298N接线
*/
#define ENA_A 4 //后边的电机使能,可以通过PWM调速
#define IN1_A 5
#define IN2_A 6
#define ENB_B 9
#define IN3_B 10
#define IN4_B 11
/**
* 定义小车操作函数
*/
void carBack(int carspeed); //前进,带速度参数
void carGo(int carspeed); //后退,带速度参数
void carStop(); //停止
void carLeft(int carspeed2); //左转弯,带参数
void carRight(int carspend2); //右转弯,带参数
/**
* 变量定义
*/
int carspeed2 = 3;
int carspeed = 30;
int temp, maxs;
int x, y, z;
int16_t ax, ay, az;
int16_t gx, gy, gz;
/**
* 初始设置函数
*/
void setup() {
/**
* 电机A控制引脚输出模式
*/
pinMode(ENA_A, OUTPUT);
pinMode(IN1_A, OUTPUT);
pinMode(IN2_A, OUTPUT);
pinMode(ENB_B, OUTPUT);
pinMode(IN3_B, OUTPUT);
pinMode(IN4_B, OUTPUT);
Wire.begin();
Serial.begin(38400);
Serial.println("Initializing I2C devices...");
accelgyro.initialize();
Serial.println("Testing device connections...");
Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
}
void loop() {
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
x = abs(ax);
y = abs(ay);
z = abs(az);
temp = max(x, y);
maxs = max(temp, z);//取出x,y,z轴,最大的是哪个就处于哪个状态
if (maxs == y) {//y轴控制前进和后退ay最大16500 pwm范围0-255 16500/255=64.7
Serial.print("the max is y:"); Serial.println(ay / 65);
delay(500);
if (ay > 0) {//ay有正负,ay正的前进,负的后退,PWM调速值为abs(ay/65r)
carGo(abs(ay / 65));
} else {
carBack(abs(ay / 65));
}
}
else if (maxs == x){//控制小车转向
Serial.print("the max is x:"); Serial.println(ax / 65);
delay(500);
if(ax>0){
//ax有正负,ax正的前进,负的后退,PWM调速值为abs(ax/65r)
carLeft(abs(ax/65));
} else{
carRight(abs(ax/65));
}
}
else if (maxs == z) {//z轴控制小车停止
Serial.print("the max is z:"); Serial.println(az / 65);
delay(500);
carStop();
} else {
Serial.print("the max is x:"); Serial.println(ax / 65);
}
}
/**
* cargo(carspeed),carback(carspeed)
* 小车前进,后退,ENA高电平,
* IN1高电平,IN2低电平,电机正转
* IN1低电平,IN2高电平,电机反转
* PS:根据电机接线调整正反,正转可能是前进也可能是后退
*/
void carGo(int carspeed) {
//analogWrite(ENA_A, carspeed);
digitalWrite(ENA_A, HIGH);
digitalWrite(IN1_A, HIGH);
digitalWrite(IN2_A, LOW);
}
void carBack(int carspeed) {
//analogWrite(ENA_A, carspeed);
digitalWrite(ENA_A, HIGH);
digitalWrite(IN1_A, LOW);
digitalWrite(IN2_A, HIGH);
}
/**
* 小车停止
* ENA 高电平时,IN1与IN2相等,小车停止
* ENA 低电平时,IN1与IN2相等,IN1任意状态,小车停止
*/
void carStop() {
digitalWrite(ENA_A, HIGH);
digitalWrite(IN1_A, LOW);
digitalWrite(IN2_A, LOW);
}
/**
* carLEft(carspeed2),carRight(carspeed2)
* IN3高电平,IN4低电平,电机正转
* IN3低电平,IN4高电平,电机反转
* PS:根据电机接线调整正反,正转可能是左转弯也可能是右转弯
*/
void carLeft(int carspeed2){
digitalWrite(ENB_B,HIGH);
digitalWrite(IN3_B,HIGH);
digitalWrite(IN4_B,LOW);
}
void carRight(int carspeed2){
digitalWrite(ENB_B,HIGH);
digitalWrite(IN3_B,LOW);
digitalWrite(IN4_B,HIGH);
} |