Arduino 如何将两个Adruino草图合并为一个

Arduino 如何将两个Adruino草图合并为一个,arduino,Arduino,我正在做一个项目,使用传感器(LDR和超声波)和使用Arduino软件的LED。我已经设法让灯泡工作,但是我想知道如何将两个不同的Arduino项目合并为一个。以下是两个不同的程序 方案1: int ldr=A0;//Set A0(Analog Input) for LDR. int value=0; void setup() { Serial.begin(9600); pinMode(3,OUTPUT); } void loop() { value=analogRead(ldr);//Rea

我正在做一个项目,使用传感器(LDR和超声波)和使用Arduino软件的LED。我已经设法让灯泡工作,但是我想知道如何将两个不同的Arduino项目合并为一个。以下是两个不同的程序

方案1:

int ldr=A0;//Set A0(Analog Input) for LDR.
int value=0;
void setup() {
Serial.begin(9600);
pinMode(3,OUTPUT);
}

void loop() {
value=analogRead(ldr);//Reads the Value of LDR(light).
Serial.println("LDR value is :");//Prints the value of LDR to Serial Monitor.
Serial.println(value);
if(value<300)
  {
    digitalWrite(3,HIGH);//Makes the LED glow in Dark.
  }
  else
  {
    digitalWrite(3,LOW);//Turns the LED OFF in Light.
  }
}
int ldr=A0//为LDR设置A0(模拟输入)。
int值=0;
无效设置(){
Serial.begin(9600);
pinMode(3,输出);
}
void循环(){
value=analogRead(ldr);//读取ldr(灯光)的值。
Serial.println(“LDR值为:”);//将LDR值打印到串行监视器。
Serial.println(值);

如果(值您可以使用计时器,每500毫秒运行一次循环2 第一个循环正常运行,但第二个循环每500毫秒运行一次

#define trigPin 13
#define echoPin 12
#define led 11
#define DELAY 500
int ldr = A0; //Set A0(Analog Input) for LDR.
int value = 0;
long timer = millis(); // a timer for timing 500 milliseconds

void setup() {
  Serial.begin(9600);
  pinMode(3, OUTPUT);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);
}

void loop() {

  value = analogRead(ldr); //Reads the Value of LDR(light).
  Serial.println("LDR value is :");//Prints the value of LDR to Serial Monitor.
  Serial.println(value);
  if (value < 300)
  {
    digitalWrite(3, HIGH); //Makes the LED glow in Dark.
  }
  else
  {
    digitalWrite(3, LOW); //Turns the LED OFF in Light.
  }

  if (millis() - timer >= DELAY ) {
    timer = millis();//reset timer
    loop2();
  }
}


void loop2() {
  long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration / 2) / 29.1;
  if (distance < 10)
  { digitalWrite(led, HIGH);
  }
  else {
    digitalWrite(led, LOW);
  }
  Serial.print(distance);
  Serial.println(" cm");
}
#定义trigPin 13
#定义echoPin 12
#定义led 11
#定义延迟500
int ldr=A0;//为ldr设置A0(模拟输入)。
int值=0;
long timer=millis();//计时500毫秒的计时器
无效设置(){
Serial.begin(9600);
pinMode(3,输出);
引脚模式(trigPin,输出);
pinMode(echoPin,输入);
引脚模式(led,输出);
}
void循环(){
value=analogRead(ldr);//读取ldr(灯光)的值。
Serial.println(“LDR值为:”);//将LDR值打印到串行监视器。
Serial.println(值);
如果(值<300)
{
digitalWrite(3,高);//使LED在黑暗中发光。
}
其他的
{
digitalWrite(3,低);//在灯光下关闭LED。
}
如果(毫秒()-计时器>=延迟){
计时器=毫秒();//重置计时器
loop2();
}
}
void loop2(){
长时间、远距离;
数字写入(trigPin,低电平);
延迟微秒(2);
数字写入(trigPin,高);
延迟微秒(10);
数字写入(trigPin,低电平);
持续时间=脉冲强度(echoPin,高);
距离=(持续时间/2)/29.1;
如果(距离<10)
{数字写入(led,高电平);
}
否则{
数字写入(led,低电平);
}
串行打印(距离);
序列号。打印号(“cm”);
}

如何组合它们完全取决于最终结果是什么,这一点还不清楚。但您可能只需要将每个
循环()函数拆分为另一个函数,并用一个名称说明它的作用,然后从
循环()调用它们
,可能只要经过适当的延迟,就只调用其中一个。您对原始代码做了什么,这是如何回答问题的?没有上下文的代码通常不是一个好的答案。更具体地说,仅仅将两个
循环()
卡在一起似乎是不对的。现在您
延迟(500)
在每个
模拟读取(ldr)
和相应的
数字写入(3,…)
之间,而该循环最初的跨度尽可能快,没有延迟。这就是为什么我说需要考虑将它们结合起来。感谢您的关注,我编辑了我的答案
#define trigPin 13
#define echoPin 12
#define led 11
#define DELAY 500
int ldr = A0; //Set A0(Analog Input) for LDR.
int value = 0;
long timer = millis(); // a timer for timing 500 milliseconds

void setup() {
  Serial.begin(9600);
  pinMode(3, OUTPUT);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);
}

void loop() {

  value = analogRead(ldr); //Reads the Value of LDR(light).
  Serial.println("LDR value is :");//Prints the value of LDR to Serial Monitor.
  Serial.println(value);
  if (value < 300)
  {
    digitalWrite(3, HIGH); //Makes the LED glow in Dark.
  }
  else
  {
    digitalWrite(3, LOW); //Turns the LED OFF in Light.
  }

  if (millis() - timer >= DELAY ) {
    timer = millis();//reset timer
    loop2();
  }
}


void loop2() {
  long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration / 2) / 29.1;
  if (distance < 10)
  { digitalWrite(led, HIGH);
  }
  else {
    digitalWrite(led, LOW);
  }
  Serial.print(distance);
  Serial.println(" cm");
}