ntwhq 发表于 2016-11-18 23:08

Altar小车Mixly图形化编程1_超声波避障

本帖最后由 ntwhq 于 2016-12-17 16:09 编辑

          Altar小车的两只电机分别使用D3、D5和D6、D9驱动L9110模块,由于程序中要使用舵机类库,而舵机类库和D9、D10的模拟输出都使用了单片机的定时器T1,使用舵机类库后D9、D10就不能作模拟输出使用了(没有PWM输出),因此我将D5、D6作模拟输出,分别控制两只电机的速度,D3、D9作数字输出,分别控制两只电机的旋转方向。
    考虑到这款小车主要是面向学校的,我使用了Mixly图形化编程软件,同时附了它生成的文本代码,请大家指点。

    注意:超声波模块使用了D7、D8,两块红外避障模块也使用了D7、D8,所以使用超声波模块时要拔下两块红外避障模块的插头。
   
子程序:
         


主程序:
   

程序文件:

特别提醒:程序使用Mixly0.97编写,用Mixly0.97上传后工作正常,如果使用Mixly0.99上传,则工作不正常,原因不明。

#include <Servo.h>// 前进
void forward(long x) {
digitalWrite(3,LOW);
analogWrite(5,x);
digitalWrite(9,LOW);
analogWrite(6,x);
}

// 后退
void back(long x) {
digitalWrite(3,HIGH);
analogWrite(5,(255 - x));
digitalWrite(9,HIGH);
analogWrite(6,(255 - x));
}

// 停止
void stop() {
digitalWrite(3,LOW);
analogWrite(5,0);
digitalWrite(9,LOW);
analogWrite(6,0);
}

// 右转
void turnright(long x) {
digitalWrite(3,LOW);
analogWrite(5,x);
digitalWrite(9,HIGH);
analogWrite(6,(255 - x));
}

// 左转
void turnleft(long x) {
digitalWrite(3,HIGH);
analogWrite(5,(255 - x));
digitalWrite(9,LOW);
analogWrite(6,x);
}

Servo servo_10;
float checkdistance_7_8() {
digitalWrite(7, LOW);
delayMicroseconds(2);
digitalWrite(7, HIGH);
delayMicroseconds(10);
digitalWrite(7, LOW);
float distance = pulseIn(8, HIGH) / 58.00;
delay(10);
return distance;
}


long M;
// 测前方距离
void middleDistance() {
servo_10.write(90);
delay(100);
M = checkdistance_7_8();
}

long L;
// 测左方距离
void leftDistance() {
servo_10.write(170);
delay(150);
L = checkdistance_7_8();
}

long R;
// 测右方距离
void rightDistance() {
servo_10.write(10);
delay(150);
R = checkdistance_7_8();
}



void setup()
{
pinMode(3, OUTPUT);
pinMode(9, OUTPUT);
servo_10.attach(10);
pinMode(7, OUTPUT);
pinMode(8, INPUT);
}

void loop()
{
middleDistance();
if (M < 20) {
    stop();
    delay(50);
    back(120);
    delay(200);
} else {
    if (M > 40) {
      forward(160);
      delay(200);
    } else {
stop();
      delay(50);
leftDistance();
      rightDistance();
      if (L > R) {
      turnleft(120);
      delay(300);
      stop();
      delay(50);
      } else {
      turnright(120);
      delay(300);
stop();
      delay(50);
       }
    }
}
}
Altar小车Mixly图形化编程2_巡迹

Altar小车Mixly图形化编程3_红外遥控







jackten 发表于 2016-11-19 10:14

请问楼主用的是什么编译插件?怎么会有中文的?

ntwhq 发表于 2016-11-19 10:18

本帖最后由 ntwhq 于 2016-11-19 10:20 编辑

jackten 发表于 2016-11-19 10:14
请问楼主用的是什么编译插件?怎么会有中文的?
北师大的Mixly:http://mixly.cn/bnu-maker/mixly-arduino-win

jackten 发表于 2016-11-19 11:05

ntwhq 发表于 2016-11-19 10:18
北师大的Mixly:http://mixly.cn/bnu-maker/mixly-arduino-win

谢谢                  

vickywong 发表于 2016-11-19 12:15

D7D8是不能用了。D3569模拟输出后,D10接舵机好像还能用啊

ntwhq 发表于 2016-11-19 12:20

本帖最后由 ntwhq 于 2016-11-19 12:31 编辑

vickywong 发表于 2016-11-19 12:15
D7D8是不能用了。D3569模拟输出后,D10接舵机好像还能用啊
使用舵机和使用模拟输出不是引脚间的冲突,是舵机类库和D9、D10模拟输出的冲突,如果舵机不使用类库,直接写驱动函数,则不存在这一问题。在这个控制小车中如果避开使用D9控制电机,就可以避免冲突问题。

jiashe2011 发表于 2017-5-12 00:38

学习学习!!!!

龙神号 发表于 2018-3-23 11:51

这个mixly软件用过之后发现它非常好用,赞!
页: [1]
查看完整版本: Altar小车Mixly图形化编程1_超声波避障