1
0
mirror of https://github.com/node-red/node-red-nodes.git synced 2023-10-10 13:36:58 +02:00
node-red-nodes/hardware/intel/mraa-gpio-led.js
Chao Zeng 3ca4456c2b
Refact: Separate LED selection and state control (#957)
Separation of class LED selection and state control.
The label of the LED corresponds to the silk screen of the iot2050.

Before we use one list to enumerate all the led and its state.
like: User1 Led Red User1 Led Green User1 Led Orange
      User2 Led Red User2 Led Green User2 Led Orange
if we need to add or delete the LED, we should change this list
After Separation of class LED selection and state control
one is Led selection: USER1 USER2
the other is status selection: Green Red Orange

For this structure, if the led or status changes, We don't need
to enumerate all the states.

Also there is a problem with the old version:
When we use one node to control led show green, then we use another node to control
led show red. The result we expect is led red, but the actually result is led orange.
This is caused the previous green do not turn off. State change is wrong.
This refact would also fix it.

Signed-off-by: chao zeng <chao.zeng@siemens.com>

Signed-off-by: chao zeng <chao.zeng@siemens.com>
2022-10-26 15:17:28 +01:00

87 lines
2.7 KiB
JavaScript

module.exports = function(RED) {
var m = require('mraa');
function LEDNode(n) {
RED.nodes.createNode(this, n);
this.pin = Number(n.pin);
this.color = Number(n.color);
if (this.pin == 0) {
this.user1_green = new m.Led(0); /*user-led1-green*/
this.user1_red = new m.Led(1); /*user-led1-red*/
} if(this.pin == 1) {
this.user2_green = new m.Led(2); /*user-led2-green*/
this.user2_red = new m.Led(3); /*user-led2-red*/
}
function set_led_green(led_green, led_red) {
led_green.setBrightness(1);
led_red.setBrightness(0);
}
function set_led_red(led_green, led_red) {
led_green.setBrightness(0);
led_red.setBrightness(1);
}
function set_led_orange(led_green, led_red) {
led_green.setBrightness(1);
led_red.setBrightness(1);
}
function turn_off_led(led_green, led_red) {
led_green.setBrightness(0);
led_red.setBrightness(0);
}
this.on("input", function(msg) {
if (this.pin == 0) {
this.led_green = this.user1_green;
this.led_red = this.user1_red;
}
else if (this.pin == 1) {
this.led_green = this.user2_green;
this.led_red = this.user2_red;
}
if (msg.payload == "1") {
switch(this.color) {
case 0:
set_led_green(this.led_green, this.led_red);
break;
case 1:
set_led_red(this.led_green, this.led_red);
break;
case 2:
set_led_orange(this.led_green, this.led_red);
break;
default:
console.log("unexpected");
break;
}
}
else {
turn_off_led(this.led_green, this.led_red);
}
});
this.on('close', function() {
if (this.pin == 0) {
this.user1_green.close();
this.user1_red.close();
} if(this.pin == 1) {
this.user2_green.close();
this.user2_red.close();
}
});
}
RED.nodes.registerType("mraa-gpio-led", LEDNode);
RED.httpAdmin.get('/mraa-gpio/:id', RED.auth.needsPermission('mraa-gpio.read'), function(req,res) {
res.json(m.getPlatformType());
});
RED.httpAdmin.get('/mraa-version/:id', RED.auth.needsPermission('mraa-version.read'), function(req,res) {
res.json(m.getVersion());
});
}