首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino -组合草图

Arduino -组合草图
EN

Stack Overflow用户
提问于 2015-04-14 11:21:14
回答 1查看 879关注 0票数 1

新手编程和Arduino..我目前正在为我儿子的淘金热立体图做一个项目,增加了电子设备。据我所知,它不喜欢读取delay()代码。

请多多指教。谢谢。

我正在尝试组合两个草图;一个是随机波动的LEDS (充当矿井中的灯笼),另一个是拉动绳子上下的伺服装置(充当电梯滑轮)。

每个草图都能正常工作。我不确定在不使用"delay()“的情况下将两者结合起来的正确方法。

Leds示意图如下;

代码语言:javascript
复制
  /*random fluctuating leds*/

void setup() {
  // put your setup code here, to run once:
pinMode(12,LOW);
pinMode(11,LOW);
pinMode(10,LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
analogWrite(12, random(120)+135);
analogWrite(11, random(120)+135);
analogWrite(10, random(120)+135);
delay(random(100));
}

伺服扫描示意图如下;

代码语言:javascript
复制
/* Sweep
 by BARRAGAN <http://barraganstudio.com> 
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 http://arduino.cc/en/Tutorial/Sweep
*/ 

#include <Servo.h> 

Servo myservo;  // create servo object to control a servo 
                // twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position 

void setup() 
{ 
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
} 

void loop() 
{ 
  for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 180; pos>=0; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
} 
EN

回答 1

Stack Overflow用户

发布于 2015-04-14 14:21:04

通常,您可以使用以下代码替换delay(1000)

代码语言:javascript
复制
unsigned long interval=1000;  // the time we need to wait
unsigned long previousMillis=0; // millis() returns an unsigned long.

void setup() {
//...
}

void loop() {
 if ((unsigned long)(millis() - previousMillis) >= interval) {
 previousMillis = millis();
 // ... 
 }
}

所以你需要像下面这样的代码,我还没有测试过,但希望能给你一个起点:

代码语言:javascript
复制
#include <Servo.h> 

Servo myservo;  // create servo object to control a servo 
                // twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position 
int pos_direction=0; // motor direction

unsigned long interval=1000;  // the time we need to wait (analogwrite)
unsigned long previousMillis=0; // millis() returns an unsigned long.

unsigned long interval1=15;  // the time we need to wait (servo)
unsigned long previousMillis1=0; // millis() returns an unsigned long.

void setup() {
   interval = random(100);
   pinMode(12,LOW);
   pinMode(11,LOW);
   pinMode(10,LOW);
   myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
}

void loop() {
 if ((unsigned long)(millis() - previousMillis) >= interval) {
    previousMillis = millis();
    analogWrite(12, random(120)+135);
    analogWrite(11, random(120)+135);
    analogWrite(10, random(120)+135);
    interval = random(100);
 }

 if ((unsigned long)(millis() - previousMillis1) >= interval1) {
    previousMillis1 = millis();
      if(pos_direction==0){
         if(pos==180) pos_direction=1;
         else pos++;
      }
 else if(pos_direction==1){
    if(pos==0) pos_direction=0;
    else pos--;
 }
 myservo.write(pos); 
 // ... 
 }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29618597

复制
相关文章

相似问题

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