diff --git a/HapticControl_Webserver/HapticControl.py b/HapticControl_Webserver/HapticControl.py index 469ea428d453ad2e43b959412b29fdb6275de976..97e8b7657a09a849db3594fe62992d9bdb0efec5 100644 --- a/HapticControl_Webserver/HapticControl.py +++ b/HapticControl_Webserver/HapticControl.py @@ -56,6 +56,11 @@ class HapticControl: pass return (value) + def setPos(self, value): + self.ser.write(b"swp" + str(value).encode("utf-8") + b"\r\n") + value = self.ser.readline() + return value; + def setStrenghtDet(self, value): self.ser.write(b"sws" + str(value).encode("utf-8") + b"\r\n") value = self.ser.readline() diff --git a/HapticControl_Webserver/main.py b/HapticControl_Webserver/main.py index 650a7f803a857b643aa89fc8f76db2746ad2edf9..2f2d828b307d6ab44b8c7fa2ad8eccc87b7f6e20 100644 --- a/HapticControl_Webserver/main.py +++ b/HapticControl_Webserver/main.py @@ -1,3 +1,4 @@ +import math import json import HapticControl import VolumeControl @@ -16,24 +17,41 @@ socketio = SocketIO(app, cors_allowed_origins="*") Volume = VolumeControl.VolumeControl() hapticControl = HapticControl.HapticControl() -mindB = 0 -maxdB = 0 + +global mindB +global maxdB +global nbDet +global scaleBtn +global valuePos + +mindB = -101.5 +maxdB = 25.5 nbDet = 36 +scaleBtn = 360 +valuePos = nbDet/2 """ Background thread """ def background_thread(): - print("Get value of the volume") - vol = 0 - db = 0 - while True: - value = hapticControl.getData(vol) - vol = value - valueScaled = value*(255/nbDet) - - db = 25.5-(0.5*(255-valueScaled)) + print("Get value of the volume") + global nbDet + global mindB + global maxdB + global scaleBtn + global valuePos + vol = 0 + db = 0 + while True: + scale = (255-(25.5-maxdB)/0.5)-(255-(25.5-mindB)/0.5)+1 + print("Scale: "+str(scale)) + + valuePos = hapticControl.getData(vol) + vol = valuePos + valueScaled = valuePos*(scale/nbDet) + + db = maxdB-(0.5*(scale-valueScaled)) db = round(db*2)/2 #db = db+6 #Compensate the buffer @@ -43,14 +61,15 @@ def background_thread(): #print("Set volume to: ", vol) Volume.setVolume(db) - if value is not None or db is not None: + if valuePos is not None or db is not None: datasend = { - 'volume': value, + 'volume': valuePos, 'dB': db, + 'nbDet': nbDet, } socketio.emit("updateSensorData", json.dumps(datasend)) socketio.sleep(0.2) - + """ Function receive input from client """ @@ -82,6 +101,31 @@ def snapPoint(data): print(hapticControl.setSnap(data)) socketio.emit("updateSnapPoint", data*100) +@socketio.on('detent') +def detent(message): + global mindB + global maxdB + global nbDet + global scaleBtn + global valuePos + + print(str(message)) + print(str(message["nbDet"])) + mindB = message["min"] + maxdB = message["max"] + nbDet = message["nbDet"] + scaleBtn = message["scaleBtn"] + + print("position: "+str(valuePos)) + print("nbDet: "+str(nbDet)) + if valuePos > nbDet: + valuePos = nbDet + hapticControl.setPos(valuePos) + + hapticControl.setMax(nbDet) + hapticControl.setDistDet(math.radians(scaleBtn/nbDet)) + + """ Server root index file """ @@ -118,8 +162,8 @@ decorator for disconnection @socketio.on("disconnect") def disconnect(): - print("Client disconnected", request.sid) + print("Client disconnected", request.sid) if __name__ == "__main__": - socketio.run(app, debug=True, host="0.0.0.0", port=8000) + socketio.run(app, debug=True, host="0.0.0.0", port=8000) diff --git a/HapticControl_Webserver/static/js/app.js b/HapticControl_Webserver/static/js/app.js index 8809f90c343dabc2233bd87b322c8f4977112e54..08f7893d42671c16544900cf9fb83fa961676220 100644 --- a/HapticControl_Webserver/static/js/app.js +++ b/HapticControl_Webserver/static/js/app.js @@ -47,7 +47,8 @@ $(document).ready(function () { function update(jsonmessage) { let data = jsonmessage.volume; let valuedB = jsonmessage.dB.toFixed(1); - let allowed = 36 - data; + let nbDet= jsonmessage.nbDet; + let allowed = nbDet - data; var dBVolumeDiv = document.getElementById("VolumeValue"); myDonutChart.data.datasets[0].data[0] = data; myDonutChart.data.datasets[0].data[1] = allowed; diff --git a/HapticControl_Webserver/static/js/param.js b/HapticControl_Webserver/static/js/param.js index a029ecfeb088b241fc9509a4fff2ac18e4f4fdd6..7e0386e88d643346fedea0f7d034dc775578a927 100644 --- a/HapticControl_Webserver/static/js/param.js +++ b/HapticControl_Webserver/static/js/param.js @@ -7,6 +7,7 @@ $(document).ready(function () { } else { fromSlider.value = from; } + setMaxDetent(from, to) } function controlToInput(toSlider, fromInput, toInput, controlSlider) { @@ -17,6 +18,7 @@ $(document).ready(function () { } else { toInput.value = from; } + setMaxDetent(from, to) } function controlFromSlider(fromSlider, toSlider, fromInput) { @@ -27,6 +29,7 @@ $(document).ready(function () { } else { fromInput.value = from; } + setMaxDetent(from, to) } function controlToSlider(fromSlider, toSlider, toInput) { @@ -38,6 +41,7 @@ $(document).ready(function () { toInput.value = from; toSlider.value = from; } + setMaxDetent(from, to) } function getParsed(currentFrom, currentTo) { @@ -46,9 +50,44 @@ $(document).ready(function () { console.log(from, to); return [from, to]; } - - function getMaxDetent(min,max){ - return (max-min)*2; + document.addEventListener('DOMContentLoaded', function() { + + }); + function setMaxDetent(mindB,maxdB){ + const maxi = (maxdB-mindB)*2+1; + console.log(maxi); + document.getElementById('InputDetent').max = maxi; + if (document.getElementById('InputDetent').value > maxi){ + document.getElementById('InputDetent').value = maxi; + document.getElementById('SliderDetent').value = maxi; + } + sendDetentParam(); + } + + function controlSliderDetent(SliderDetent, InputDetent) { + const value = eval(SliderDetent.value); + if (value > document.getElementById('InputDetent').max){ + SliderDetent.value = document.getElementById('InputDetent').max; + } + sendDetentParam(); + } + + function controlInputDetent(SliderDetent, InputDetent) { + const value = eval(InputDetent.value); + if (value > document.getElementById('InputDetent').max){ + InputDetent.value = document.getElementById('InputDetent').max; + } + SliderDetent.value = InputDetent.value; + sendDetentParam(); + } + function sendDetentParam() { + var messageData = { + nbDet: eval(InputDetent.value), + min: eval(InputMin.value), + max: eval(InputMax.value), + scaleBtn: eval(InputScale.value) + }; + socket.emit("detent", messageData); } function sendMessage(param, Input) { @@ -70,11 +109,14 @@ $(document).ready(function () { const InputStrenghtDet = document.getElementById('InputStrenghtDet'); const InputSnapPoint = document.getElementById('InputSnap'); - SliderMin.oninput = () => controlFromSlider(SliderMin, SliderMax, InputMin); SliderMax.oninput = () => controlToSlider(SliderMin, SliderMax, InputMax); InputMin.oninput = () => controlFromInput(SliderMin, InputMin, InputMax, SliderMax); InputMax.oninput = () => controlToInput(SliderMax, InputMin, InputMax, SliderMax); + + SliderDetent.oninput = () => controlSliderDetent(SliderDetent, InputDetent); + InputDetent.oninput = () => controlInputDetent(SliderDetent, InputDetent); + InputScale.oninput = () => sendDetentParam(); InputStrenghtDet.oninput = () => sendMessage("strenghtDet", InputStrenghtDet); InputStrenghtEnd.oninput = () => sendMessage("strenghtEnd", InputStrenghtEnd); diff --git a/HapticControl_Webserver/templates/config.html b/HapticControl_Webserver/templates/config.html index f6e77d9d0d4555037ecef7de979d8c8f321675a1..13ed15589ec166f38738498173cab9cb5d9c7ff1 100644 --- a/HapticControl_Webserver/templates/config.html +++ b/HapticControl_Webserver/templates/config.html @@ -73,8 +73,8 @@ dB Min : </div> </div> - <input id="SliderMin" type="range" value="-50.5" min="-101.5" max="25.5" step="0.5" /> - <input class="form_control_container__time__input right-cell" type="number" id="InputMin" value="-50.5" min="-101.5" + <input id="SliderMin" type="range" value="-101.5" min="-101.5" max="25.5" step="0.5" /> + <input class="form_control_container__time__input right-cell" type="number" id="InputMin" value="-101.5" min="-101.5" max="25.5" step="0.5" /> </div> <div class="sliders_control" id="sliderMax_dB_block"> @@ -83,8 +83,8 @@ dB Max : </div> </div> - <input id="SliderMax" type="range" value="12.5" min="-101.5" max="25.5" step="0.5" /> - <input class="form_control_container__time__input right-cell" type="number" id="InputMax" value="12.5" + <input id="SliderMax" type="range" value="25.5" min="-101.5" max="25.5" step="0.5" /> + <input class="form_control_container__time__input right-cell" type="number" id="InputMax" value="25.5" min="-101.5" max="25.5" step="0.5" /> </div> <div class="sliders_control" id="sliderNbrCrans_block"> @@ -93,7 +93,7 @@ Nombre de crans : </div> </div> - <input id="SliderNumDet" type="range" value="36" min="0" max="255" /> + <input id="SliderDetent" type="range" value="36" min="0" max="255" /> <input class="form_control_container__time__input right-cell" type="number" id="InputDetent" value="36" min="0" max="255" /> </div>