Помогите отредактировать код
- Войдите на сайт для отправки комментариев
Чт, 15/09/2016 - 09:32
Здравствуйте. Написал скетч для управления мотором постоянного тока через ИК датчик. Работает. Но вот теперь хочу внести некоторые изменения. Мне нужно чтобы при нажатии на одну из кнопок на пульте мотор начинал работать, а как только отпускаю кнопку - прекращал. Вот схема подключения:
В моём скетче, при поступлении сигнала на датчик, мотор вращается непрерыно - до тех пор пока не поступит другая команда.
#include <IRremote.h> #include <IRremoteInt.h> #include <AFMotor.h> IRrecv irrecv(2); // указываем вывод, к которому подключен приемник decode_results results; // создаем объект motor №2, ШИМ 64 кГц AF_DCMotor motor2(2, MOTOR12_64KHZ); void setup() { irrecv.enableIRIn(); // запускаем прием Serial.begin(9600); // устанавливаем скорость передачи по посл. порту 9600 бод motor2.setSpeed(200); // устанавливаем скорость вращения 200/255 } void loop() { if ( irrecv.decode( &results )) { // если данные пришли switch ( results.value ) { case 0xFD00FF: // нажимаем кнопку "1" motor2.run(FORWARD); // вращение вперед break; case 0xFD807F: // нажимаем кнопку "2" motor2.run(BACKWARD); // в другую сторону break; } irrecv.resume(); // принимаем следующую команду } }
Я пытался сам внести изменения, но программа бракует мои труды.
#include <IRremote.h> #include <IRremoteInt.h> #include <AFMotor.h> IRrecv irrecv(2); // указываем вывод, к которому подключен приемник decode_results results; // создаем объект motor №2, ШИМ 64 кГц AF_DCMotor motor2(2, MOTOR12_64KHZ); char BUTTON_1 = "FD00FF"; char BUTTON_2 = "FD807F"; void setup() { irrecv.enableIRIn(); // запускаем прием Serial.begin(9600); // устанавливаем скорость передачи по посл. порту 9600 бод motor2.setSpeed(200); // устанавливаем скорость вращения 200/255 } void loop() { if (digitalRead(BUTTON_1) == HIGH) { // нажимаем кнопку "1" digitalWrite(motor2.run == FORWARD); // вращение вперед } else { digitalWrite(motor2.run == RELEASE); } if (digitalRead(BUTTON_2) == HIGH) { // нажимаем кнопку "2" digitalWrite(motor2.run == BACKWARD); // вращение назад } else { digitalWrite(motor2.run == RELEASE); } irrecv.resume(); // принимаем следующую команду }
программа бракует мои труды.
Не объясните в чём проблема? Самим догадываться?
Кстати, а что это у Вас в строках 11 и 12. Описано как одиночный символ, а присваивается целая строка. Это для чего? Что Вы хотели этими строками сказать?
Не объясните в чём проблема? Самим догадываться?
Вот проблема:
Ещё мне сказали что "digitalRead" считывает состояние пина, т.е. применим только для физически подключенных проводами кнопок. Для команд с пульта это не подходит
Я хотел этим сказать то, что мне нужно задать программе переменные в виде сигналов "FD00FF" и "FD807F".
Ещё мне сказали что "digitalRead" считывает состояние пина, т.е. применим только для физически подключенных проводами кнопок. Для команд с пульта это не подходит
Ну, это ещё раз подтвердило мою мысль про мешанину в Вас в голове. Давайте, Вы будете делать, как я сказал. Начните со словесного описания алгоритма.
Хорошо. У меня есть ардуино, мотор шилд, мотор постоянного тока, ИК датчик и пульт к нему. Я хочу с помощью пульта управлять мотором, но так чтобы при нажатии на одну кнопку он вращался в нужном направлении, а при отпускании прекращал работу. Представьте себе процесс управления радиоуправляемой машинкой. Мне нужно что-то подобное, но пока что на ИК датчике.
Всё подключил как показано на этом рисунке:
Схема работает, проверял на этом скетче:
[/quote]
[/quote]
Так будет правильнее?
Вот алгоритм, как вы просили:
Ага, ну это уже лучше, но надо дальше работать. Там нужно не "жмём кнопку", а "полуен сигнал от ПДУ". Правильно?
Алгоритм надо обязательно допилить, но, похоже, в Вашем сулчае надо начинать даже не с этого.
Скажите, правильно ли я понимаю, что Вы хотите нажимать кнупку на ПДУ, который передаёт инфракрасный сигнал и, пока она нажата, вращать двигатель, а когда её отпустили, двигатель останваливать. Так?
Если так, то Вам для начала (прежде, чем придумывать алгоритм) неплохо бы изучить особенности своего оборудования. Я не знаю, что у Вас за ПДУ, но скорее всего (я их много видел) там всё не так просто. Может быть Вам повезло, но это большая редкость.
Итак, запустите вот такой скетч
Он говорит когда, по мнению Ардуины, кнопка на Вашем ПДУ нажата, а когда отпущена.
Запустите его и нажмите кнопку, подержите её нажатой с полминутки, любуясь в это время экраном сериал-монитора. отпустите, ещё нажмите.
Почти уверен, что результат Вас несколько удивит и Вы поймёте, что алгоритм должен быть совсем другим. Может, конечно, Вам повезёт, но я сомневаюсь.
В любом случае. скажите мне каков результат, всё ли в порядке.