Странная ошибка с двигателями Johnny-Five

Я пытаюсь заставить двигатель работать с Johhny-Five. Я использую Arduino, и я скопировал код и проводку (в основном) с их веб-сайта. Единственное, что я изменил в проводке, - это вместо использования диода, чтобы убедиться, что 5 В не попадают на вывод эмиттера транзистора, я просто подключил его прямо к двигателю, без использования макета. Проблема в том, что я получаю странную ошибку

C: \ Users \ simas \ node_modules \ johnny-five \ lib \ motor.js: 721 this.speed ({^

TypeError: this.speed не является функцией в Timeout.Motor.stop [as _onTimeout] (C: \ Users \ simas \ node_modules \ johnny-five \ lib \ motor.js: 721: 8) в ontimeout (timers.js: 436: 11) в tryOnTimeout (timers.js: 300: 5) в listOnTimeout (timers.js: 263: 5) в Timer.processTimers (timers.js: 223: 10) PS C: \ Users \ simas \ Desktop \ motors >

Я вообще не понимаю, почему это происходит, помогите пожалуйста.

(кстати, код, который я скопировал с веб-сайта, был:

const {Board, Motor} = require("johnny-five");
const board = new Board();

board.on("ready", () => {
 // Create a new `motor` hardware instance.
 const motor = new Motor({
   pin: 5
 });

 // Inject the `motor` hardware into
 // the Repl instance's context;
 // allows direct command line access
 board.repl.inject({
   motor
 });

 // Motor Event API

 // "start" events fire when the motor is started.
 motor.on("start", () => {
   console.log(`start: ${Date.now()}`);

   // Demonstrate motor stop in 2 seconds
   board.wait(2000, motor.stop);
 });

 // "stop" events fire when the motor is stopped.
 motor.on("stop", () => {
   console.log(`stop: ${Date.now()}`);
 });

 // Motor API

 // start([speed)
 // Start the motor. `isOn` property set to |true|
 // Takes an optional parameter `speed` [0-255]
 // to define the motor speed if a PWM Pin is
 // used to connect the motor.
 motor.start();

 // stop()
 // Stop the motor. `isOn` property set to |false|
});

)


person YourRentIsDue    schedule 12.11.2019    source источник


Ответы (1)


Я боролся с этой же проблемой в результате использования Пример кода Adafruit Motor Shield V2 из документации Johnny-Five.

Похоже, это проблема с контекстом, привязанным к вызову motor.stop при передаче функции напрямую board.wait.

Чтобы обойти эту проблему, объявите свою собственную функцию в контексте экземпляра двигателя и передайте ее вызову board.wait в обработчике событий "start":

 // "start" event fires when the motor is started
 motor.on("start", () => {
   console.log(`start: ${Date.now()}`);

   // Demonstrate motor stop in 2 seconds
   board.wait(2000, () => {
     motor.stop();
   });
 });
person Trent    schedule 27.05.2020
comment
Кажется, что примеры, здесь, тоже неверны. board.wait(5000, motor.stop) следует заменить на board.wait(5000, () => motor.stop()). - person Rubem Pechansky; 04.07.2020
comment
Ага! К сожалению, многие (большинство) примеров в Интернете страдают от этой же проблемы. - person Trent; 08.07.2020