Необходима помощь в решении проблемы с AlphaBot.

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Electronic troops, 27 фев 2019.

  1. Уважаемые форумчане! Необходима помощь в проверке скетча. Я новичок в программировании и могу не заметить банальную ошибку.
    Есть идея сделать управляемый бот с управлением с пульта ДУ на платформе AlphaBot и Ардуино.
    Написал программу, загрузил в Ардуино и ... все работает не так как ожидалось.
    Бот выполняет только первый цикл if() причем в любом случае. То есть при любом принятом значении условие верно. Любое нажатие кнопки на пульте = езда назад. Если изменить Backward на Forward, то он поедет вперед.
    Проверил скетч, библиотеки (для работы моторов нужна библиотека), все вроде верно.
    Сам скетч:
    Код (C++):
    #include "IRremote.h"
    #include "AlphaBot.h"

    AlphaBot Car1 = AlphaBot();
    IRrecv irrecv(4); // указываем вывод, к которому подключен приемник
    decode_results results;
    int resul;

    void setup() {
      Serial.begin(9600); // выставляем скорость COM порта
      irrecv.enableIRIn(); // запускаем прием
      Car1.SetSpeed(250);
    }

    void loop() {
      if ( irrecv.decode( &results )) { // если данные пришли
        Serial.println(results.value, HEX);
        if (results.value = 0xF7QE1) {
          Car1.Backward(1000);
          irrecv.resume();
        }
        if (results.value = 0xF6TE4) {
          Car1.Forward(1000);
          irrecv.resume();
        }
        if (results.value = 0xF4AB5) {
          Car1.Left(1000);
          irrecv.resume();
        }
        if (results.value = 0xFF18E7) {
          Car1.Right(1000);
          irrecv.resume();
        }
      }
    }
     
  2. Эта конструкция присваивает 0xF7QE1 в results.value .
    Операция сравнения это ==
     
    b707, DetSimen и Daniil нравится это.
  3. parovoZZ

    parovoZZ Гуру

    ты б не лез. Алгоритм же не представлен? Он пишет, что
     
  4. ostrov

    ostrov Гуру

    В любом случае конструкция if(results.value= 0xF7QE1) хрень полная.
     
  5. parovoZZ

    parovoZZ Гуру

    Почему? Нельзя присвоить результат внутри if?
     
  6. DetSimen

    DetSimen Guest

    потомушта 'Q' в 0xF7QE1 к шешнацатеричным цыфрам никак не относица.
    ТС тупо врет, что "все работает", у него половина HEX констант неправильные, типа 0xF6TE4.
    Ну и оператор присваивания в условии, всегда true, если присваиваешь не 0

    Какойта тролль, я щитаю.
     
    b707, ostrov и Airbus нравится это.
  7. parovoZZ

    parovoZZ Гуру

    а с какого бадуна ты взял, что цыфры, а не символы?
     
  8. Airbus

    Airbus Радиохулиган Модератор

  9. DetSimen

    DetSimen Guest

    Так што, ТС, на коллоквиуме мы решили
    ТыПиздишь.png
     
  10. ИгорьК

    ИгорьК Гуру

    Выпьем рассольчика и увидим, что если компилятор пропустил этот скетч, и превратил странные 0xF7QE1 в "0xF7QE1" то в первом условии получается Тру и машинка всегда едет назад.
     
  11. b707

    b707 Гуру

    это так, только не очень понятно, почему компилятор такое пропустит. Какой тип у переменной results.value ? - разве ей можно присвоить константную строку?

    Electronic troops, ваш код - целая коллекция багов и ляпов. Тут "исправлением одной банальной ошибки" не обойтись.
     
  12. ИгорьК

    ИгорьК Гуру

    Я странный, привык людям верить до тех пор, пока они не представят достаточных доказательств обратного.
    Поэтому предположил более менее разумное объяснение.
     
  13. Arkad_snz

    Arkad_snz Гик

    Программирование не решает задачу "Почему нельзя...?".
    Задача программы - реализовать требуемое алгоритмом с соблюдением правил синтаксиса.
    У вас, что в алгоритме указано "присвоить ...", и "если результат присвоения - ИСТИНА, то ..."?
    Нет? А, реализуете вы именно это!
    Если программа делает нечто вне алгоритма (так написана), то результат ее работы - непредсказуем.
    Вам то надо?
     
    Последнее редактирование: 28 фев 2019
  14. Airbus

    Airbus Радиохулиган Модератор

    Было у меня такое попадалово давно.Уже и не помню что делал-но суть та же приходит команда и разбираем её с помощью if/else.код честно скажу был не мой скопипащен из инета самому было лень делать да вот и готовый нашёл.А он у меня не работает!В первой проверке выдаёт всё время TRUE.Независимо от того что пришло в порт.Вообщем аффтар оказался шутником запихал в код вместо 0 (ноля) О.Я чегойто не увидел.И компилятор пропустил тот код (как и этот я проверил!).Вообщем тот код пришлось переделывать полностью.С тех пор ничего не копипащу.Или 100 раз проверяю.Как то так
     
    ИгорьК нравится это.
  15. b707

    b707 Гуру

    И это тем более верно, что именно новичков больше всего, почему-то, тянет осчастливить общество своим кодом :)
     
  16. ИгорьК

    ИгорьК Гуру

    Это нормально и касается, в основном, тех случаев, когда они делают новые вещи.

    "Ардуино - это просто (пипец какой)".
     
  17. Arkad_snz

    Arkad_snz Гик

    Вот! А новички-программеры убеждены, что программирование - это словоблудие на формальном языке (программирования).
    Синтаксису удовлетворяет - отлично! Заряжаем, поехали!
    А потом сидим, дивимся - чего-это у нас многомиллионный проект - космическая станция (вроде "Вояджер"а пролетая мимо Юпитера сделала не требуемые (по ТЗ) 100 снимков, а всего 5!?
    Мы, что "вбухали" кучу миллионов за 5 фоток!? На пляжах Одессы фотки дешевле!
    Автоматика подвела!? А, кто ее программировал!?
    Программист: Компилятор сказал - "все ОК!" - какие ко мне предъявы!?
    -----
    Реальный фейк насовской межпланетной станции:
    Первые бортовые компы межпланетных станций программировались на Фортране (если, кто такого олда помнит).
    Не контектносвободный язык, и там есть двусмысленность запятой в параметрах цикла.
    Но "запятая" имеет право на существование (с т.з. синтаксиса), но сколько раз выполнится цикл - просто глядя в код - хрен угадаешь - вот и получили вместо ста фоток - пять!
    После такого провала НАСА и минобороны объявили конкурс на язык, свободный от таких "ляпов" - Было представлено несколько проектов,
    Победил третий, который шел под кодом "С" (третья буква - "Си").
     
    Последнее редактирование: 28 фев 2019
    Arduino_man нравится это.
  18. ИгорьК

    ИгорьК Гуру

    Посыл непонятен. Полно языков с динамической типизацией и ничего страшного не происходит.
    Я же предположил в чем причина не проверяя, и ТС мог бы сообразить. Пусть со временем.
     
  19. parovoZZ

    parovoZZ Гуру

    как можно рассуждать об алгоритме, если он
     
  20. Arkad_snz

    Arkad_snz Гик

    Что не понятно! - Отсутствие синтаксических ошибок не означает, что программа верна!
    Если принять, что программа (текст на формальном языке высокого уровня) - это алгоритм, записанный на формальном языке (перевод с естественного языка на формальный), то проверять кроме синтаксиса нужно еще и адекватность перевода.
    В нашем случае - нет алгоритма, и значит ничего нельзя сказать о правильности перевода.
    Мало того в приведенном автором фрагменте перевода (текст проги) нет "подстрочника" (коментариев), который позволил бы проследить соответствие проги алгоритму (хоть какому-то здравому).,
    Пояснение: приписка про "формальный язык высокого уровня" - важна! Строго говоря - программа - это код для выполнения исполнительным механизмом (процессором) - т.е..- "машинный код".
    Записывать алгоритм сразу в машинный код - большое искусство, владеют им - единицы!
    Поэтому для нас, сирых/убогих придумали языки высокого уровня, и компиляторы...
    Пример:
    -----
    С т.з. грамматики и синтаксиса русского языка предложение - "В этом предложении сто слов" - правильно, а т.з. здравого смысла - абсурд.
    Кто грыз гранит науки ТРЯП - тот знает, что правила синтаксиса формального языка позволяют не только проверить текст программы на синтаксическую корректность, но и сгенерировать синтаксически-корректную прогу (текст).
    Ну, а что эта зомби-прога будет делать - можно только проверить экспериментально.