首页 > 解决方案 > 如何将两个 Adruino 草图合二为一

问题描述

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

方案一:

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

方案二:

#define trigPin 13
#define echoPin 12 
#define led 11
void setup() 
{ Serial.begin (9600); 
pinMode(trigPin, OUTPUT); 
pinMode(echoPin, INPUT); 
pinMode(led, OUTPUT); 
}
void loop() 
{ 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"); 
delay(500); 
}

谢谢!

标签: arduino

解决方案


您可以使用计时器,每 500 毫秒运行一次 loop2 第一个循环正常运行,但第二个循环每 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");
}

推荐阅读