https://github.com/markwest1972/johnny_five_intro/blob/master/exercises
/06_adding_mqtt_to_the_mix.md を参考に以下のように改変
別窓からmosquitto_pub -d -t from_client -m left などと指令する
var five = require("johnny-five");
var mqtt = require("mqtt");
var myBoard, myServo, myLed;
var brightness = 0;
var commandTopic = 'from_client';
var responseTopic = 'to_client';
myBoard = new five.Board();
myBoard.on("ready", function() {
myServo = new five.Servo(11);
myServo.center(); // at first, set to center position
myLed = new five.Led(5);
myLed.brightness(brightness); // at first, set to zero
var options = { host: "localhost", port: "1883" };
var client = mqtt.connect(options);
client.on('connect', function () {
client.subscribe(commandTopic);
});
client.on('message', function (topic, payload) {
var message = payload.toString(); // very import point
console.log('Incoming message['+message+']');
// 以下のmyServo.positionはstepで更新されるはず
if ( message === 'left' ) {
myServo.step(validateServoMove(20, myServo.position));
// myServo.position are updatede above code
client.publish(responseTopic, 'Servo angle ['+myServo.position+']');
}
if ( message === 'right' ) {
myServo.step(validateServoMove(-20, myServo.position));
client.publish(responseTopic, 'Servo angle ['+myServo.position+']');
}
if ( message === 'center' ) {
myServo.center();
client.publish(responseTopic, 'Servo angle ['+myServo.position+']');
}
if ( message === 'brighter' ) {
validateAndAdjustLedBrightness(20);
client.publish(responseTopic, 'LED brightness ['+brightness+']');
}
if ( message === 'dimmer' ) {
validateAndAdjustLedBrightness(-20);
client.publish(responseTopic, 'LED brightness ['+brightness+']');
}
});
});
function validateServoMove(adjustment, position){
var newPosition = (position + adjustment);
if (newPosition < 0 || newPosition > 180 ) {
console.log('...Servo cannot be moved further in that direction');
adjustment = 0;
}else{
console.log('...Adjusting Servo to angle ['+(position +=
adjustment)+']');
}
return adjustment;
}
function validateAndAdjustLedBrightness(adjustment){
brightness += adjustment;
if (brightness <= 0) {
console.log('...LED cannot be dimmed futher');
brightness = 0;
}else if (brightness >= 255) {
console.log('...LED cannot be brightened futher');
brightness = 255;
}else{
console.log('...Adjusting LED to ['+brightness+']');
}
myLed.brightness(brightness);
}
0 件のコメント:
コメントを投稿