motor shield и 433mhz пульт.

Тема в разделе "Arduino & Shields", создана пользователем Safari15, 18 апр 2019.

  1. Safari15

    Safari15 Нуб

    Добрый день. Буду признателен если поможете разобраться.
    Есть UNO c motor shield, к нему подключены два простых двигателя к разъемам M1 и M2.
    К ардуино к цифровому порту 2 подключен приемник на 433 МГц.
    Так же есть пульт от реле с двумя кнопками тоже работающий на 433 МГц.

    Для управления двигателями, этим пультом, использую код:


    Код (C++):
    #include <RCSwitch.h>
    RCSwitch mySwitch = RCSwitch();
    #include <AFMotor.h>
    AF_DCMotor motor1(1);
    AF_DCMotor motor2(2);
    int value;

    void setup() {
      mySwitch.enableReceive(0);
      Serial.begin(115000);
      motor1.setSpeed(255);
      motor2.setSpeed(255);
      motor1.run(RELEASE); // stop
      motor2.run(RELEASE); // stop
    }

    void loop () {
    if( mySwitch.available() ){
      value = mySwitch.getReceivedValue();
      Serial.println(value);
        if (value  == 5568 ) { //Вперед
          motor1.run(FORWARD);
          motor2.run(FORWARD);;
          }      
       
        else if (value  == 5424) { //Назад
         motor1.run(BACKWARD);
         motor2.run(BACKWARD);
          }  
    В данном случае двигатели меняют направление движения, но работают постоянно.
    Можно ли сделать так, чтобы двигатели работали только при удержании кнопки на пульте и останавливались если кнопку отпустить?
     
    Последнее редактирование: 18 апр 2019
  2. Belkin

    Belkin Гик

    У вас использованы только команды "Вперед" (5568) и "Назад" (5424).
    Добавьте обработку команды "Стоп", где программа будет это выполнять при определенном значении.
    Наверняка этот обработчик есть в используемой библиотеке.
    Значение определите тем же путем, что и два имеющихся определяли.
     
  3. b707

    b707 Гуру

    непосредственно сделать то, что вы хотите - нельзя. Пульты не посылают сигнал постоянно, они делают это периодически.Поэтому единственный алгоритм, который подходит под вашу задачу - запрограммировать моторы так, чтобы они останавливались, если сигнал не пришел в течении последних, скажем, 200 миллисекунд
     
  4. Safari15

    Safari15 Нуб

    Спасибо за ответ, но вся суть вопроса в том, как в данном случае избавиться от необходимости в третьей кнопке "стоп". Дело в том, что я пробовал разные варианты написания и другие библиотеки для приемника 433 Мгц, но не могу разобраться, как написать условие, что бы при нажатии кнопки пульта двигатели крутились до того момента, как я отпустил кнопку.

    Например при установке данного набора на колесную платформу где один двигатель с одной стороны и один с другой, необходимо, что бы при нажатии кнопки, платформа двигалась в определенную сторону, только до того момента пока кнопка зажата.
     
  5. Safari15

    Safari15 Нуб


    Учитывая сказанное Вами, буду признателен если кто нибудь поможет реализовать.
     
  6. Belkin

    Belkin Гик

    Не смешивайте понятия "кнопка" и "команда".
    Отсутствие "нажатий" кнопок "Вперед" или "Назад" - это и есть команда "Стоп".
    Телевизор что делает, если пульт не трогать ? ;)
     
  7. Belkin

    Belkin Гик

    В данном случае под "пульт" понимается обычный радиомодуль 433 МГц.
     
  8. parovoZZ

    parovoZZ Гуру

    Элементарно - нажатие кнопки - одна посылка, отпускание кнопки - другая.