Простая машинка с разными вариантами управления

Тема в разделе "Глядите, что я сделал", создана пользователем 3f(x), 27 сен 2019.

  1. 3f(x)

    3f(x) Нерд

    Код (C++):

    const int in2 = 2;
    const int in3 = 3;
    const int in5 = 5;
    const int in6 = 6;
    int val;
    void setup() {
        Serial.begin(9600);
        pinMode(in2, OUTPUT);
        pinMode(in3, OUTPUT);
        pinMode(in5, OUTPUT);
        pinMode(in6, OUTPUT);
    }

    void loop() {
        if (Serial.available())
      {
        val = Serial.read();
        if (val == 'w') {
        digitalWrite(in2, LOW);
        digitalWrite(in3, HIGH);
        digitalWrite(in5, HIGH);
        digitalWrite(in6, LOW);
    }
        if (val == 's') {
        digitalWrite(in2, HIGH);
        digitalWrite(in3, LOW);
        digitalWrite(in5, LOW);
        digitalWrite(in6, HIGH);    
    }
        if (val == 'a') {
        digitalWrite(in2, LOW);
        digitalWrite(in3, HIGH);
        digitalWrite(in5, HIGH);
        digitalWrite(in6, HIGH);
    }
        if (val == 'd') {  
        digitalWrite(in2, HIGH);
        digitalWrite(in3, HIGH);
        digitalWrite(in5, HIGH);
        digitalWrite(in6, LOW);

    }
        if (val == 'q') {  
        digitalWrite(in2, HIGH);
        digitalWrite(in3, HIGH);
        digitalWrite(in5, HIGH);
        digitalWrite(in6, HIGH);
    }
      }
    }

     
    [​IMG]
    управление по usb, через монитор порта
    вперед-w
    назад-s
    влево-a
    вправо-d
    стоп-q
    тема еще дополниться, позже
     
  2. issaom

    issaom Гуру

    Что за ней USB кабель волочится )) ?
     
  3. 3f(x)

    3f(x) Нерд

    что бы ты сделал интернет управление на raspberry pi, например
     
    Последнее редактирование: 27 сен 2019
  4. issaom

    issaom Гуру

    Я не "бы", а уже давно сделал ))) Управление прямо из Windows через встроенный в ноут блютуз )))

     
    Tomasina нравится это.
  5. 3f(x)

    3f(x) Нерд

    круто, а как на ней до магаза доехать ? который в 10км
     
  6. issaom

    issaom Гуру

    выкинуть блютуз и заменить на uart модули с радиусом действия 10км
     
  7. b707

    b707 Гуру

    я смотрю - даже код почти тот же :)
    3f(x) - признавайтесь. код у issaom стырили?
     
  8. 3f(x)

    3f(x) Нерд

    мин.стоимость 100$ ? а если магазин этот не работает, и до след. еще 15км ехать ?)
     
  9. issaom

    issaom Гуру

    А что есть кабель usb длиной 15км? Или wi-fi в каждых кустах через 100м ;-) и я не собирался ехать на своем танчике в магаз - это ваша придумка - расскажите как вы ее собрались реализовать ;-) я вам просто показал один из возможных примеров замены кабеля на что-то другое ;-)
     
  10. 3f(x)

    3f(x) Нерд

    b707 протестим уровень моей прокачки ?) каждый новый код с отличием в 65% от всех остальных версий умножении суммы на 2, первая версия всего то 100 руб.)
     
  11. b707

    b707 Гуру

    нифига не понял - кто кому платит? :)
     
  12. issaom

    issaom Гуру

    Ну у меня то код чуть чуть посложнее будет с проверкой наличия связи и переключениями скоростей + свое самописное Windows приложение
    Код (C++):
    int incomingByte = 0;   // для хранения полученного байта
    unsigned long currentTime;
    unsigned long OutTime;
    int EN1 = 3; //правый мотор
    int IN1 = 2; //правый мотор
    int IN2 = 4; //правый мотор

    int EN2 = 6; //правый мотор
    int IN3 = 5; //правый мотор
    int IN4 = 7; //правый мотор

    void setup() {
        Serial.begin(9600); // устанавливаем последовательное соединение
        pinMode(13, OUTPUT); //индикатор соединения !!!
        pinMode(EN1, OUTPUT);
        pinMode(IN1, OUTPUT);
        pinMode(IN2, OUTPUT);
        pinMode(8, OUTPUT); //освещение !!!

    }

    void loop() {

        currentTime = millis();

        if (Serial.available() > 0) {  //если есть доступные данные    
        incomingByte = Serial.read(); // считываем байт
        OutTime = currentTime;
        digitalWrite(13, LOW);

        if (incomingByte == 'W') // едем вперед !!!
        {
        Serial.print("W");

        digitalWrite(IN1, LOW);
        digitalWrite(IN2, HIGH);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, HIGH);
         
        }


        if (incomingByte == 'S') // едем назад !!!
        {
        Serial.print("S");

        digitalWrite(IN1, HIGH);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, LOW);

        }

        if (incomingByte == 'A') // едем влево !!!
        {
        Serial.print("A");

        digitalWrite(IN1, LOW);
        digitalWrite(IN2, HIGH);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, LOW);

        }

        if (incomingByte == 'D') // едем вправо !!!
        {
        Serial.print("D");

        digitalWrite(IN1, HIGH);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, HIGH);

        }


        if (incomingByte == '0') // нулевая передача !!!
        {
        Serial.print("0");
        analogWrite(EN1, 0);
        analogWrite(EN2, 0);
        }

        if (incomingByte == '1') // первая передача !!!
        {
        Serial.print("1");
        analogWrite(EN1, 90);
        analogWrite(EN2, 90);
        }

        if (incomingByte == '2') // вторая передача !!!
        {
        Serial.print("2");
        analogWrite(EN1, 131);
        analogWrite(EN2, 131);
        }

        if (incomingByte == '3') // третья передача !!!
        {
        Serial.print("3");
        analogWrite(EN1, 172);
        analogWrite(EN2, 172);
        }

        if (incomingByte == '4') // четвертая передача !!!
        {
        Serial.print("4");
        analogWrite(EN1, 203);
        analogWrite(EN2, 203);
        }

        if (incomingByte == '5') // пятая передача !!!
        {
        Serial.print("5");
        analogWrite(EN1, 255);  
        analogWrite(EN2, 255);
        }

        if (incomingByte == 'N') // свет вкл !!!
        {
        Serial.print("N");
        digitalWrite(8, HIGH);
         
        }

        if (incomingByte == 'M') // свет выкл !!!
        {
        Serial.print("M");
        digitalWrite(8, LOW);
        }

     
        if (incomingByte == '!') // служебный символ !!!
        {
        Serial.print("!");
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
        }
        }
    // если время текущее отличается больше чем на 500 все вырубаем !!!

      if(currentTime >= (OutTime + 500))
      { // сравниваем текущий таймер с переменной loopTime + 500
      //останавливаем моторы !!!
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
      analogWrite(EN1, 0);
      analogWrite(EN2, 0);
      //Зажигаем светодиод что связь пропала
      digitalWrite(13, HIGH);
      //Гасим освещение !!!
      digitalWrite(8, LOW);

      }
     
    }
    А что касательно самих кнопок - то в интернете действительно можно накопать такой пример именно с этими кнопками )))
     
  13. 3f(x)

    3f(x) Нерд

    raspberry pi https://ru.wikipedia.org/wiki/Raspberry_Pi
    имеет вход для usb модема, можно и от телефона запитать нетом. покрытие оператора надо смотреть.
    радиоаппаратура в пути,(тоже дешевая) через 3 дня смогу протестить, дистанция км, схемы подкл. не нашел, попробую ее сделать позже, способ через радио, буд позже.
    а по нету, через распбери как вариант.
     
  14. b707

    b707 Гуру

    а тогда ясно, вот оно откуда :)
     
  15. 3f(x)

    3f(x) Нерд

    я те 1 версию кода который отличается на 65% от всех предыдущих, и выполняет управление машиной 5 командами, ты мне 100 с начало, еще версия, еще 200, и т.д.
     
  16. SergeiL

    SergeiL Оракул Модератор

    Это на каком языке? Си? :)
     
  17. 3f(x)

    3f(x) Нерд

    да ток на нем
     
  18. SergeiL

    SergeiL Оракул Модератор

    Вроде Си хорошо знаю, но не понял ничего :)
     
  19. NikitOS

    NikitOS Король шутов Администратор

  20. 3f(x)

    3f(x) Нерд

    будем играть в игру ?) я вам код для ардуино, вы мне бонус по описанной ранее системе)
    в начале то всего 100 руб.)