Помогите с кодом робоняша

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем Олег Юрьевич Шестерин, 18 фев 2019.

  1. Народ помогите!!!!!!!
    У меня не работает. Робот должен на основании одометра остановиться
    //остановка 1

    и продолжить движение до
    // остановка 2
    Блин такой код не работает. Где ошибка?



    // библиотеки
    var motor = require('@amperka/motor');
    var rightMotor = motor.connect(motor.MotorShield.M2);
    rightMotor.write(-0);
    var leftMotor = motor.connect(motor.MotorShield.M1);
    leftMotor.write(0);
    var encoderleft = require('@amperka/digital-line-sensor')
    .connect(P9); // p9 left
    var encoderright = require('@amperka/digital-line-sensor')
    .connect(P10); // p10 right
    var projector= require('@amperka/led').connect(P2);projector.turnOn();
    var receiver = require('@amperka/ir-receiver')
    .connect(P1);


    //ПОСТОЯННЫЕ переменные
    var RADIUS = 32;
    var WHEEL_LENGTH = 2 * Math.PI * RADIUS;
    var STEP = 1 / 12;


    // Изменяемые переменные (значения по умолчанию) начинаем с нуля считать расстояние
    var revolutionsleft = 0;
    var distanceleft = 0;
    var revolutionsright = 0;
    var distanceright = 0;


    var step1l = 1250; // первая остановка через 1200

    var step1r = 1350; // первая остановка через 1350

    var step2l = 600; // 2 остановка через 600

    var step2r = 850; // 2 остановка через 850


    encoderleft.on('black', function() {
    revolutionsleft = revolutionsleft + STEP;
    distanceleft = revolutionsleft * WHEEL_LENGTH;
    print(distanceleft , "left"); });

    encoderright.on('black', function() {
    revolutionsright = revolutionsright + STEP;
    distanceright = revolutionsright * WHEEL_LENGTH;
    print(distanceright , "right"); });



    receiver.on('receive', function(code) {
    if (code === receiver.keys.X) { rightMotor.write(-0.6); leftMotor.write(0.6); projector.turnOn(); }
    if (code === receiver.keys.Y) { rightMotor.write(0); leftMotor.write(0); projector.turnOff(); }
    });


    var step1 =setInterval (function(){
    if (step1l <= distanceleft ) { leftMotor.write(0); projector.blink(0.2,0.6);}
    if (step1r <= distanceright) { projector.turnOff(); rightMotor.write(-0);
    revolutionsleft = 0;
    distanceleft = 0;
    revolutionsright = 0;
    distanceright = 0;

    }
    });

    //первая остановка и запускается step2


    var step2 =setInterval (function(){
    if (step2l <= distanceleft ) { leftMotor.write(0); projector.blink(0.2,0.6);}
    if (step2r <= distanceright) { projector.turnOff(); rightMotor.write(-0);}




    });

    //вторая остановка
     
  2. parovoZZ

    parovoZZ Гуру

    Где алгоритм? Где комментарии к коду из алгоритма?
     
  3. Daniil

    Daniil Гик

    И прочтите, пожалуйста, пару тем в этом разделе, так оформленный код читать будут только смелые.
     
  4. Алгоритм прост: правое колесо проезжает заданное расстояние и останавливается, одновременно с этим левое колесо проезжает другое заданное расстояние и останавливается. После этого цикл возобновляется: правое колесо проезжает заданное расстояние и останавливается, одновременно с этим левое колесо проезжает другое заданное расстояние и останавливается.
     
  5. Над оформлением будем работать :))
     
  6. parovoZZ

    parovoZZ Гуру

    это не алгоритм. Это описание того, как хотелось бы, чтобы работала программа. Для описания ТЗ в платном разделе сойдет, для программиста - нет.
     
  7. Попробую спросить по другому: какой командой нужно ограничить часть кода, чтобы он выполнялся только один раз, и не выполнялся в следующий момент
     
  8. parovoZZ

    parovoZZ Гуру


    Код (C++):
    uint8_t i=1;

    d0
    {

    }while (i--);
     
    Daniil нравится это.