diff --git a/.devcontainer/nodered/flows.json b/.devcontainer/nodered/flows.json index 8275ec1..e340979 100644 --- a/.devcontainer/nodered/flows.json +++ b/.devcontainer/nodered/flows.json @@ -144,7 +144,7 @@ "page": "bb436fe040268d40", "width": "2", "height": 1, - "order": 2, + "order": 5, "showTitle": true, "className": "", "visible": "true", @@ -172,7 +172,7 @@ "page": "bb436fe040268d40", "width": "2", "height": 1, - "order": 4, + "order": 7, "showTitle": true, "className": "", "visible": "true", @@ -186,7 +186,7 @@ "page": "bb436fe040268d40", "width": "2", "height": 1, - "order": 3, + "order": 6, "showTitle": true, "className": "", "visible": "true", @@ -200,7 +200,7 @@ "page": "bb436fe040268d40", "width": "8", "height": 1, - "order": 6, + "order": 9, "showTitle": true, "className": "", "visible": "true", @@ -214,7 +214,7 @@ "page": "bb436fe040268d40", "width": "4", "height": 1, - "order": 5, + "order": 8, "showTitle": true, "className": "", "visible": "true", @@ -228,7 +228,85 @@ "page": "bb436fe040268d40", "width": "4", "height": 1, - "order": 7, + "order": 10, + "showTitle": true, + "className": "", + "visible": "true", + "disabled": "false", + "groupType": "default" + }, + { + "id": "15d6d0a151981474", + "type": "ui-page", + "name": "Maquette 16", + "ui": "92537b03143c5e06", + "path": "/page16", + "icon": "home", + "layout": "grid", + "theme": "ea2bf5532fa513eb", + "breakpoints": [ + { + "name": "Default", + "px": "0", + "cols": "3" + }, + { + "name": "Tablet", + "px": "576", + "cols": "6" + }, + { + "name": "Small Desktop", + "px": "768", + "cols": "9" + }, + { + "name": "Desktop", + "px": "1024", + "cols": "12" + } + ], + "order": 2, + "className": "", + "visible": "true", + "disabled": "false" + }, + { + "id": "6ba51f61417860c1", + "type": "ui-group", + "name": "R2", + "page": "bb436fe040268d40", + "width": "3", + "height": 1, + "order": 4, + "showTitle": true, + "className": "", + "visible": "true", + "disabled": "false", + "groupType": "default" + }, + { + "id": "b7568fe107ccb2e6", + "type": "ui-group", + "name": "R1", + "page": "bb436fe040268d40", + "width": "3", + "height": 1, + "order": 3, + "showTitle": true, + "className": "", + "visible": "true", + "disabled": "false", + "groupType": "default" + }, + { + "id": "0b9ca135d0b7313a", + "type": "ui-group", + "name": "R0", + "page": "bb436fe040268d40", + "width": "3", + "height": 1, + "order": 2, "showTitle": true, "className": "", "visible": "true", @@ -239,10 +317,10 @@ "id": "699fb0d470d36c5f", "type": "ui-button", "z": "86a34ee77bf6db10", - "group": "5fe915fcd26e78ae", + "group": "0b9ca135d0b7313a", "name": "", "label": "B0", - "order": 8, + "order": 6, "width": 0, "height": 0, "emulateClick": false, @@ -278,7 +356,7 @@ "id": "9f4dc1907c1e00dd", "type": "ui-button", "z": "86a34ee77bf6db10", - "group": "5fe915fcd26e78ae", + "group": "0b9ca135d0b7313a", "name": "", "label": "B1", "order": 7, @@ -317,7 +395,7 @@ "id": "79b179ce4b2341de", "type": "ui-button", "z": "86a34ee77bf6db10", - "group": "5fe915fcd26e78ae", + "group": "b7568fe107ccb2e6", "name": "", "label": "B2", "order": 6, @@ -356,10 +434,10 @@ "id": "66e9e7d8aa02074d", "type": "ui-button", "z": "86a34ee77bf6db10", - "group": "5fe915fcd26e78ae", + "group": "b7568fe107ccb2e6", "name": "", "label": "B3", - "order": 5, + "order": 7, "width": 0, "height": 0, "emulateClick": false, @@ -932,7 +1010,7 @@ "type": "function", "z": "86a34ee77bf6db10", "name": "reset", - "func": "flow.set(\"i0\", 0);\nflow.set(\"i1\", 0);\nflow.set(\"i2\", 0);\nflow.set(\"i3\", 0);\nflow.set(\"i4\", 0);\nflow.set(\"i5\", 0);\nflow.set(\"i6\", 0);\nflow.set(\"i7\", 0);\n\nglobal.set(\"a0\", 0);\nglobal.set(\"a1\", 0);\nglobal.set(\"a2\", 0);\nglobal.set(\"a3\", 0);\nglobal.set(\"a4\", 0);\nglobal.set(\"a5\", 0);\nglobal.set(\"a6\", 0);\nglobal.set(\"a7\", 0);\n\nglobal.set(\"m0\", 0);\nglobal.set(\"m1\", 0);\nglobal.set(\"m2\", 0);\nglobal.set(\"m3\", 0);\n\nglobal.set(\"p0\", 0);\n\nglobal.set(\"v0\", 0);\n\nglobal.set(\"c0\", 1);\nglobal.set(\"c1\", 0);\nglobal.set(\"c2\", 1);\nglobal.set(\"c3\", 0);\nglobal.set(\"c4\", 0);\nglobal.set(\"c5\", 0);\nglobal.set(\"c6\", 0);\nglobal.set(\"c7\", 0);\n\nglobal.set(\"s8\", 0);\nglobal.set(\"s9\", 0);\n\nglobal.set(\"flag0\", 0);\n\nmsg.payload = false;\n\nreturn msg;", + "func": "const sarii = {\n actionneurs: [0, 0, 0, 0, 0, 0, 0, 0],\n moteurs: [0, 0, 0, 0],\n niveaux: [0, 0, 0, 0]\n}\n\nflow.set(\"i0\", 0);\nflow.set(\"i1\", 0);\nflow.set(\"i2\", 0);\nflow.set(\"i3\", 0);\nflow.set(\"i4\", 0);\nflow.set(\"i5\", 0);\nflow.set(\"i6\", 0);\nflow.set(\"i7\", 0);\n\nglobal.set(\"a0\", 0);\nglobal.set(\"a1\", 0);\nglobal.set(\"a2\", 0);\nglobal.set(\"a3\", 0);\nglobal.set(\"a4\", 0);\nglobal.set(\"a5\", 0);\nglobal.set(\"a6\", 0);\nglobal.set(\"a7\", 0);\n\nglobal.set(\"m0\", 0);\nglobal.set(\"m1\", 0);\nglobal.set(\"m2\", 0);\nglobal.set(\"m3\", 0);\n\nglobal.set(\"p0\", 0);\nglobal.set(\"p1\", 0);\nglobal.set(\"p2\", 0);\nglobal.set(\"p3\", 0);\n\nglobal.set(\"v0\", 0);\n\nglobal.set(\"c0\", 0);\nglobal.set(\"c1\", 0);\nglobal.set(\"c2\", 0);\nglobal.set(\"c3\", 0);\nglobal.set(\"c4\", 0);\nglobal.set(\"c5\", 0);\nglobal.set(\"c6\", 0);\nglobal.set(\"c7\", 0);\n\nglobal.set(\"s8\", 0);\nglobal.set(\"s9\", 0);\n\nglobal.set(\"flag0\", 0);\n\nmsg.payload = false;\n\nreturn msg;", "outputs": 1, "timeout": 0, "noerr": 0, @@ -960,10 +1038,10 @@ "id": "94418b813e53bf2c", "type": "ui-button", "z": "86a34ee77bf6db10", - "group": "5fe915fcd26e78ae", + "group": "6ba51f61417860c1", "name": "", "label": "B4", - "order": 4, + "order": 6, "width": 0, "height": 0, "emulateClick": false, @@ -999,10 +1077,10 @@ "id": "b674f39795cf1427", "type": "ui-button", "z": "86a34ee77bf6db10", - "group": "5fe915fcd26e78ae", + "group": "6ba51f61417860c1", "name": "", "label": "B5", - "order": 3, + "order": 7, "width": 0, "height": 0, "emulateClick": false, @@ -1290,7 +1368,7 @@ "type": "function", "z": "86a34ee77bf6db10", "name": "format mqtt", - "func": "let i0 = Number(flow.get(\"i0\")) || 0;\nlet i1 = Number(flow.get(\"i1\")) || 0;\nlet i2 = Number(flow.get(\"i2\")) || 0;\nlet i3 = Number(flow.get(\"i3\")) || 0;\nlet i4 = Number(flow.get(\"i4\")) || 0;\nlet i5 = Number(flow.get(\"i5\")) || 0;\nlet i6 = Number(flow.get(\"i6\")) || 0;\nlet i7 = Number(flow.get(\"i7\")) || 0;\n\nlet v0 = Number(global.get(\"v0\")) || 0;\n\nif (typeof msg.payload[\"arret\"] === 'undefined') msg.payload[\"arret\"] = 1;\nif (typeof msg.payload[\"marche\"] === 'undefined') msg.payload[\"marche\"] = 0;\n\nif (typeof msg.payload[\"b0\"] === 'undefined') msg.payload[\"b0\"] = 0;\nif (typeof msg.payload[\"b1\"] === 'undefined') msg.payload[\"b1\"] = 0;\nif (typeof msg.payload[\"b2\"] === 'undefined') msg.payload[\"b2\"] = 0;\nif (typeof msg.payload[\"b3\"] === 'undefined') msg.payload[\"b3\"] = 0;\nif (typeof msg.payload[\"b4\"] === 'undefined') msg.payload[\"b4\"] = 0;\nif (typeof msg.payload[\"b5\"] === 'undefined') msg.payload[\"b5\"] = 0;\nif (typeof msg.payload[\"b6\"] === 'undefined') msg.payload[\"b6\"] = 0;\nif (typeof msg.payload[\"b7\"] === 'undefined') msg.payload[\"b7\"] = 0;\n\nmsg.payload[\"i0\"] = i0;\nmsg.payload[\"i1\"] = i1;\nmsg.payload[\"i2\"] = i2;\nmsg.payload[\"i3\"] = i3;\nmsg.payload[\"i4\"] = i4;\nmsg.payload[\"i5\"] = i5;\nmsg.payload[\"i6\"] = i6;\nmsg.payload[\"i7\"] = i7;\n\nmsg.payload[\"c0\"] = Number(global.get(\"c0\")) || 0;\nmsg.payload[\"c1\"] = Number(global.get(\"c1\")) || 0;\nmsg.payload[\"c2\"] = Number(global.get(\"c2\")) || 0;\nmsg.payload[\"c3\"] = Number(global.get(\"c3\")) || 0;\nmsg.payload[\"c4\"] = Number(global.get(\"c4\")) || 0;\nmsg.payload[\"c5\"] = Number(global.get(\"c5\")) || 0;\nmsg.payload[\"c6\"] = Number(global.get(\"c6\")) || 0;\nmsg.payload[\"c7\"] = Number(global.get(\"c7\")) || 0;\n\nmsg.payload[\"v0\"] = v0;\nmsg.payload[\"p0\"] = Number(global.get(\"p0\")) || 0;\n\nreturn msg;", + "func": "let i0 = Number(flow.get(\"i0\")) || 0;\nlet i1 = Number(flow.get(\"i1\")) || 0;\nlet i2 = Number(flow.get(\"i2\")) || 0;\nlet i3 = Number(flow.get(\"i3\")) || 0;\nlet i4 = Number(flow.get(\"i4\")) || 0;\nlet i5 = Number(flow.get(\"i5\")) || 0;\nlet i6 = Number(flow.get(\"i6\")) || 0;\nlet i7 = Number(flow.get(\"i7\")) || 0;\n\nlet v0 = Number(global.get(\"v0\")) || 0;\n\nif (typeof msg.payload[\"arret\"] === 'undefined') msg.payload[\"arret\"] = 1;\nif (typeof msg.payload[\"marche\"] === 'undefined') msg.payload[\"marche\"] = 0;\n\nif (typeof msg.payload[\"b0\"] === 'undefined') msg.payload[\"b0\"] = 0;\nif (typeof msg.payload[\"b1\"] === 'undefined') msg.payload[\"b1\"] = 0;\nif (typeof msg.payload[\"b2\"] === 'undefined') msg.payload[\"b2\"] = 0;\nif (typeof msg.payload[\"b3\"] === 'undefined') msg.payload[\"b3\"] = 0;\nif (typeof msg.payload[\"b4\"] === 'undefined') msg.payload[\"b4\"] = 0;\nif (typeof msg.payload[\"b5\"] === 'undefined') msg.payload[\"b5\"] = 0;\nif (typeof msg.payload[\"b6\"] === 'undefined') msg.payload[\"b6\"] = 0;\nif (typeof msg.payload[\"b7\"] === 'undefined') msg.payload[\"b7\"] = 0;\n\nmsg.payload[\"i0\"] = i0;\nmsg.payload[\"i1\"] = i1;\nmsg.payload[\"i2\"] = i2;\nmsg.payload[\"i3\"] = i3;\nmsg.payload[\"i4\"] = i4;\nmsg.payload[\"i5\"] = i5;\nmsg.payload[\"i6\"] = i6;\nmsg.payload[\"i7\"] = i7;\n\nmsg.payload[\"c0\"] = Number(global.get(\"c0\")) || 0;\nmsg.payload[\"c1\"] = Number(global.get(\"c1\")) || 0;\nmsg.payload[\"c2\"] = Number(global.get(\"c2\")) || 0;\nmsg.payload[\"c3\"] = Number(global.get(\"c3\")) || 0;\nmsg.payload[\"c4\"] = Number(global.get(\"c4\")) || 0;\nmsg.payload[\"c5\"] = Number(global.get(\"c5\")) || 0;\nmsg.payload[\"c6\"] = Number(global.get(\"c6\")) || 0;\nmsg.payload[\"c7\"] = Number(global.get(\"c7\")) || 0;\n\nmsg.payload[\"v0\"] = v0;\n\nmsg.payload[\"p0\"] = Number(global.get(\"p0\")) || 0;\nmsg.payload[\"p1\"] = Number(global.get(\"p1\")) || 0;\nmsg.payload[\"p2\"] = Number(global.get(\"p2\")) || 0;\nmsg.payload[\"p3\"] = Number(global.get(\"p3\")) || 0;\n\nreturn msg;", "outputs": 1, "timeout": 0, "noerr": 0, @@ -1772,7 +1850,9 @@ "c76542262137e660", "3c5d996abc900e3d", "6d425818a9a96be2", - "c613454bd48662e1" + "c613454bd48662e1", + "c45101b9ef3d5620", + "600315bb508c1e24" ] ] }, @@ -1823,90 +1903,10 @@ "height": 0, "color": "", "className": "", - "x": 1680, - "y": 820, + "x": 1880, + "y": 680, "wires": [] }, - { - "id": "87bd077b61c6e623", - "type": "function", - "z": "86a34ee77bf6db10", - "name": "m0", - "func": "global.set(\"m0\", Number(msg.payload.m0));\nmsg.payload = msg.payload.m0 * 10;\nreturn msg;", - "outputs": 1, - "timeout": 0, - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 690, - "y": 1440, - "wires": [ - [ - "c7a24187c63a6f92" - ] - ] - }, - { - "id": "17f45fa5a72be929", - "type": "function", - "z": "86a34ee77bf6db10", - "name": "m1", - "func": "global.set(\"m1\", Number(msg.payload.m1));\nmsg.payload = msg.payload.m1 * 10;\nreturn msg;", - "outputs": 1, - "timeout": 0, - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 690, - "y": 1480, - "wires": [ - [ - "fc11f649c39c46d2" - ] - ] - }, - { - "id": "96a15b4c506aa11a", - "type": "function", - "z": "86a34ee77bf6db10", - "name": "m2", - "func": "global.set(\"m2\", Number(msg.payload.m2));\nmsg.payload = msg.payload.m2 * 10;\nreturn msg;", - "outputs": 1, - "timeout": 0, - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 690, - "y": 1520, - "wires": [ - [ - "8e5c745d23d5380c" - ] - ] - }, - { - "id": "10a21959cbd3cc1e", - "type": "function", - "z": "86a34ee77bf6db10", - "name": "m3", - "func": "global.set(\"m3\", Number(msg.payload.m3));\nmsg.payload = msg.payload.m3 * 10;\nreturn msg;", - "outputs": 1, - "timeout": 0, - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 690, - "y": 1560, - "wires": [ - [ - "1f1e018651c474a0" - ] - ] - }, { "id": "30d93ea6f5e8d0c1", "type": "function", @@ -1920,7 +1920,7 @@ "finalize": "", "libs": [], "x": 1490, - "y": 820, + "y": 680, "wires": [ [ "8a9cc277cf3f445b", @@ -2084,16 +2084,16 @@ "id": "c7a24187c63a6f92", "type": "ui-gauge", "z": "86a34ee77bf6db10", - "name": "", + "name": "Moteur 0", "group": "6b44d4b22cd7b3dc", "order": 1, - "value": "payload", - "valueType": "msg", + "value": "sarii.moteurs[0]", + "valueType": "global", "width": "2", "height": "2", "gtype": "gauge-half", "gstyle": "needle", - "title": "gauge", + "title": "Moteur 0", "alwaysShowTitle": false, "floatingTitlePosition": "top-left", "units": "units", @@ -2108,27 +2108,27 @@ "textType": "label" }, { - "from": "4", + "from": "0.4", "color": "#ffc800", "text": "", "textType": "label" }, { - "from": "7", + "from": "0.7", "color": "#ea5353", "text": "", "textType": "label" } ], "min": 0, - "max": 10, + "max": "1", "sizeThickness": 16, "sizeGap": 4, "sizeKeyThickness": 8, "styleRounded": true, "styleGlow": false, "className": "", - "x": 870, + "x": 880, "y": 1440, "wires": [ [] @@ -2138,16 +2138,16 @@ "id": "fc11f649c39c46d2", "type": "ui-gauge", "z": "86a34ee77bf6db10", - "name": "", + "name": "Moteur 1", "group": "6b44d4b22cd7b3dc", "order": 2, - "value": "payload", - "valueType": "msg", + "value": "sarii.moteurs[1]", + "valueType": "global", "width": "2", "height": "2", "gtype": "gauge-half", "gstyle": "needle", - "title": "gauge", + "title": "Moteur 1", "alwaysShowTitle": false, "floatingTitlePosition": "top-left", "units": "units", @@ -2162,27 +2162,27 @@ "textType": "label" }, { - "from": "4", + "from": "0.4", "color": "#ffc800", "text": "", "textType": "label" }, { - "from": "7", + "from": "0.7", "color": "#ea5353", "text": "", "textType": "label" } ], "min": 0, - "max": 10, + "max": "1", "sizeThickness": 16, "sizeGap": 4, "sizeKeyThickness": 8, "styleRounded": true, "styleGlow": false, "className": "", - "x": 870, + "x": 880, "y": 1480, "wires": [ [] @@ -2192,16 +2192,16 @@ "id": "8e5c745d23d5380c", "type": "ui-gauge", "z": "86a34ee77bf6db10", - "name": "", + "name": "Moteur 2", "group": "6b44d4b22cd7b3dc", "order": 3, - "value": "payload", - "valueType": "msg", + "value": "sarii.moteurs[2]", + "valueType": "global", "width": "2", "height": "2", "gtype": "gauge-half", "gstyle": "needle", - "title": "gauge", + "title": "Moteur 2", "alwaysShowTitle": false, "floatingTitlePosition": "top-left", "units": "units", @@ -2216,27 +2216,27 @@ "textType": "label" }, { - "from": "4", + "from": "0.4", "color": "#ffc800", "text": "", "textType": "label" }, { - "from": "7", + "from": "0.7", "color": "#ea5353", "text": "", "textType": "label" } ], "min": 0, - "max": 10, + "max": "1", "sizeThickness": 16, "sizeGap": 4, "sizeKeyThickness": 8, "styleRounded": true, "styleGlow": false, "className": "", - "x": 870, + "x": 880, "y": 1520, "wires": [ [] @@ -2246,16 +2246,16 @@ "id": "1f1e018651c474a0", "type": "ui-gauge", "z": "86a34ee77bf6db10", - "name": "", + "name": "Moteur 3", "group": "6b44d4b22cd7b3dc", "order": 4, - "value": "payload", - "valueType": "msg", + "value": "sarii.moteurs[3]", + "valueType": "global", "width": "2", "height": "2", "gtype": "gauge-half", "gstyle": "needle", - "title": "gauge", + "title": "Moteur 3", "alwaysShowTitle": false, "floatingTitlePosition": "top-left", "units": "units", @@ -2270,27 +2270,27 @@ "textType": "label" }, { - "from": "4", + "from": "0.4", "color": "#ffc800", "text": "", "textType": "label" }, { - "from": "7", + "from": "0.7", "color": "#ea5353", "text": "", "textType": "label" } ], "min": 0, - "max": 10, + "max": "1", "sizeThickness": 16, "sizeGap": 4, "sizeKeyThickness": 8, "styleRounded": true, "styleGlow": false, "className": "", - "x": 870, + "x": 880, "y": 1560, "wires": [ [] @@ -2300,9 +2300,9 @@ "id": "3a4fc72ec7ac5e24", "type": "ui-text", "z": "86a34ee77bf6db10", - "group": "b1bde11bdd78b9f1", + "group": "0b9ca135d0b7313a", "order": 3, - "width": "2", + "width": "1", "height": "1", "name": "", "label": "c0", @@ -2324,9 +2324,9 @@ "id": "f9dc47909191e3c8", "type": "ui-text", "z": "86a34ee77bf6db10", - "group": "b1bde11bdd78b9f1", + "group": "0b9ca135d0b7313a", "order": 4, - "width": "2", + "width": "1", "height": "1", "name": "", "label": "c1", @@ -2348,9 +2348,9 @@ "id": "010deed59c85eb88", "type": "ui-text", "z": "86a34ee77bf6db10", - "group": "b1bde11bdd78b9f1", - "order": 5, - "width": "2", + "group": "b7568fe107ccb2e6", + "order": 3, + "width": "1", "height": "1", "name": "", "label": "c2", @@ -2432,9 +2432,9 @@ "id": "ee9fdf6abaeac67b", "type": "ui-text", "z": "86a34ee77bf6db10", - "group": "b1bde11bdd78b9f1", - "order": 6, - "width": "2", + "group": "b7568fe107ccb2e6", + "order": 4, + "width": "1", "height": "1", "name": "", "label": "c3", @@ -2456,8 +2456,8 @@ "id": "a6a2a869c90e9632", "type": "ui-text", "z": "86a34ee77bf6db10", - "group": "6b44d4b22cd7b3dc", - "order": 8, + "group": "6ba51f61417860c1", + "order": 3, "width": "1", "height": "1", "name": "", @@ -2480,14 +2480,14 @@ "id": "67f154181e143217", "type": "ui-text", "z": "86a34ee77bf6db10", - "group": "6b44d4b22cd7b3dc", - "order": 9, + "group": "6ba51f61417860c1", + "order": 4, "width": "1", "height": "1", "name": "", "label": "c5", "format": "{{msg.payload}}", - "layout": "row-right", + "layout": "row-left", "style": false, "font": "", "fontSize": 16, @@ -2505,7 +2505,7 @@ "type": "ui-text", "z": "86a34ee77bf6db10", "group": "6b44d4b22cd7b3dc", - "order": 10, + "order": 5, "width": "1", "height": "1", "name": "", @@ -2529,7 +2529,7 @@ "type": "ui-text", "z": "86a34ee77bf6db10", "group": "6b44d4b22cd7b3dc", - "order": 11, + "order": 6, "width": "1", "height": "1", "name": "", @@ -2652,12 +2652,12 @@ "id": "c219b897538f7dfd", "type": "ui-text", "z": "86a34ee77bf6db10", - "group": "6b44d4b22cd7b3dc", - "order": 5, - "width": "2", + "group": "0b9ca135d0b7313a", + "order": 2, + "width": "1", "height": "1", "name": "", - "label": "Actionneur 0", + "label": "A0", "format": "{{msg.payload}}", "layout": "row-left", "style": false, @@ -2668,7 +2668,7 @@ "className": "", "value": "payload", "valueType": "msg", - "x": 890, + "x": 870, "y": 1920, "wires": [] }, @@ -2676,12 +2676,12 @@ "id": "74204db55792e5ad", "type": "ui-text", "z": "86a34ee77bf6db10", - "group": "6b44d4b22cd7b3dc", - "order": 6, - "width": "2", + "group": "0b9ca135d0b7313a", + "order": 5, + "width": "1", "height": "1", "name": "", - "label": "Actionneur 1", + "label": "A1", "format": "{{msg.payload}}", "layout": "row-left", "style": false, @@ -2692,7 +2692,7 @@ "className": "", "value": "payload", "valueType": "msg", - "x": 890, + "x": 870, "y": 1960, "wires": [] }, @@ -2700,12 +2700,12 @@ "id": "8d5eb1827691bec4", "type": "ui-text", "z": "86a34ee77bf6db10", - "group": "6b44d4b22cd7b3dc", - "order": 7, - "width": "2", + "group": "b7568fe107ccb2e6", + "order": 5, + "width": "1", "height": "1", "name": "", - "label": "Actionneur 2", + "label": "A2", "format": "{{msg.payload}}", "layout": "row-left", "style": false, @@ -2716,7 +2716,7 @@ "className": "", "value": "payload", "valueType": "msg", - "x": 890, + "x": 870, "y": 2000, "wires": [] }, @@ -2778,7 +2778,7 @@ "e5da08ba69fe6fb8" ], "x": 665, - "y": 2100, + "y": 2260, "wires": [] }, { @@ -2910,7 +2910,7 @@ "type": "function", "z": "86a34ee77bf6db10", "name": "reset s", - "func": "msg.payload = {\n sorties: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n actionneurs: [0, 0, 0, 0, 0, 0, 0, 0],\n \"m0\": 0,\n \"m1\": 0,\n \"m2\": 0,\n \"m3\": 0\n}\n\nreturn msg;", + "func": "msg.payload = {\n sorties: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n actionneurs: [0, 0, 0, 0, 0, 0, 0, 0],\n moteurs: [0, 0, 0, 0]\n}\n\nreturn msg;", "outputs": 1, "timeout": 0, "noerr": 0, @@ -2931,7 +2931,7 @@ "type": "function", "z": "86a34ee77bf6db10", "name": "nop", - "func": "return msg;", + "func": "global.set(\"sarii\", msg.payload);\nreturn msg;", "outputs": 1, "timeout": 0, "noerr": 0, @@ -2950,10 +2950,6 @@ "3ceeaa9da55ccbb8", "53e82b867be45c4a", "4fe669c3987dcfe4", - "87bd077b61c6e623", - "17f45fa5a72be929", - "96a15b4c506aa11a", - "10a21959cbd3cc1e", "1cd3d290f7f7d539", "88310a9e40d564fc", "b543660f60319f21", @@ -2964,7 +2960,14 @@ "29d203e016b983f6", "e41bd818da135c8c", "e7b6444f18166784", - "c35fc0f16cdcd248" + "c35fc0f16cdcd248", + "c7a24187c63a6f92", + "fc11f649c39c46d2", + "8e5c745d23d5380c", + "1f1e018651c474a0", + "b9f7732fd7811477", + "6c540f4ab586805c", + "c2831f17dd8de1e7" ] ] }, @@ -2997,7 +3000,8 @@ "links": [ "978ded7ba3456f70", "5dac1387a71bc55e", - "ed71da98200376bd" + "ed71da98200376bd", + "154f1cf1b90cb211" ], "x": 1225, "y": 820, @@ -3016,7 +3020,7 @@ "statusVal": "", "statusType": "auto", "x": 380, - "y": 1620, + "y": 1660, "wires": [] }, { @@ -3032,7 +3036,7 @@ "finalize": "", "libs": [], "x": 1670, - "y": 760, + "y": 620, "wires": [ [ "3ad77e23a54df2d0" @@ -3044,11 +3048,11 @@ "type": "ui-gauge", "z": "86a34ee77bf6db10", "name": "", - "group": "050148aff99031d4", + "group": "0b9ca135d0b7313a", "order": 1, "value": "payload", "valueType": "msg", - "width": "4", + "width": "2", "height": "5", "gtype": "gauge-tank", "gstyle": "needle", @@ -3094,7 +3098,7 @@ "styleGlow": false, "className": "", "x": 1870, - "y": 760, + "y": 620, "wires": [ [] ] @@ -3180,7 +3184,7 @@ "value": "payload", "valueType": "msg", "x": 870, - "y": 2060, + "y": 2220, "wires": [] }, { @@ -3196,13 +3200,345 @@ "finalize": "", "libs": [], "x": 690, - "y": 2060, + "y": 2220, "wires": [ [ "5f29ee2b49dce0b4" ] ] }, + { + "id": "c45101b9ef3d5620", + "type": "function", + "z": "86a34ee77bf6db10", + "name": "p1", + "func": "msg.payload = global.get(\"p1\");\nreturn msg;\n", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1490, + "y": 720, + "wires": [ + [ + "fb67d358e695b270" + ] + ] + }, + { + "id": "600315bb508c1e24", + "type": "function", + "z": "86a34ee77bf6db10", + "name": "p2", + "func": "msg.payload = global.get(\"p2\");\nreturn msg;\n", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1490, + "y": 760, + "wires": [ + [ + "8c8826a7c7d67914" + ] + ] + }, + { + "id": "7c11f7e0a46ac191", + "type": "ui-gauge", + "z": "86a34ee77bf6db10", + "name": "R2", + "group": "b7568fe107ccb2e6", + "order": 1, + "value": "payload", + "valueType": "msg", + "width": "2", + "height": "5", + "gtype": "gauge-tank", + "gstyle": "needle", + "title": "gauge", + "alwaysShowTitle": false, + "floatingTitlePosition": "top-left", + "units": "units", + "icon": "", + "prefix": "", + "suffix": "", + "segments": [ + { + "from": "0", + "color": "#e01b24", + "text": "", + "textType": "label" + }, + { + "from": "500", + "color": "#ff7800", + "text": "", + "textType": "label" + }, + { + "from": "1000", + "color": "#f6d32d", + "text": "", + "textType": "label" + }, + { + "from": "1500", + "color": "#2397d1", + "text": "", + "textType": "label" + } + ], + "min": 0, + "max": "3000", + "sizeThickness": 16, + "sizeGap": 4, + "sizeKeyThickness": 8, + "styleRounded": true, + "styleGlow": false, + "className": "", + "x": 1850, + "y": 740, + "wires": [ + [] + ] + }, + { + "id": "8e1d0abadbaf14be", + "type": "ui-gauge", + "z": "86a34ee77bf6db10", + "name": "", + "group": "6ba51f61417860c1", + "order": 1, + "value": "payload", + "valueType": "msg", + "width": "2", + "height": "5", + "gtype": "gauge-tank", + "gstyle": "needle", + "title": "gauge", + "alwaysShowTitle": false, + "floatingTitlePosition": "top-left", + "units": "units", + "icon": "", + "prefix": "", + "suffix": "", + "segments": [ + { + "from": "0", + "color": "#e01b24", + "text": "", + "textType": "label" + }, + { + "from": "500", + "color": "#ff7800", + "text": "", + "textType": "label" + }, + { + "from": "1000", + "color": "#f6d32d", + "text": "", + "textType": "label" + }, + { + "from": "1500", + "color": "#2397d1", + "text": "", + "textType": "label" + } + ], + "min": 0, + "max": "3000", + "sizeThickness": 16, + "sizeGap": 4, + "sizeKeyThickness": 8, + "styleRounded": true, + "styleGlow": false, + "className": "", + "x": 1830, + "y": 800, + "wires": [ + [] + ] + }, + { + "id": "40c04a051789b7e2", + "type": "ui-text", + "z": "86a34ee77bf6db10", + "group": "b7568fe107ccb2e6", + "order": 2, + "width": "1", + "height": "1", + "name": "", + "label": "A3", + "format": "{{msg.payload}}", + "layout": "row-left", + "style": false, + "font": "", + "fontSize": 16, + "color": "#717171", + "wrapText": false, + "className": "", + "value": "payload", + "valueType": "msg", + "x": 870, + "y": 2040, + "wires": [] + }, + { + "id": "b9f7732fd7811477", + "type": "function", + "z": "86a34ee77bf6db10", + "name": "a3", + "func": "msg.payload = Number(msg.payload.actionneurs[3]) ? \"🟩\" : \"🟥\";\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 690, + "y": 2040, + "wires": [ + [ + "40c04a051789b7e2" + ] + ] + }, + { + "id": "f1a19858c359889e", + "type": "ui-text", + "z": "86a34ee77bf6db10", + "group": "6ba51f61417860c1", + "order": 2, + "width": "1", + "height": "1", + "name": "", + "label": "A4", + "format": "{{msg.payload}}", + "layout": "row-left", + "style": false, + "font": "", + "fontSize": 16, + "color": "#717171", + "wrapText": false, + "className": "", + "value": "payload", + "valueType": "msg", + "x": 870, + "y": 2080, + "wires": [] + }, + { + "id": "6c540f4ab586805c", + "type": "function", + "z": "86a34ee77bf6db10", + "name": "a4", + "func": "msg.payload = Number(msg.payload.actionneurs[4]) ? \"🟩\" : \"🟥\";\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 690, + "y": 2080, + "wires": [ + [ + "f1a19858c359889e" + ] + ] + }, + { + "id": "84022e91b5bc83b9", + "type": "ui-text", + "z": "86a34ee77bf6db10", + "group": "6ba51f61417860c1", + "order": 5, + "width": "1", + "height": "1", + "name": "", + "label": "A5", + "format": "{{msg.payload}}", + "layout": "row-left", + "style": false, + "font": "", + "fontSize": 16, + "color": "#717171", + "wrapText": false, + "className": "", + "value": "payload", + "valueType": "msg", + "x": 870, + "y": 2120, + "wires": [] + }, + { + "id": "c2831f17dd8de1e7", + "type": "function", + "z": "86a34ee77bf6db10", + "name": "a5", + "func": "msg.payload = Number(msg.payload.actionneurs[5]) ? \"🟩\" : \"🟥\";\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 690, + "y": 2120, + "wires": [ + [ + "84022e91b5bc83b9" + ] + ] + }, + { + "id": "fb67d358e695b270", + "type": "function", + "z": "86a34ee77bf6db10", + "name": "x30", + "func": "msg.payload = msg.payload * 30;\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1670, + "y": 740, + "wires": [ + [ + "7c11f7e0a46ac191" + ] + ] + }, + { + "id": "8c8826a7c7d67914", + "type": "function", + "z": "86a34ee77bf6db10", + "name": "x30", + "func": "msg.payload = msg.payload * 30;\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1670, + "y": 800, + "wires": [ + [ + "8e1d0abadbaf14be" + ] + ] + }, { "id": "cefd0feeeaf4227c", "type": "function", @@ -4222,6 +4558,7 @@ "id": "ed71da98200376bd", "type": "link in", "z": "93dc5b41180d0746", + "d": true, "name": "link in 3", "links": [ "c613454bd48662e1" @@ -4239,7 +4576,7 @@ "type": "function", "z": "93dc5b41180d0746", "name": "réservoir", - "func": "let p0 = Number(global.get(\"p0\")) || 0;\nlet v0 = Number(global.get(\"v0\")) || 0;\n\nif (global.get(\"m0\")) {\n p0 += 0.3;\n}\n\nif (global.get(\"m2\")) {\n p0 += 0.3;\n}\n\nif (global.get(\"m3\")) {\n p0 += 0.3;\n}\n\nif (global.get(\"m4\")) {\n p0 += 0.3;\n}\n\np0 = p0 - v0 / 100;\n\nif (p0 > 100) p0 = 100;\nif (p0 < 0) p0 = 0;\nglobal.set(\"p0\", p0);\nmsg.payload = p0;\n\nglobal.set(\"c0\", p0 > 15);\nglobal.set(\"c1\", p0 > 40);\nglobal.set(\"c2\", p0 > 60);\nglobal.set(\"c3\", p0 > 75);\n\nreturn msg;", + "func": "let p0 = Number(global.get(\"p0\")) || 0;\nlet v0 = Number(global.get(\"v0\")) || 0;\n\nconst sarii = global.get(\"sarii\");\n\nfor (let i = 0 ; i < 4 ; i++) {\n if (sarii.moteurs[i]) {\n p0 += 0.3;\n }\n}\n\np0 = p0 - v0 / 100;\n\nif (p0 > 100) p0 = 100;\nif (p0 < 0) p0 = 0;\n\nglobal.set(\"p0\", p0);\nmsg.payload = p0;\n\nglobal.set(\"c0\", p0 > 15);\nglobal.set(\"c1\", p0 > 40);\nglobal.set(\"c2\", p0 > 60);\nglobal.set(\"c3\", p0 > 75);\n\nreturn msg;", "outputs": 1, "timeout": 0, "noerr": 0, @@ -4251,5 +4588,39 @@ "wires": [ [] ] + }, + { + "id": "154f1cf1b90cb211", + "type": "link in", + "z": "93dc5b41180d0746", + "name": "link in 5", + "links": [ + "c613454bd48662e1" + ], + "x": 105, + "y": 280, + "wires": [ + [ + "f44a82a1fa83049e" + ] + ] + }, + { + "id": "f44a82a1fa83049e", + "type": "function", + "z": "93dc5b41180d0746", + "name": "cuves", + "func": "const sarii = global.get(\"sarii\");\n\nlet p0 = Number(global.get(\"p0\")) || 0;\n\nif (sarii.actionneurs[0]) {\n p0 = p0 + 50 / 100;\n}\n\nif (sarii.actionneurs[1]) {\n p0 = p0 - 50 / 100;\n}\n\nglobal.set(\"c0\", p0 >= 100);\nif (p0 >= 100) { \n p0 = 100;\n}\n\nglobal.set(\"c1\", p0 <= 0);\nif (p0 <= 0) {\n p0 = 0;\n}\n\nglobal.set(\"p0\", p0);\n\n\nlet p1 = Number(global.get(\"p1\")) || 0;\n\nif (sarii.actionneurs[2]) {\n p1 = p1 + 50 / 100;\n}\n\nif (sarii.actionneurs[3]) {\n p1 = p1 - 50 / 100;\n}\n\nglobal.set(\"c2\", p1 >= 100);\nif (p1 >= 100) {\n p1 = 100;\n}\n\nglobal.set(\"c3\", p1 <= 0);\nif (p1 <= 0) {\n p1 = 0;\n}\n\nglobal.set(\"p1\", p1);\n\n\n\nlet p2 = Number(global.get(\"p2\")) || 0;\n\nif (sarii.actionneurs[4]) {\n p2 = p2 + 50 / 100;\n}\n\nif (sarii.actionneurs[5]) {\n p2 = p2 - 50 / 100;\n}\n\nglobal.set(\"c4\", p2 >= 100);\nif (p2 >= 100) {\n p2 = 100;\n}\n\nglobal.set(\"c5\", p2 <= 0);\nif (p2 <= 0) {\n p2 = 0;\n}\n\nglobal.set(\"p2\", p2);\n\nreturn msg;", + "outputs": 1, + "timeout": 0, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 290, + "y": 280, + "wires": [ + [] + ] } ] \ No newline at end of file diff --git a/43.md b/43.md new file mode 100644 index 0000000..f46b14c --- /dev/null +++ b/43.md @@ -0,0 +1,187 @@ +#include "main.hpp" +#include "autom.cpp" +#include +#include + +int marche_precedent = 0; +int marche_frontmontant = 0; + +int arret_precedent = 1; +int arret_frontdescedant = 0; + +int bouton_precedent[8]; +int bouton_frontmontant[8]; +int bouton_frontdescendant[8]; + +int cycle = 0; +long unsigned tempo = 0; + +int compteur[4]; + +int sens = 1; + +int ci = 0; +int mode_auto = 0; +int mode_manu = 0; +int etape = 0; +int etape_2 = 0; + +int c7_frontdescendant = 0; +int c7_precedent = 0; + +int moteur_plusutilise(); +int moteur_moinsutilise(); + +int main() +{ + mqtt_open(&client); + + std::atomic running{true}; + + while (running) + { + std::this_thread::sleep_for(std::chrono::seconds(1)); + } + + mqtt_close(); + return 0; +} + +void process() { + + // Détection des fronts + // front montant (état courant supérieur à l'état précédent) + // front descendant (état courant inférieur à l'état précédent) + // **************************************************************** + marche_frontmontant = marche > marche_precedent; + arret_frontdescedant = arret < arret_precedent; + + for(int i = 0; i < 8 ; i++) { + bouton_frontmontant[i] = bouton[i] > bouton_precedent[i]; + bouton_frontdescendant[i] = bouton[i] < bouton_precedent[i]; + } + + /* **************************************************************** + VOTRE PROGRAMME COMMENCE ICI + **************************************************************** */ + + if (etape == 0 && capteur[1] == 0) { + etape = 10; + tempo = millis(); + } + + // Etape 10 : 1 moteur allumé + if (etape == 10 && capteur[1] == 0 && millis() >= tempo + 2000) + { + etape = 12; + tempo = millis(); + } + + + if (etape == 11 && capteur[2] == 1 && millis() >= tempo + 2000) + { + etape = 0; + tempo = millis(); + } + + + // Etape 12 : 2 moteurs allumés + if (etape == 12 && capteur[1] == 0 && millis() >= tempo + 2000) + { + etape = 14; + tempo = millis(); + } + if (etape == 12 && capteur[2] == 1) + { + etape = 11; + } + if (etape == 13 && capteur[2] == 1 && millis() >= tempo + 2000) + { + etape = 11; + tempo = millis(); + } + + // Etape 14 : 3 moteurs allumés + if (etape == 14 && capteur[1] == 0 && millis() >= tempo + 2000) + { + etape = 16; + tempo = millis(); + } + if (etape == 14 && capteur[2] == 1) { + etape = 13; + } + if (etape == 15 && capteur[2] == 1 && millis() >= tempo + 2000) + { + etape = 13; + tempo = millis(); + } + + // Etape 13 : 4 moteurs allumés + if (etape == 16 && capteur[2] == 1) + { + etape = 15; + tempo = millis(); + } + + int moteur_precedent[4]; + for (int i = 0 ; i < 4 ; i++) { + moteur_precedent[i] = moteur[i]; + } + + moteur[0] = (etape == 10 || etape == 11 || etape == 12 || etape == 13 || etape == 14 || etape == 15 || etape == 16); + moteur[1] = (etape == 12 || etape == 13 || etape == 14 || etape == 15 || etape == 16); + moteur[2] = (etape == 14 || etape == 15 || etape == 16); + moteur[3] = (etape == 16); + + for (int i = 0; i < 4; i++) + { + if (moteur[i] > moteur_precedent[i]) + { + compteur[i] = compteur[i] + 1; + } + } + std::cout << compteur[0] << " " << compteur[1] << " " + << compteur[2] << " " << compteur[3] << std::endl; + + sortie[10] = etape; + + // Prêt pour un nouveau cycle + // L'état courant devient l'état précédent + marche_precedent = marche; + arret_precedent = arret; + for (int i = 0; i < 8; i++) + { + bouton_precedent[i] = bouton[i]; + } + c7_precedent = capteur[7]; + } + +int moteur_plusutilise() { + int index = -1; + int max = 0; + + for (int i = 0 ; i < 4 ; i++) { + if (compteur[i] > max) { + max = compteur[i]; + index = i; // Lequel est le maximum + } + } + + return index; +} + +int moteur_moinsutilise() { + int index = -1; + int min = INT32_MAX; + + for (int i = 0; i < 4; i++) + { + if (compteur[i] < min) + { + min = compteur[i]; + index = i; // Lequel est le maximum + } + } + + return index; +} diff --git a/autom.cpp b/autom.cpp index 198aee1..3260234 100644 --- a/autom.cpp +++ b/autom.cpp @@ -57,7 +57,7 @@ int i0, i1, i2, i3, i4, i5, i6, i7; int s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11; int m0, m1, m2, m3; int v0; -int p0; +int p0, p1, p2, p3; int a0, a1, a2, a3, a4, a5, a6, a7; int c0, c1, c2, c3, c4, c5, c6, c7; @@ -192,8 +192,28 @@ public: if (j.contains("v0") && j["v0"].is_number()) v0 = j["v0"].get(); - if (j.contains("p0") && j["p0"].is_number()) + if (j.contains("p0") && j["p0"].is_number()) { p0 = j["p0"].get(); + niveau[0] = j["p0"].get(); + } + + if (j.contains("p1") && j["p1"].is_number()) + { + p1 = j["p1"].get(); + niveau[1] = j["p1"].get(); + } + + if (j.contains("p2") && j["p2"].is_number()) + { + p2 = j["p2"].get(); + niveau[2] = j["p2"].get(); + } + + if (j.contains("p3") && j["p3"].is_number()) + { + p3 = j["p3"].get(); + niveau[3] = j["p3"].get(); + } process(); mqtt_send(&client); diff --git a/main.cpp b/main.cpp index a46e1f2..065d523 100644 --- a/main.cpp +++ b/main.cpp @@ -15,7 +15,9 @@ int bouton_frontdescendant[8]; int cycle = 0; long unsigned tempo = 0; -int compteur = 0; + +int compteur[4]; + int sens = 1; int ci = 0; @@ -27,6 +29,7 @@ int etape_2 = 0; int c7_frontdescendant = 0; int c7_precedent = 0; + int main() { mqtt_open(&client); @@ -42,7 +45,8 @@ int main() return 0; } -void process() { +void process() +{ // Détection des fronts // front montant (état courant supérieur à l'état précédent) @@ -50,25 +54,80 @@ void process() { // **************************************************************** marche_frontmontant = marche > marche_precedent; arret_frontdescedant = arret < arret_precedent; - for(int i = 0; i < 8 ; i++) { + + for (int i = 0; i < 8; i++) + { bouton_frontmontant[i] = bouton[i] > bouton_precedent[i]; bouton_frontdescendant[i] = bouton[i] < bouton_precedent[i]; } /* **************************************************************** + VOTRE PROGRAMME COMMENCE ICI + **************************************************************** */ - **************************************************************** */ + if (etape == 0 && capteur[1] == 0) { + etape = 10; + tempo = millis(); + } - m0 = i0; - m1 = i1; - m2 = i2; - m3 = i3; + // Etape 10 : 1 moteur allumé + if (etape == 10 && capteur[1] == 0 && millis() >= tempo + 2000) { + etape = 12; + tempo = millis(); + } + + if (etape == 10 && capteur[2] == 1 && millis() >= tempo + 2000) { + etape = 0; + } + + // Etape 12 : 2 moteur allumés + if (etape == 12 && capteur[1] == 0 && millis() >= tempo + 2000) { + etape = 14; + tempo = millis(); + } + + if (etape == 12 && capteur[2] == 1 && millis() >= tempo + 2000) { + etape = 10; + tempo = millis(); + } + + // Etape 14 : 3 moteur allumés + if (etape == 14 && capteur[1] == 0 && millis() >= tempo + 2000) { + etape = 16; + tempo = millis(); + } + + if (etape == 14 && capteur[2] == 1 && millis() >= tempo + 2000) { + etape = 12; + tempo = millis(); + } + + // Etape 16 : 4 moteur allumés + if (etape == 16 && capteur[2] == 1) { + etape = 14; + tempo = millis(); + } + + /* **************************************************************** + LES ACTIONS + **************************************************************** */ + moteur[0] = (etape == 10 || etape == 12 || etape == 14 || etape == 16); + moteur[1] = (etape == 12 || etape == 14 || etape == 16); + moteur[2] = (etape == 14 || etape == 16); + moteur[3] = (etape == 16); + + /* **************************************************************** + VOTRE PROGRAMME S'ARRETE ICI + **************************************************************** */ + + sortie[10] = etape; // Prêt pour un nouveau cycle // L'état courant devient l'état précédent marche_precedent = marche; arret_precedent = arret; - for (int i = 0; i < 8; i++) { + for (int i = 0; i < 8; i++) + { bouton_precedent[i] = bouton[i]; } c7_precedent = capteur[7];