Как правильно выйти из цикла???
- Войдите на сайт для отправки комментариев
Ср, 19/02/2014 - 18:03
Помогите правильно выйти из цикла.
Есть робот, который при нажатии кнопки №1 на пульте, начинает ехать, и дальше управляется Ультразвуковым дальномером. Если есть препятствие, то он поворачивает, если путь свободен, то едет вперед.
Проблема! Как сделать так, чтобы при нажатии на кнопку №2 робот остановился и снова ожидал команду с пульта??? Помогите разобраться.
#include <IRremote.h> // это скачанная библиотека #define Trig 9 #define Echo 8 int RECV_PIN = 11; //вход ИК приемника IRrecv irrecv(RECV_PIN); decode_results results; unsigned int impulseTime=0; unsigned int distance_sm=0; // motor A int dirForw_A = 2; int dirBack_A = 3; // motor B int dirForw_B = 4; int dirBack_B = 5; int L13 = 13; //пины управляющие моторами, светодиодами, или реле, чем угодно. void setup() { irrecv.enableIRIn(); // включить приемник // Serial.begin(9600); pinMode(L13, OUTPUT); // назначаем пины как выходы pinMode(dirForw_A, OUTPUT); pinMode(dirBack_A, OUTPUT); pinMode(dirForw_B, OUTPUT); pinMode(dirBack_B, OUTPUT); pinMode(Trig, OUTPUT); //инициируем как выход pinMode(Echo, INPUT); //инициируем как вход } void loop() { if (irrecv.decode(&results)) { if (results.value == 0xFF52AD) { digitalWrite(Trig, HIGH); /* Подаем импульс на вход trig дальномера */ delayMicroseconds(10); // равный 10 микросекундам digitalWrite(Trig, LOW); // Отключаем impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса distance_sm=impulseTime/58; // Пересчитываем в сантиметры //Serial.println(distance_sm); // Выводим на порт } // начинаем движение if (distance_sm>30) // Если расстояние более 30 сантиметром { digitalWrite(L13, HIGH); digitalWrite(dirForw_A, HIGH); // Задаем направление вращения 1 двиг digitalWrite(dirBack_A, LOW); digitalWrite(dirForw_B, HIGH); // Задаем направление вращения 2 двиг digitalWrite(dirBack_B, LOW); } else { digitalWrite(L13, LOW); digitalWrite(dirForw_A, HIGH); // Задаем направление вращения 1 двиг digitalWrite(dirBack_A, LOW); digitalWrite(dirForw_B, LOW); // Задаем направление вращения 2 двиг digitalWrite(dirBack_B, HIGH); } delay(50); //пауза между повторами // } }
zhitomir82@gm, узнать скан-код кнопки номер два и создать цикл if. У вас в скетче код только одной кнопки.
Код второй кнопки есть. Просто, когда программа доходит сюда:
У меня инфракрасный приемник не принимает сигнал. И я не могу выйти из этого цикла.
Тут нет никакого цикла. Как думаете зачем этот метод?
Да, спасибо за подсказку. Проблема была в опустошении ресивера ИК сигнала.
Подскажите в чем разница инициализации ?? #define LED 13 и int LED = 13;
В том что #define просто подставляет в коде вместо LED число 13, в то время как int выделяет в оперативной памяти 2 байта под переменную.
Спасибо! Я только учусь.
Буду дальше разбираться.