Arduino - 结合草图 [英] Arduino - combine sketches

查看:21
本文介绍了Arduino - 结合草图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

编程和 Arduino 的新手..我目前正在为我儿子的淘金热西洋镜制作一个项目,其中增加了电子设备.据我了解,它不喜欢阅读 delay() 代码.

New to programming and Arduino.. I'm currently making a project for my son's Gold Rush diorama with added electronics. From my understanding, it does not like reading delay() codes.

请,任何建议表示赞赏.谢谢你.

Please, any suggestions are appreciated. Thank you.

我正在尝试合并两个草图;具有随机波动 LED 的一种(充当矿井中的灯笼)另一个是伺服器,可以上下拉动绳子(充当升降机滑轮)

I'm trying to combine two sketches; One that has random fluctuating LEDS (acts as the lanterns in the mine shafts) The other, a servo that pulls a string up and down (acts as an elevator pulley)

每个草图都可以正常工作.我不确定在不使用延迟()"的情况下将两者结合起来的正确方法

Each sketch alone works properly. I'm not sure the proper way to combine the two without using "delay()"

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

推荐答案

一般情况下,您可以将 delay(1000) 替换为以下代码:

In general you can replace delay(1000) with the following code:

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

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

So you need something like the following code, that I have not tested, but hopefully gives you a starting point:

#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 - 结合草图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆