Fixed setAngle
authorThomas Pietrzak <thomas.pietrzak@gmail.com>
Wed, 27 Apr 2022 09:37:47 +0000 (11:37 +0200)
committerThomas Pietrzak <thomas.pietrzak@gmail.com>
Wed, 27 Apr 2022 09:37:47 +0000 (11:37 +0200)
.qt_for_python/uic/magiccircle.py [new file with mode: 0644]
.vscode/settings.json [new file with mode: 0644]
Arduino/TactonPlayer/TactonPlayerPreciseNew.cpp
TactonDebug/AngleTester/angletester.cpp
TactonDebug/MagicCircle/magiccircle.ui

diff --git a/.qt_for_python/uic/magiccircle.py b/.qt_for_python/uic/magiccircle.py
new file mode 100644 (file)
index 0000000..8a04a76
--- /dev/null
@@ -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 (file)
index 0000000..94ea0c9
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "files.associations": {
+    "complex": "cpp",
+    "cmath": "cpp"
+  }
+}
\ No newline at end of file
index 198515d04c4587f15be08c28b1de379e8b3d1d74..9e9a2572544af3e9c79a97cc2c4d6520f0b025e5 100644 (file)
@@ -70,35 +70,38 @@ void TactonPlayerPreciseNew::setAmplitudes(byte nbtactors, byte *amplitudes)
 \r
 void TactonPlayerPreciseNew::setAngle(unsigned int angle)\r
 {\r
-       unsigned int x = cos(angle * M_PI / 180.0);\r
-       unsigned int y = sin(angle * M_PI / 180.0);\r
-       \r
+       byte amplitudes[4];\r
+       while (angle >= 360)\r
+               angle -= 360;\r
+       float x = cos(angle * M_PI / 180.0);\r
+       float y = sin(angle * M_PI / 180.0);\r
+\r
        //vertical\r
        if (angle < 180)\r
        {\r
-               analogWrite(_pins[TACTOR_UP], 255 * y * y);\r
-               analogWrite(_pins[TACTOR_DOWN], 0);\r
+               amplitudes[TACTOR_UP] = 255 * y;\r
+               amplitudes[TACTOR_DOWN] =  0;\r
        }\r
        else\r
        {\r
-               analogWrite(_pins[TACTOR_DOWN], - 255 * y * y);\r
-               analogWrite(_pins[TACTOR_UP], 0);\r
+               amplitudes[TACTOR_DOWN] = - 255 * y;\r
+               amplitudes[TACTOR_UP] =  0;\r
        }\r
 \r
        //horizontal\r
        if (angle < 90 || angle > 270)\r
        {\r
-               analogWrite(_pins[TACTOR_RIGHT], 255 * x * x);\r
-               analogWrite(_pins[TACTOR_LEFT], 0);\r
+               amplitudes[TACTOR_RIGHT] = 255 * x;\r
+               amplitudes[TACTOR_LEFT] =  0;\r
        }\r
        else\r
        {\r
-               analogWrite(_pins[TACTOR_RIGHT], 0);\r
-               analogWrite(_pins[TACTOR_LEFT], - 255 * x * x);\r
+               amplitudes[TACTOR_LEFT] = - 255 * x;\r
+               amplitudes[TACTOR_RIGHT] =  0;\r
        }\r
+       setAmplitudes(4, amplitudes);\r
 }\r
 \r
-\r
 //Stop any vibration\r
 void TactonPlayerPreciseNew::stop()\r
 {\r
index afa7f2d3f183bdd16ea1d22a3d03ef3a3e896cbb..86ee55a84a30c356fad8f429479aea2da83c7bc5 100644 (file)
@@ -40,28 +40,13 @@ void AngleTester::setFrequency(int frequency)
 \r
 void AngleTester::setAngle(int angle)\r
 {\r
-       unsigned char amplitudes[4];\r
-       memset(amplitudes, 0, 4);\r
-\r
-//     angle = 90;\r
-\r
-       //vertical\r
-       if (angle < 180)\r
-               amplitudes[1] = 255 * sin(angle * M_PI / 180.0);\r
-       else\r
-               amplitudes[3] = - 255 * sin(angle * M_PI / 180.0);\r
-\r
-       //horizontal\r
-       if (angle < 90 ||angle > 270)\r
-               amplitudes[0] = 255 * cos(angle * M_PI / 180.0);\r
-       else\r
-               amplitudes[2] = - 255 * cos(angle * M_PI / 180.0);\r
-\r
-       _tactonPlayer->setAmplitudes(4, amplitudes);\r
+       _tactonPlayer->playAngle(angle);\r
+       return;\r
 }\r
 \r
 void AngleTester::play(bool)\r
 {\r
+       setFrequency(_frequency->value());\r
        setAngle(_angle->value());\r
 }\r
 \r
index acbe50ce548f41a377d79d54ca6651456d5924a6..79e988e574dd306790c0d0cb98ad63f6ab7f38ba 100644 (file)
          <number>400</number>\r
         </property>\r
         <property name="value">\r
-         <number>300</number>\r
+         <number>250</number>\r
         </property>\r
        </widget>\r
       </item>\r