Arduino的 - 结合草图(Arduino - combine sketches)

2019-10-22 15:03发布

新的编程和Arduino的..我目前正在为我儿子的淘金西洋镜添加了电子项目。 从我的理解,它不喜欢读延迟()代码。

请任何建议表示赞赏。 谢谢。

我想两个草图结合起来; 一个有随机波动的LED的其他(充当在矿井的灯笼),即向上和向下拉动一个字符串(充当电梯滑轮)的伺服

每个单独的草图正常工作。 我不知道正确的方式将两者结合起来,而不使用“延迟()”

LED下素描;

  /*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));
}

下面伺服扫描草图;

/* 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 
  } 
} 

Answer 1:

一般来说,你可以取代delay(1000)用下面的代码:

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();
 // ... 
 }
}

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

#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); 
 // ... 
 }
}


文章来源: Arduino - combine sketches
标签: arduino