From 8ccdc5e47c0c3f17900759f0e86c836e345d9ea8 Mon Sep 17 00:00:00 2001 From: Thomas Pietrzak Date: Wed, 27 Apr 2022 11:37:47 +0200 Subject: [PATCH] Fixed setAngle --- .qt_for_python/uic/magiccircle.py | 97 +++++++++++++++++++ .vscode/settings.json | 6 ++ .../TactonPlayer/TactonPlayerPreciseNew.cpp | 27 +++--- TactonDebug/AngleTester/angletester.cpp | 21 +--- TactonDebug/MagicCircle/magiccircle.ui | 2 +- 5 files changed, 122 insertions(+), 31 deletions(-) create mode 100644 .qt_for_python/uic/magiccircle.py create mode 100644 .vscode/settings.json diff --git a/.qt_for_python/uic/magiccircle.py b/.qt_for_python/uic/magiccircle.py new file mode 100644 index 0000000..8a04a76 --- /dev/null +++ b/.qt_for_python/uic/magiccircle.py @@ -0,0 +1,97 @@ +# Form implementation generated from reading ui file '/Users/tom/Documents/src/tactonlibrary-git/TactonDebug/MagicCircle/magiccircle.ui' +# +# Created by: PyQt6 UI code generator 6.2.0 +# +# WARNING: Any manual changes made to this file will be lost when pyuic6 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt6 import QtCore, QtGui, QtWidgets + + +class Ui_MagicCircleClass(object): + def setupUi(self, MagicCircleClass): + MagicCircleClass.setObjectName("MagicCircleClass") + MagicCircleClass.resize(268, 448) + self.centralWidget = QtWidgets.QWidget(MagicCircleClass) + self.centralWidget.setObjectName("centralWidget") + self.verticalLayout = QtWidgets.QVBoxLayout(self.centralWidget) + self.verticalLayout.setContentsMargins(11, 11, 11, 11) + self.verticalLayout.setSpacing(6) + self.verticalLayout.setObjectName("verticalLayout") + self._canvas = QtWidgets.QGraphicsView(self.centralWidget) + self._canvas.setMinimumSize(QtCore.QSize(250, 250)) + self._canvas.setMaximumSize(QtCore.QSize(250, 250)) + self._canvas.setObjectName("_canvas") + self.verticalLayout.addWidget(self._canvas) + self.gridLayout_2 = QtWidgets.QGridLayout() + self.gridLayout_2.setSpacing(6) + self.gridLayout_2.setObjectName("gridLayout_2") + self.label_2 = QtWidgets.QLabel(self.centralWidget) + self.label_2.setObjectName("label_2") + self.gridLayout_2.addWidget(self.label_2, 2, 1, 1, 1) + self._speed = QtWidgets.QSpinBox(self.centralWidget) + self._speed.setMinimum(1) + self._speed.setMaximum(3000) + self._speed.setProperty("value", 180) + self._speed.setObjectName("_speed") + self.gridLayout_2.addWidget(self._speed, 2, 2, 1, 1) + self.label_3 = QtWidgets.QLabel(self.centralWidget) + self.label_3.setObjectName("label_3") + self.gridLayout_2.addWidget(self.label_3, 3, 1, 1, 1) + self._direction = QtWidgets.QComboBox(self.centralWidget) + self._direction.setObjectName("_direction") + self._direction.addItem("") + self._direction.addItem("") + self.gridLayout_2.addWidget(self._direction, 1, 2, 1, 1) + self.label = QtWidgets.QLabel(self.centralWidget) + self.label.setObjectName("label") + self.gridLayout_2.addWidget(self.label, 1, 1, 1, 1) + self._resolution = QtWidgets.QSpinBox(self.centralWidget) + self._resolution.setMinimum(4) + self._resolution.setMaximum(720) + self._resolution.setProperty("value", 360) + self._resolution.setObjectName("_resolution") + self.gridLayout_2.addWidget(self._resolution, 3, 2, 1, 1) + self.label_4 = QtWidgets.QLabel(self.centralWidget) + self.label_4.setObjectName("label_4") + self.gridLayout_2.addWidget(self.label_4, 0, 1, 1, 1) + self._frequency = QtWidgets.QSpinBox(self.centralWidget) + self._frequency.setMinimum(1) + self._frequency.setMaximum(400) + self._frequency.setProperty("value", 250) + self._frequency.setObjectName("_frequency") + self.gridLayout_2.addWidget(self._frequency, 0, 2, 1, 1) + self.verticalLayout.addLayout(self.gridLayout_2) + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setSpacing(6) + self.horizontalLayout.setObjectName("horizontalLayout") + self._stop = QtWidgets.QPushButton(self.centralWidget) + self._stop.setObjectName("_stop") + self.horizontalLayout.addWidget(self._stop) + self._play = QtWidgets.QPushButton(self.centralWidget) + self._play.setObjectName("_play") + self.horizontalLayout.addWidget(self._play) + self.verticalLayout.addLayout(self.horizontalLayout) + MagicCircleClass.setCentralWidget(self.centralWidget) + + self.retranslateUi(MagicCircleClass) + QtCore.QMetaObject.connectSlotsByName(MagicCircleClass) + MagicCircleClass.setTabOrder(self._frequency, self._direction) + MagicCircleClass.setTabOrder(self._direction, self._speed) + MagicCircleClass.setTabOrder(self._speed, self._resolution) + MagicCircleClass.setTabOrder(self._resolution, self._play) + MagicCircleClass.setTabOrder(self._play, self._stop) + MagicCircleClass.setTabOrder(self._stop, self._canvas) + + def retranslateUi(self, MagicCircleClass): + _translate = QtCore.QCoreApplication.translate + MagicCircleClass.setWindowTitle(_translate("MagicCircleClass", "MagicCircle")) + self.label_2.setText(_translate("MagicCircleClass", "Speed (degrees/s)")) + self.label_3.setText(_translate("MagicCircleClass", "Resolution (steps/360°)")) + self._direction.setItemText(0, _translate("MagicCircleClass", "Clockwise")) + self._direction.setItemText(1, _translate("MagicCircleClass", "Counterclockwise")) + self.label.setText(_translate("MagicCircleClass", "Direction")) + self.label_4.setText(_translate("MagicCircleClass", "Frequency")) + self._stop.setText(_translate("MagicCircleClass", "Stop")) + self._play.setText(_translate("MagicCircleClass", "Play")) diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..94ea0c9 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "complex": "cpp", + "cmath": "cpp" + } +} \ No newline at end of file diff --git a/Arduino/TactonPlayer/TactonPlayerPreciseNew.cpp b/Arduino/TactonPlayer/TactonPlayerPreciseNew.cpp index 198515d..9e9a257 100644 --- a/Arduino/TactonPlayer/TactonPlayerPreciseNew.cpp +++ b/Arduino/TactonPlayer/TactonPlayerPreciseNew.cpp @@ -70,35 +70,38 @@ void TactonPlayerPreciseNew::setAmplitudes(byte nbtactors, byte *amplitudes) void TactonPlayerPreciseNew::setAngle(unsigned int angle) { - unsigned int x = cos(angle * M_PI / 180.0); - unsigned int y = sin(angle * M_PI / 180.0); - + byte amplitudes[4]; + while (angle >= 360) + angle -= 360; + float x = cos(angle * M_PI / 180.0); + float y = sin(angle * M_PI / 180.0); + //vertical if (angle < 180) { - analogWrite(_pins[TACTOR_UP], 255 * y * y); - analogWrite(_pins[TACTOR_DOWN], 0); + amplitudes[TACTOR_UP] = 255 * y; + amplitudes[TACTOR_DOWN] = 0; } else { - analogWrite(_pins[TACTOR_DOWN], - 255 * y * y); - analogWrite(_pins[TACTOR_UP], 0); + amplitudes[TACTOR_DOWN] = - 255 * y; + amplitudes[TACTOR_UP] = 0; } //horizontal if (angle < 90 || angle > 270) { - analogWrite(_pins[TACTOR_RIGHT], 255 * x * x); - analogWrite(_pins[TACTOR_LEFT], 0); + amplitudes[TACTOR_RIGHT] = 255 * x; + amplitudes[TACTOR_LEFT] = 0; } else { - analogWrite(_pins[TACTOR_RIGHT], 0); - analogWrite(_pins[TACTOR_LEFT], - 255 * x * x); + amplitudes[TACTOR_LEFT] = - 255 * x; + amplitudes[TACTOR_RIGHT] = 0; } + setAmplitudes(4, amplitudes); } - //Stop any vibration void TactonPlayerPreciseNew::stop() { diff --git a/TactonDebug/AngleTester/angletester.cpp b/TactonDebug/AngleTester/angletester.cpp index afa7f2d..86ee55a 100644 --- a/TactonDebug/AngleTester/angletester.cpp +++ b/TactonDebug/AngleTester/angletester.cpp @@ -40,28 +40,13 @@ void AngleTester::setFrequency(int frequency) void AngleTester::setAngle(int angle) { - unsigned char amplitudes[4]; - memset(amplitudes, 0, 4); - -// angle = 90; - - //vertical - if (angle < 180) - amplitudes[1] = 255 * sin(angle * M_PI / 180.0); - else - amplitudes[3] = - 255 * sin(angle * M_PI / 180.0); - - //horizontal - if (angle < 90 ||angle > 270) - amplitudes[0] = 255 * cos(angle * M_PI / 180.0); - else - amplitudes[2] = - 255 * cos(angle * M_PI / 180.0); - - _tactonPlayer->setAmplitudes(4, amplitudes); + _tactonPlayer->playAngle(angle); + return; } void AngleTester::play(bool) { + setFrequency(_frequency->value()); setAngle(_angle->value()); } diff --git a/TactonDebug/MagicCircle/magiccircle.ui b/TactonDebug/MagicCircle/magiccircle.ui index acbe50c..79e988e 100644 --- a/TactonDebug/MagicCircle/magiccircle.ui +++ b/TactonDebug/MagicCircle/magiccircle.ui @@ -110,7 +110,7 @@ 400 - 300 + 250 -- 2.30.2