C/C++
Помогите с кодом на ардуино
нужно совместить 2 кода в 1
Вот объединенный код на Arduino, который содержит функции из обоих исходных кодов:
```cpp
#include <IRremote.h>
#include <Servo.h>
long ir_rec;
IRrecv irrecv(3);
decode_results results;
volatile int DL;
volatile int DM;
volatile int DR;
void setup() {
irrecv.enableIRIn();
pinMode(2, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(6, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, INPUT);
myservo.attach(10);
DL = 0;
DM = 0;
DR = 0;
myservo.write(90);
}
void loop() {
handleIRRemote(); // Обработка ИК-пульта
handleObstacleAvoidance(); // Обработка избегания препятствий
}
void handleIRRemote() {
if (irrecv.decode(&results)) {
ir_rec = results.value;
irrecv.resume();
}
if (ir_rec == 0xFF629D) {
forward();
}
if (ir_rec == 0xFFA857) {
backward();
}
if (ir_rec == 0xFF22DD) {
turn_left();
}
if (ir_rec == 0xFFC23D) {
turn_right();
}
if (ir_rec == 0xFF30CF) {
rotate_left();
}
if (ir_rec == 0xFF7A85) {
rotate_right();
}
if (ir_rec == 0xFF02FD) {
stopp();
}
}
float checkDistance() {
digitalWrite(12, LOW);
delayMicroseconds(2);
digitalWrite(12, HIGH);
delayMicroseconds(10);
digitalWrite(12, LOW);
float distance = pulseIn(13, HIGH) / 58.00;
delay(10);
return distance;
}
void handleObstacleAvoidance() {
DM = checkDistance();
if (DM < 20) {
stopp();
delay(1000);
detectObstacleDistance();
if (DL < 50 || DR < 50) {
if (DL > DR) {
myservo.write(90);
rotate_left();
delay(500);
forward();
} else {
myservo.write(90);
rotate_right();
delay(500);
forward();
}
} else {
if (random(1, 10) > 5) {
myservo.write(90);
rotate_left();
delay(500);
forward();
} else {
myservo.write(90);
rotate_right();
delay(500);
forward();
}
}
} else {
forward();
}
}
void detectObstacleDistance() {
myservo.write(160);
for (int i = 1; i <= 3; i++) {
DL = checkDistance();
delay(100);
}
myservo.write(20);
for (int i = 1; i <= 3; i++) {
DR = checkDistance();
delay(100);
}
}
void forward() {
digitalWrite(2, LOW);
analogWrite(5, 200);
digitalWrite(4, HIGH);
analogWrite(6, 200);
}
void backward() {
digitalWrite(2, HIGH);
analogWrite(5, 255);
digitalWrite(4, LOW);
analogWrite(6, 255);
}
void turn
```cpp
#include <IRremote.h>
#include <Servo.h>
long ir_rec;
IRrecv irrecv(3);
decode_results results;
volatile int DL;
volatile int DM;
volatile int DR;
void setup() {
irrecv.enableIRIn();
pinMode(2, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(6, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, INPUT);
myservo.attach(10);
DL = 0;
DM = 0;
DR = 0;
myservo.write(90);
}
void loop() {
handleIRRemote(); // Обработка ИК-пульта
handleObstacleAvoidance(); // Обработка избегания препятствий
}
void handleIRRemote() {
if (irrecv.decode(&results)) {
ir_rec = results.value;
irrecv.resume();
}
if (ir_rec == 0xFF629D) {
forward();
}
if (ir_rec == 0xFFA857) {
backward();
}
if (ir_rec == 0xFF22DD) {
turn_left();
}
if (ir_rec == 0xFFC23D) {
turn_right();
}
if (ir_rec == 0xFF30CF) {
rotate_left();
}
if (ir_rec == 0xFF7A85) {
rotate_right();
}
if (ir_rec == 0xFF02FD) {
stopp();
}
}
float checkDistance() {
digitalWrite(12, LOW);
delayMicroseconds(2);
digitalWrite(12, HIGH);
delayMicroseconds(10);
digitalWrite(12, LOW);
float distance = pulseIn(13, HIGH) / 58.00;
delay(10);
return distance;
}
void handleObstacleAvoidance() {
DM = checkDistance();
if (DM < 20) {
stopp();
delay(1000);
detectObstacleDistance();
if (DL < 50 || DR < 50) {
if (DL > DR) {
myservo.write(90);
rotate_left();
delay(500);
forward();
} else {
myservo.write(90);
rotate_right();
delay(500);
forward();
}
} else {
if (random(1, 10) > 5) {
myservo.write(90);
rotate_left();
delay(500);
forward();
} else {
myservo.write(90);
rotate_right();
delay(500);
forward();
}
}
} else {
forward();
}
}
void detectObstacleDistance() {
myservo.write(160);
for (int i = 1; i <= 3; i++) {
DL = checkDistance();
delay(100);
}
myservo.write(20);
for (int i = 1; i <= 3; i++) {
DR = checkDistance();
delay(100);
}
}
void forward() {
digitalWrite(2, LOW);
analogWrite(5, 200);
digitalWrite(4, HIGH);
analogWrite(6, 200);
}
void backward() {
digitalWrite(2, HIGH);
analogWrite(5, 255);
digitalWrite(4, LOW);
analogWrite(6, 255);
}
void turn
Nikolai Kuzmihev
он обрезан
1+1=2
2+1/2
Похожие вопросы
- Подскажите как написать код для ардуино
- Подскажите почему не работает элементарнейший код на ардуино
- Помогите с кодом C++
- Помогите с кодом с++
- Помогите с кодом С++
- Помогите дописать код с массивом
- Помогите дописать код с массивом?
- Помогите с кодом с++
- Помогите дописать код с массивом C++
- Помогите дописать код с массивом c++