|
本帖最后由 wsy0315 于 2013-2-24 17:43 编辑
上个代码,这代码不能用,搜集了好久资料,可还是找不到蓝牙发送指令控制arduino动作的头绪。希望大侠能帮助下
先说说我的思路吧,就是制作一台蓝牙遥控的挖掘机,关键是要每个关节都能独立操作和PWM。
代码里所有的控制动做都能实现了,但是就是蓝牙控制实在搞不定!
[code]int val1;
int val2;
int val3;
int val4;
int val5;
int val6;
int val11;
int val22;
int EN1 = 6;
int EN2 = 9;
int EN3 = 11;
int EN4 = 3;
int EN5 = 5;
int EN6 = 10;
void motor(char IN1, char IN2, char EN, char state, int val)
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(EN, OUTPUT);
if(state == 1)
{
analogWrite(EN, val);
digitalWrite(IN1, 0);
digitalWrite(IN2, 1);
}
else if(state == 2)
{
analogWrite(EN, val);
digitalWrite(IN1, 1);
digitalWrite(IN2, 0);
}
else if(state == 0)
{
analogWrite(EN, 0);
digitalWrite(IN1, 0);
digitalWrite(IN2, 0);
}
}
//车轮,小臂,挖斗同一摇杆,按键可以考虑控制车灯。。。
void digital_11() //车轮前进
{
motor(4, 5, 6, 1, val1); //左轮电机
motor(7, 8, 9, 1, val2); //右轮电机
}
void digital_22() //车轮后退
{
motor(4, 5, 6, 2, val1);
motor(7, 8, 9, 2, val2);
}
void digital_31() //小臂前
{
motor(13, 12, 11, 1, val3); //小臂电机
}
void digital_32() //小臂后
{
motor(13, 12, 11, 2, val3);
}
void digital_41() //挖斗伸
{
motor(1, 2, 3, 1, val4); //挖斗电机
}
void digital_42() //挖斗缩
{
motor(1, 2, 3, 2, val4);
}
//旋转,大臂,按键同一摇杆
void digital_51() //旋转左
{
motor(4, 5, 6, 1, val5); //旋转电机
}
void digital_52() //旋转右
{
motor(4, 5, 6, 2, val5);
}
void digital_61() //大臂升
{
motor(4, 5, 6, 1, val6); //大臂电机
}
void digital_62() //大臂降
{
motor(4, 5, 6, 2, val6);
}
void setup()
{
Serial.begin(9600);
}
void loop()
{
int key1 = digitalRead(A0); //旋转,大臂的摇杆按键
if (key1 == 1)
{
int val3 = analogRead(A1);
val3 = map(val3, 0, 1023, -255, 255);
if (val3 > 0) //小臂方向转换
digital_31();
else
digital_32();
int val4 = analogRead(A2);
val4 = map(val4, 0, 1023, -255, 255);
if (val4 > 0) //挖斗方向转换
digital_41();
else
digital_42();
analogWrite(EN3, abs(val3)); //小臂PWM
analogWrite(EN4, abs(val4)); //挖斗PWM
}
else
{
int val11 = analogRead(A1);
val11 = map(val11, 0, 1023, -254, 256); //适配Y轴,应该是255
int val22 = analogRead(A2);
val22 = map(val22, 0, 1023, -249, 261); //适配x轴
val1 = abs(val11) + val22;
val1 = constrain(val1, 0, 255);
val2 = abs(val11) - val22;
val2 = constrain(val2, 0, 255);
if (val11 > 0) //车轮方向转换
digital_11();
else
digital_22();
analogWrite(EN1, val1); //车轮PWM
analogWrite(EN2, val2);
}
int val5 = analogRead(A3);
val5 = map(val5, 0, 1023, -255, 255);
if (val5 > 0) //旋转方向转换
digital_31();
else
digital_32();
int val6 = analogRead(A4);
val6 = map(val6, 0, 1023, -255, 255);
if (val6 > 0) //大臂方向转换
digital_41();
else
digital_42();
analogWrite(EN5, abs(val5)); //旋转PWM
analogWrite(EN6, abs(val6)); //大臂PWM
if (Serial.available() > 0);
Serial.println("wsy0315");
Serial.println(val3);
Serial.println(val4);
Serial.println("wsy0315");
解决方法见Ansifa 的帖子:Arduino学习笔记A6(补充) - 在串口读取多个字符串,并且转换为数字数组
http://www.geek-workshop.com/thread-260-1-1.html |
|