Altar小车Mixly图形化编程1_超声波避障-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 27446|回复: 7

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

[复制链接]
发表于 2016-11-18 23:08 | 显示全部楼层 |阅读模式
本帖最后由 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,所以使用超声波模块时要拔下两块红外避障模块的插头。
   
子程序:
    01.png          02.png


主程序:
    03.png

程序文件: 超声波避障.rar (1.17 KB, 下载次数: 480)

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

[mw_shl_code=cpp,true]#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);
       }
    }
  }
}[/mw_shl_code]
Altar小车Mixly图形化编程2_巡迹

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







发表于 2016-11-19 10:14 | 显示全部楼层
请问楼主用的是什么编译插件?怎么会有中文的?
 楼主| 发表于 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
发表于 2016-11-19 11:05 | 显示全部楼层
ntwhq 发表于 2016-11-19 10:18
北师大的Mixly:http://mixly.cn/bnu-maker/mixly-arduino-win

谢谢                  
发表于 2016-11-19 12:15 | 显示全部楼层
D7D8是不能用了。D3569模拟输出后,D10接舵机好像还能用啊
 楼主| 发表于 2016-11-19 12:20 | 显示全部楼层
本帖最后由 ntwhq 于 2016-11-19 12:31 编辑
vickywong 发表于 2016-11-19 12:15
D7D8是不能用了。D3569模拟输出后,D10接舵机好像还能用啊

使用舵机和使用模拟输出不是引脚间的冲突,是舵机类库和D9、D10模拟输出的冲突,如果舵机不使用类库,直接写驱动函数,则不存在这一问题。在这个控制小车中如果避开使用D9控制电机,就可以避免冲突问题。
发表于 2018-3-23 11:51 | 显示全部楼层
这个mixly软件用过之后发现它非常好用,赞!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-28 02:21 , Processed in 0.081279 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表