Нужна помощь с кодированием arduino для проекта
Привет, я полный новичок в arduino и использую c/c++. Для этого проекта я должен был составить прецедент использования и на основе этого прецедента получить для него три датчика arduino.
Мой вариант использования-это умная трость, которая помогает слабовидящим, датчики включают в себя датчик движения PIR, ультразвуковой датчик и пьезоэлектрический датчик (дискообразный) и зуммер.
Как это должно работать :
1. Нажмите на пьезоэлектрический датчик
2.PIR-датчик проверяет наличие любых движущихся объектов
3.пока пир проверяет наличие движущихся объектов, активируются ультразвуковой датчик и зуммер.
4. Если движущийся объект улавливается пир и находится на определенном расстоянии от ультразвукового датчика, зуммер должен предупредить пользователя.
Я нашел код для ультразвукового датчика/зуммера, пир-датчика и пьезоэлектрического датчика.
Мне нужна помощь в том, как объединить три эскиза Arduino для датчиков.
Мне также нужна помощь и совет о том, как я могу заставить три датчика работать так, как я хочу, чтобы они работали, о чем говорилось выше.
Код для пьезоэлектрического датчика:
/* Knock Sensor * ---------------- * * Program using a Piezo element as if it was a knock sensor. * * We have to basically listen to an analog pin and detect * if the signal goes over a certain threshold. It writes * "knock" to the serial port if the Threshold is crossed, * and toggles the LED on pin 13. * * (cleft) 2005 D. Cuartielles for K3 * edited by Scott Fitzgerald 14 April 2013 */ int ledPin = 13; int knockSensor = 0; byte val = 0; int statePin = LOW; int THRESHOLD = 100; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { val = analogRead(knockSensor); if (val >= THRESHOLD) { statePin = !statePin; digitalWrite(ledPin, statePin); Serial.println("Knock!"); } delay(100); // we have to make a delay to avoid overloading the serial port }
Код для датчика движения PIR:
int calibrationTime = 30; long unsigned int lowIn; long unsigned int pause = 5000; boolean lockLow = true; boolean takeLowTime; int pirPin = 3; //the digital pin connected to the PIR sensor's output void setup(){ Serial.begin(9600); pinMode(pirPin, INPUT); digitalWrite(pirPin, LOW); //give the sensor some time to calibrate Serial.print("calibrating sensor "); for(int i = 0; i < calibrationTime; i++){ Serial.print("."); delay(1000); } Serial.println(" done"); Serial.println("SENSOR ACTIVE"); delay(50); } void loop(){ if(digitalRead(pirPin) == HIGH){ digitalWrite(ledPin, HIGH); //the led visualizes the sensors output pin state if(lockLow){ lockLow = false; Serial.println("---"); Serial.print("motion detected at "); Serial.print(millis()/1000); Serial.println(" sec"); delay(50); } takeLowTime = true; } if(digitalRead(pirPin) == LOW){ digitalWrite(ledPin, LOW); //the led visualizes the sensors output pin state if(takeLowTime){ lowIn = millis(); //save the time of the transition from high to LOW takeLowTime = false; //make sure this is only done at the start of a LOW phase } if(!lockLow && millis() - lowIn > pause){ lockLow = true; Serial.print("motion ended at "); //output Serial.print((millis() - pause)/1000); Serial.println(" sec"); delay(50); } } }
Код для ультразвукового датчика и зуммера:
#define trigPin 13 #define echoPin 12 int buzzer = 6; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(buzzer,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 < 100) // Checking the distance, you can change the value { // When the the distance below 100cm digitalWrite(buzzer,HIGH); } else { // when greater than 100cm digitalWrite(buzzer,LOW); } delay(500); }
Что я уже пробовал:
YouTube обучает, сайты и обсуждает с коллегами.