Помогите с программой

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем YuraNedrug, 5 янв 2018.

  1. YuraNedrug

    YuraNedrug Нерд

    Проекты робоняши кончились, решил давать сыну простые задания, чтобы не просто копировал бездумно код, а что-то сам делал. Одно из таких заданий - по кнопке PLAY на пульте робот едет вперед и ровно через метр останавливается.
    В итоге у сына не получилось, а я помочь не смог, прошу помощи на форуме.
    Программа получилась такая
    Код (Javascript):
    var encoder = require('@amperka/digital-line-sensor')
      .connect(P10);
    var motor = require('@amperka/robot-2wd')
      .connect();
    var receiver = require('@amperka/ir-receiver')
      .connect(P3);
    var RADIUS = 32;
    var WHEEL_LENGTH = 2 * Math.PI * RADIUS;
    var STEP = 1 / 12;
    var revolutions = 0;
    receiver.on('receive', function(code) {
      if (code === receiver.keys.PLAY) {
       motor.go({l: 0.5, r: 0.5});
      }
    });
    encoder.on('black', function() {
      revolutions = revolutions + STEP;
      var distance = revolutions * WHEEL_LENGTH;{
        if (distance === 1000){
          motor.stop();
        }
      }
    });
    Робот по кнопке с пульта едет вперед, но не останавливается. Команда print(distance, 'mm') выводит в консоль расстояние, то есть цифровой сенсор линий работает.
    Подскажите, что мы сделали не так?

    PS. Правильно ли я понимаю, что (distance === 1000) проверяется единожды? То есть условие просто не выполняется и на этом программа завершается? Если так, то какие есть средства для того, чтобы программа ожидала определенного значения distance?
     
  2. ИгорьК

    ИгорьК Гуру

    Вы не прочитали учебника JavaScript и верите что программирование МК - игрушки. Некоторая часть вины за это лежит не на вас, безусловно.
    Либо Вы читаете книгу (и с ужасом понимаете во что влезли) и начинаете въезжать в программирование, либо вам это все равно надоест - постоянно просить помощь зала.
     
    NikitOS нравится это.
  3. YuraNedrug

    YuraNedrug Нерд

    Интересно, как может помочь Ваша демагогия о программировании?
     
  4. ИгорьК

    ИгорьК Гуру

    Наравне с вашим скулежем - никак.
     
    NikitOS нравится это.
  5. YuraNedrug

    YuraNedrug Нерд

    Послушайте, Вы взрослый состоявшийся человек, я взрослый состоявшийся человек. И так уж случилось, что состоялся я в сфере, далёкой от технической стороны информационных технологий. И Вы должны понимать, что при таких вводных прописные истины про то, что неплохо бы прочесть учебник и решить, немножко не к месту очень сильно. Уже все давно решено. Я знаю, что неплохо бы прочесть учебник, а ещё я знаю, что у сына имеется интерес к программированию, и я очень не хочу спугнуть его скучным учебником. Для всего должно быть свое время, и для учебника оно еще не пришло. По этому просто прошу Вас, если есть что сказать по теме, я с огромным удовольствием выслушаю и буду чрезмерно благодарен. Если нет, ну значит нет. Буду дальше искать.
     
    Walker2000 нравится это.
  6. DIYMan

    DIYMan Guest

    Вопрос: в какой области вы состоявшийся человек? Теперь представьте - приходит вьюноша (не по возрасту - а по умениям) и сразу в вашей области хочет сделать хирургическую операцию на глазу, скажем. При этом - ни разу в жизни скальпель не державши. Как думаете - не пришло этому вьюноше ещё время сесть за скучный учебник и прочитать там хотя бы про скальпели? Пущай режет, чего уж там - глаза всё равно два, вон Кутузов, говорят, обходился некомплектом.

    Демагогия - как раз вот этот процитированный абзац. Меня всегда поражал подход "если ничего не получается - прочти, наконец, инструкцию!" - не знаю, может, в воду чего подмешивают специально?

    Учиться основам программирования надо, и начинать надо именно с самых основ, а уж то, как это будет преподнесено - дело рук преподавателя, учебник - лишь инструмент. Так что это не учебник скучный - это вы не можете правильно подать материал.

    И @ИгорьК совершенно прав.
     
  7. ИгорьК

    ИгорьК Гуру

    Потому что к миру программирования не имею отношения и это не моя область знаний, я и советую Вам то, что понял сам. Пусть это и азбучная истина.

    Если у Вас хватит воли и она не выйдет на пустые понты, через полтора года топтания на месте Вы придете к ней же.
     
    Igor68 нравится это.
  8. Igor68

    Igor68 Гуру

    Нуууу! Взрослый... я тоже умею гвозди в стену забивать! А Вот умей поставить задачу пригодную для решения... ВЗРОСЛЫЙ. И выработай решение... А фраза: " Я ГОЛОЙ ЗАДНИЦЕЙ ЕЖЕЙ ДАВИЛ " тут не к месту. А если только тонкостей не в силах... то на то и форум. А с ТЗ я и сам могу.
     
    NikitOS нравится это.
  9. YuraNedrug

    YuraNedrug Нерд

    Если вдруг кому интересно, то в моем случае необходимо задать диапазон расстояний, а не конкретное значение. То есть не
    Код (Javascript):
    if (distance === 1000)
    , а
    Код (Javascript):
    if (distance >= 1000)
    Только по второму нажатию на PLAY робот не поедет. Видимо нужно обнулить переменную distance.

    PS. И мне совершенно не понятно, как бы мне помог учебник, если тут чистой воды особенность работы конкретного устройства на конкретном макете. Код, с точки зрения синтаксиса написан совершенно верно. Просто переменная distance не может вернуть ровно 1000.

    PS2. Из 9 сообщений два по теме.
     
    Последнее редактирование: 5 янв 2018
  10. Igor68

    Igor68 Гуру

    Да теперь точно понимаю... и простите за нарушения в форуме... тут JS и идея с возможностями не понятна:(. Конечно я не прав, но рассматривать управление чем-то (что стало модно) с точки зрения построения документов (JS) и WEB-страниц точно не моё. Ну не могу скрестить внешний вид документа и его крутость с системой управления. Блин хорошо, что WORD с его межстрочными интервалами не стало алгоритмом работы устройства. А секритутаризм берёт своё!
     
    YuraNedrug нравится это.
  11. ostrov

    ostrov Гуру

    Это как?
    Код (C++):
    if (distance === 1000)
     
  12. ИгорьК

    ИгорьК Гуру

    Это JS равенство без преобразования типов.
    А дядя не слышит что ему говорят и играет в игрушки.
     
  13. Igor68

    Igor68 Гуру

    Нууу... пусть циклирует(условно - с точки зрения WORD и EXEL, но не Си разумеется) и ожидает своей 1000... только точное совпадение это перебор - контролируйте выход за границы.
     
    YuraNedrug и NikitOS нравится это.
  14. YuraNedrug

    YuraNedrug Нерд

    И еще одно дополнение по поводу выполнения программы при последующих нажатиях PLAY. Как оказалось, обнулять переменную distance в конце программы бесполезно. Программа закончилась, на этом все. Обнулять необходимо при нажатии кнопки PLAY. По этому делаем так
    Код (Javascript):
    receiver.on('receive', function(code) {
      if (code === receiver.keys.PLAY) {
           revolutions = 0;    
           motor.go({l: 0.5, r: 0.5});
         }
    });
     
    vasdor и sys нравится это.