From c5dd6761141323829417800c8967dc0a60fd3e26 Mon Sep 17 00:00:00 2001 From: Gabri6 Date: Thu, 4 Apr 2024 14:02:01 +0200 Subject: [PATCH] added examples of melodies, and modified the method of playing notes --- examples | 29 ++++++++++++ main.cpp | 133 +++++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 134 insertions(+), 28 deletions(-) create mode 100644 examples diff --git a/examples b/examples new file mode 100644 index 0000000..492cd4b --- /dev/null +++ b/examples @@ -0,0 +1,29 @@ +top gun: +0a4a432321a1a012a123a202a1 + +interstellar: +04004014114124224234334304a04a14a14a24a24a34a34a + +hedwige theme: +1aa32a1aaa5a4aaaaa2aaaaa1aa32a0aaa2a + +frere jacques: +01200120234a234a45432a045432a0a010a010 + +exorcist: +0304023050a04503040230304023 + +star wars: +0a4a3215a4a3215a4a3231aaa0a4a3215a4a3215a4a3231 + +twinkle twinkle little star: +0044554a3322110a4433221a4433221a0044554a3322110a + +au clair de la lune: +33345a4a35443aaa33345a4a45443aaa44441a1a43210aaa33345a4a35443aaa + +jingle bells: +222a222a24012aaa3333322221121a4a222a222a24012aaa3333322244310aaa + +my way: +05aaa50505aa50545a054433a205aaa50505aa50545a054433a \ No newline at end of file diff --git a/main.cpp b/main.cpp index fcd27d3..20c5944 100644 --- a/main.cpp +++ b/main.cpp @@ -21,7 +21,7 @@ int _targetJointTorqueGripper = 1140; float _proportionnalIncrement = 0.025f; float _proportionnalIncrementAbove = 0.01f; float _threshold= 1.9; -int waitTime = 0; +int waitTime = 100; std::array,9> notes_position = {{{511, 511, 511, 511, 511, 511}, {511, 511, 511, 511, 511, 511}, {511, 511, 511, 511, 511, 511}, {511, 511, 511, 511, 511, 511}, {511, 511, 511, 511, 511, 511}, {511, 511, 511, 511, 511, 511}, {511, 511, 511, 511, 511, 511}, {511, 511, 511, 511, 511, 511}, {511, 511, 511, 511, 511, 511}}}; //short unsigned int notes_position[54] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54}; std::array playingPosition = {{511, 410, 515, 515, 685, 589}}; //511, 310, 485, 515, 665, 592 @@ -128,6 +128,7 @@ void teachTarget() _oDxlHandler.enableTorque(true); //gives Hardware error std::cout<<"===Enabling Torque==="< l_vTargetJointPosition; - switch(myNote){ - case 1: + + if (myNote >= 0 && myNote <= 9) + { + l_vTargetJointPosition.push_back(notes_position[myNote][0]); + l_vTargetJointPosition.push_back(notes_position[myNote][1]); + l_vTargetJointPosition.push_back(notes_position[myNote][2] + 200); + l_vTargetJointPosition.push_back(notes_position[myNote][3]); + l_vTargetJointPosition.push_back(notes_position[myNote][4]); + l_vTargetJointPosition.push_back(playingPosition[5]); //mettre pince à convertAnglesToJointCmd(38.0f) (à revérifier si ça ne change pas avec un poppy différent) + + _oDxlHandler.sendTargetJointPosition(l_vTargetJointPosition); + + std::this_thread::sleep_for(std::chrono::milliseconds(75)); + + std::vector l_vTargetJoint1Position; + + l_vTargetJoint1Position.push_back(notes_position[myNote][0]); + l_vTargetJoint1Position.push_back(notes_position[myNote][1]); + l_vTargetJoint1Position.push_back(notes_position[myNote][2]); + l_vTargetJoint1Position.push_back(notes_position[myNote][3]); + l_vTargetJoint1Position.push_back(notes_position[myNote][4]); + l_vTargetJoint1Position.push_back(playingPosition[5]); //mettre pince à convertAnglesToJointCmd(38.0f) (à revérifier si ça ne change pas avec un poppy différent) + + _oDxlHandler.sendTargetJointPosition(l_vTargetJoint1Position); + + std::this_thread::sleep_for(std::chrono::milliseconds(waitTime)); //time period in milliseconds + + std::vector l_vTargetJoint2Position; + + l_vTargetJoint2Position.push_back(notes_position[myNote][0]); + l_vTargetJoint2Position.push_back(notes_position[myNote][1]); + l_vTargetJoint2Position.push_back(notes_position[myNote][2] + 200); + l_vTargetJoint2Position.push_back(notes_position[myNote][3]); + l_vTargetJoint2Position.push_back(notes_position[myNote][4]); + l_vTargetJoint2Position.push_back(playingPosition[5]); //mettre pince à convertAnglesToJointCmd(38.0f) (à revérifier si ça ne change pas avec un poppy différent) + + _oDxlHandler.sendTargetJointPosition(l_vTargetJoint2Position); + } + else + { + goToPlayingPosition(); + + std::this_thread::sleep_for(std::chrono::milliseconds(waitTime * 2)); //time period in milliseconds + } + /*switch(myNote){ + case 0: l_vTargetJointPosition.push_back(notes_position[0][0]); l_vTargetJointPosition.push_back(notes_position[0][1]); l_vTargetJointPosition.push_back(notes_position[0][2]); l_vTargetJointPosition.push_back(notes_position[0][3]); l_vTargetJointPosition.push_back(notes_position[0][4]); break; - case 2: + case 1: l_vTargetJointPosition.push_back(notes_position[1][0]); l_vTargetJointPosition.push_back(notes_position[1][1]); l_vTargetJointPosition.push_back(notes_position[1][2]); l_vTargetJointPosition.push_back(notes_position[1][3]); l_vTargetJointPosition.push_back(notes_position[1][4]); break; - case 3: + case 2: l_vTargetJointPosition.push_back(notes_position[2][0]); l_vTargetJointPosition.push_back(notes_position[2][1]); l_vTargetJointPosition.push_back(notes_position[2][2]); l_vTargetJointPosition.push_back(notes_position[2][3]); l_vTargetJointPosition.push_back(notes_position[2][4]); break; - case 4: + case 3: l_vTargetJointPosition.push_back(notes_position[3][0]); l_vTargetJointPosition.push_back(notes_position[3][1]); l_vTargetJointPosition.push_back(notes_position[3][2]); l_vTargetJointPosition.push_back(notes_position[3][3]); l_vTargetJointPosition.push_back(notes_position[3][4]); break; - case 5: + case 4: l_vTargetJointPosition.push_back(notes_position[4][0]); l_vTargetJointPosition.push_back(notes_position[4][1]); l_vTargetJointPosition.push_back(notes_position[4][2]); l_vTargetJointPosition.push_back(notes_position[4][3]); l_vTargetJointPosition.push_back(notes_position[4][4]); break; - case 6: + case 5: l_vTargetJointPosition.push_back(notes_position[5][0]); l_vTargetJointPosition.push_back(notes_position[5][1]); l_vTargetJointPosition.push_back(notes_position[5][2]); l_vTargetJointPosition.push_back(notes_position[5][3]); l_vTargetJointPosition.push_back(notes_position[5][4]); break; - case 7: + case 6: l_vTargetJointPosition.push_back(notes_position[6][0]); l_vTargetJointPosition.push_back(notes_position[6][1]); l_vTargetJointPosition.push_back(notes_position[6][2]); l_vTargetJointPosition.push_back(notes_position[6][3]); l_vTargetJointPosition.push_back(notes_position[6][4]); break; - case 8: + case 7: l_vTargetJointPosition.push_back(notes_position[7][0]); l_vTargetJointPosition.push_back(notes_position[7][1]); l_vTargetJointPosition.push_back(notes_position[7][2]); l_vTargetJointPosition.push_back(notes_position[7][3]); l_vTargetJointPosition.push_back(notes_position[7][4]); break; - case 9: + case 8: l_vTargetJointPosition.push_back(notes_position[8][0]); l_vTargetJointPosition.push_back(notes_position[8][1]); l_vTargetJointPosition.push_back(notes_position[8][2]); l_vTargetJointPosition.push_back(notes_position[8][3]); l_vTargetJointPosition.push_back(notes_position[8][4]); break; + case 9: + l_vTargetJointPosition.push_back(notes_position[9][0]); + l_vTargetJointPosition.push_back(notes_position[9][1]); + l_vTargetJointPosition.push_back(notes_position[9][2]); + l_vTargetJointPosition.push_back(notes_position[9][3]); + l_vTargetJointPosition.push_back(notes_position[9][4]); + break; default: l_vTargetJointPosition.push_back(playingPosition[0]); l_vTargetJointPosition.push_back(playingPosition[1]); @@ -277,10 +328,7 @@ void playNote(int myNote) l_vTargetJointPosition.push_back(playingPosition[3]); l_vTargetJointPosition.push_back(playingPosition[4]); break; - } - l_vTargetJointPosition.push_back(playingPosition[5]); //mettre pince à convertAnglesToJointCmd(38.0f) (à revérifier si ça ne change pas avec un poppy différent) - _oDxlHandler.sendTargetJointPosition(l_vTargetJointPosition); - std::this_thread::sleep_for(std::chrono::milliseconds(waitTime)); //time period in milliseconds + }*/ } void playMultipleNotes(std::string myMusic) @@ -288,7 +336,7 @@ void playMultipleNotes(std::string myMusic) for (char& c : myMusic) { std::cout< Target2JointPosition; - Target2JointPosition.push_back(notes_position[5][0]); - Target2JointPosition.push_back(notes_position[5][1]); - Target2JointPosition.push_back(notes_position[5][2]); - Target2JointPosition.push_back(notes_position[5][3]); - Target2JointPosition.push_back(notes_position[5][4]); + Target2JointPosition.push_back(notes_position[2][0]); + Target2JointPosition.push_back(notes_position[2][1]); + Target2JointPosition.push_back(notes_position[2][2]); + Target2JointPosition.push_back(notes_position[2][3]); + Target2JointPosition.push_back(notes_position[2][4]); Target2JointPosition.push_back(playingPosition[5]); _oDxlHandler.sendTargetJointPosition(Target2JointPosition); + + std::vector Target3JointPosition; + Target3JointPosition.push_back(notes_position[5][0]); + Target3JointPosition.push_back(notes_position[5][1]); + Target3JointPosition.push_back(notes_position[5][2]); + Target3JointPosition.push_back(notes_position[5][3]); + Target3JointPosition.push_back(notes_position[5][4]); + Target3JointPosition.push_back(playingPosition[5]); + + _oDxlHandler.sendTargetJointPosition(Target3JointPosition); } else if (upOrDown == "d" || upOrDown == "D") { @@ -350,14 +408,24 @@ void glissendo() std::this_thread::sleep_for(std::chrono::milliseconds(150)); std::vector Target2JointPosition; - Target2JointPosition.push_back(notes_position[0][0]); - Target2JointPosition.push_back(notes_position[0][1]); - Target2JointPosition.push_back(notes_position[0][2]); - Target2JointPosition.push_back(notes_position[0][3]); - Target2JointPosition.push_back(notes_position[0][4]); + Target2JointPosition.push_back(notes_position[2][0]); + Target2JointPosition.push_back(notes_position[2][1]); + Target2JointPosition.push_back(notes_position[2][2]); + Target2JointPosition.push_back(notes_position[2][3]); + Target2JointPosition.push_back(notes_position[2][4]); Target2JointPosition.push_back(playingPosition[5]); _oDxlHandler.sendTargetJointPosition(Target2JointPosition); + + std::vector Target3JointPosition; + Target3JointPosition.push_back(notes_position[0][0]); + Target3JointPosition.push_back(notes_position[0][1]); + Target3JointPosition.push_back(notes_position[0][2]); + Target3JointPosition.push_back(notes_position[0][3]); + Target3JointPosition.push_back(notes_position[0][4]); + Target3JointPosition.push_back(playingPosition[5]); + + _oDxlHandler.sendTargetJointPosition(Target3JointPosition); } else { @@ -437,6 +505,15 @@ int main() std::cout<<"Write 'stop' to stop"<> myMusic; } + else if (myMusic == "demo") + { + playMultipleNotes("0a4a4a32321a1a012a123a202a1"); + std::cout << std::endl; + std::cout<<"Write the notes you want to play (from 0 to 8), without spaces between them"<> myMusic; + + } else { playMultipleNotes(myMusic);