首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >同时在两个针脚上使用arduino色调功能

同时在两个针脚上使用arduino色调功能
EN

Stack Overflow用户
提问于 2020-11-18 13:34:54
回答 1查看 70关注 0票数 0

我正在尝试用Arduino Mega制造一辆智能汽车,有时我需要在特定的时间打开两个后轮。有人告诉我,我可以使用音调设置“数字高”时间,但由于我需要它们同时工作,有没有办法为一条线上的两个引脚设置音调,或者做点什么呢?

谢谢你的帮助。

代码语言:javascript
运行
复制
#include <Servo.h>
/////////////////////
Servo servo;
/////////////////////
int trig = 12;
int echo = 13;
long duration;
int  distance;
int dist_right;
int dist_left;
int ang = 90;
unsigned int value = 255;
unsigned long tone_time = 3000;
float forward_time;
/////////////////////
int ena = 35;
int in1 = 7;
int in2 = 6;
int in3 = 5;
int in4 = 4;
int enb = 47;
/////////////////////
void setup() 
{
  Serial.begin(9600);
  servo.attach(22);
  pinMode(trig, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  pinMode(ena, OUTPUT);
  pinMode(enb, OUTPUT);
  pinMode(echo, INPUT);

  digitalWrite(ena, HIGH);
  digitalWrite(enb, HIGH);

}
void loop() {
    servo.write(90);
    distance = dist();
    if(distance<=15)
    {
       for(ang;ang>=0;ang-=2)
       {
        servo.write(ang);
        delay(30);
       }
       dist_right = dist();
       Serial.println(dist_right);
       for(ang;ang<=180;ang+=2)
       {
        servo.write(ang);
        delay(30);
       }
       dist_left = dist();
       Serial.println(dist_left);
       for(ang;ang>=90;ang-=2)
       {
        servo.write(ang);
        delay(30);
       }
       if(dist_right>=dist_left)
       {
        tone(in3, value, tone_time);
       }
       else if(dist_right<dist_left)
       {
        tone(in1, value, tone_time);
       }
       servo.write(90);
       ang=90;
    }
    else{
      forward_time=distance/25;
      tone((in1,in3), value, forward_time);
    }
}
int dist(){ 
  digitalWrite(trig, LOW); 
  delayMicroseconds(2);
  digitalWrite(trig, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  duration = pulseIn(echo, HIGH); 
  distance= duration*0.034/2;
  return distance;
}
EN

回答 1

Stack Overflow用户

发布于 2020-11-18 14:06:37

我有99.99%的把握,如果你一个接一个地转动,你的马达不会感觉到时差。试一下最简单的例子,你就会明白了。

代码语言:javascript
运行
复制
// Define your wheel control pins (use same as in your mega)
const int motor1Pin = 5;
const int motor1Pin = 6;

// somewhere in setup method
outputMode(motor1Pin, OUTPUT);
outputMode(motor2Pin, OUTPUT);

// Create function to turn motors and remember the time
unsigned long turnMotorsOn(int seconds) {
    // turn motors ant return time when they should be stopped
    return millis() + seconds * 1000;
}

// In you code check if it is time to turn off
if (millis() > timeWhenTurnMotorsOff) {
    // turn them off
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64887638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档