# # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # #mindsensors.com invests time and resources providing this open source code, #please support mindsensors.com by purchasing products from mindsensors.com! #Learn more product option visit us @ http://www.mindsensors.com/ import time from PiStorms_GRX import PiStorms_GRX, RCServo, GrovePort from PiStormsCom_GRX import GRXCom psm = PiStorms_GRX() leftServo = RCServo("BBS1", 1690) rightServo = RCServo("BAS1", 1350) leftEncoder = GrovePort("BBD1", type=GRXCom.TYPE.ENCODER) # no mode, not associated with any servo rightEncoder = GrovePort("BAD2", type=GRXCom.TYPE.ENCODER) GRXCom.I2C.A.writeByte(GRXCom.REGISTER.COMMAND, GRXCom.COMMAND.RESET_ENCODERS) GRXCom.I2C.B.writeByte(GRXCom.REGISTER.COMMAND, GRXCom.COMMAND.RESET_ENCODERS) for i in range(200): try: leftEncoderValue = -1*leftEncoder.comm.readEncoderValue() rightEncoderValue = rightEncoder.comm.readEncoderValue() print "{:6d} {:6d}".format(leftEncoderValue, rightEncoderValue) if leftEncoderValue < rightEncoderValue:
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # #mindsensors.com invests time and resources providing this open source code, #please support mindsensors.com by purchasing products from mindsensors.com! #Learn more product option visit us @ http://www.mindsensors.com/ from PiStorms_GRX import PiStorms_GRX from PiStorms_GRX import RCServo psm = PiStorms_GRX() servo = RCServo("BAS1") m = ["Grove Continous Rotation Servo Demo", "Please connect a continuous rotation RC servo to port BAS1 (Bank A, Servo 1) and press OK (or GO) to continue."] psm.screen.showMessage(m, wrapText=True) m[1] = "If your servo is spinning right now, please run 45-Utils/03-FindNeutralPoint." psm.screen.showMessage(m, wrapText=True) servo.setSpeed(100) m[1] = "Speed: 100" psm.screen.showMessage(m, wrapText=True) servo.setSpeed(-100) m[1] = "Speed: -100" psm.screen.showMessage(m, wrapText=True)
# # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # #mindsensors.com invests time and resources providing this open source code, #please support mindsensors.com by purchasing products from mindsensors.com! #Learn more product option visit us @ http://www.mindsensors.com/ import time from PiStorms_GRX import PiStorms_GRX, RCServo, GrovePort from PiStormsCom_GRX import GRXCom psm = PiStorms_GRX() leftServo = RCServo("BBS1", 1690) rightServo = RCServo("BAS1", 1350) leftEncoder = GrovePort( "BBD1", type=GRXCom.TYPE.ENCODER) # no mode, not associated with any servo rightEncoder = GrovePort("BAD2", type=GRXCom.TYPE.ENCODER) GRXCom.I2C.A.writeByte(GRXCom.REGISTER.COMMAND, GRXCom.COMMAND.RESET_ENCODERS) GRXCom.I2C.B.writeByte(GRXCom.REGISTER.COMMAND, GRXCom.COMMAND.RESET_ENCODERS) for i in range(200): try: leftEncoderValue = -1 * leftEncoder.comm.readEncoderValue() rightEncoderValue = rightEncoder.comm.readEncoderValue() print "{:6d} {:6d}".format(leftEncoderValue, rightEncoderValue)
#please support mindsensors.com by purchasing products from mindsensors.com! #Learn more product option visit us @ http://www.mindsensors.com """ --BLOCKLY FILE-- --START BLOCKS-- PHhtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGJsb2NrIHR5cGU9InNlcnZvX3NldFBvcyIgaWQ9IilETndXYmxOLHxKcXElaFpbNGRNIiB4PSI0MyIgeT0iMTAyIj48ZmllbGQgbmFtZT0icG9zIj45MDwvZmllbGQ+PHZhbHVlIG5hbWU9InNlcnZvIj48YmxvY2sgdHlwZT0ic2Vydm9faW5pdCIgaWQ9Imxrbyh+a1lmeXlpVlg3KFBqWDUzIj48ZmllbGQgbmFtZT0icG9ydCI+QkJTMTwvZmllbGQ+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzZXJ2b19zZXRTcGVlZCIgaWQ9IkowNktseDl3OEtrZzpSW1BwSi4uIj48ZmllbGQgbmFtZT0ic3BlZWQiPjUwPC9maWVsZD48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0iVjg/dld0NFM6fjhqI29QYEVzNWoiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQVMyPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InNlcnZvX3N0b3AiIGlkPSIlY3pYPW8tQGVfYC1XJWZ7fm5ZISI+PHZhbHVlIG5hbWU9InNlcnZvIj48YmxvY2sgdHlwZT0ic2Vydm9faW5pdCIgaWQ9IlNdV3x5LEFyWHB7b20xe3gofixtIj48ZmllbGQgbmFtZT0icG9ydCI+QkFTMjwvZmllbGQ+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzZXJ2b19zZXROZXV0cmFsUG9pbnQiIGlkPSJmZTlSX19Hcld1VylYKSU4KTgyMCI+PGZpZWxkIG5hbWU9Im5ldXRyYWxQb2ludCI+MTUwMDwvZmllbGQ+PHZhbHVlIG5hbWU9InNlcnZvIj48YmxvY2sgdHlwZT0ic2Vydm9faW5pdCIgaWQ9ImZWKUM/Vy0uXWlZMUdJRHhWMGR8Ij48ZmllbGQgbmFtZT0icG9ydCI+QkFTMjwvZmllbGQ+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzZXJ2b19zZXROZXV0cmFsIiBpZD0iVTd1Rn5kek5oVDFORmAuLEVRQmMiPjx2YWx1ZSBuYW1lPSJzZXJ2byI+PGJsb2NrIHR5cGU9InNlcnZvX2luaXQiIGlkPSI7N18xQyNTM1g4cGFsbSg/UV1UKyI+PGZpZWxkIG5hbWU9InBvcnQiPkJBUzI8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48bmV4dD48YmxvY2sgdHlwZT0ic2Vydm9fc2V0UHVsc2UiIGlkPSI7R05udkw4UCpIR0NZX1R9ZkI9TiI+PGZpZWxkIG5hbWU9InB1bHNlIj41MDA8L2ZpZWxkPjx2YWx1ZSBuYW1lPSJzZXJ2byI+PGJsb2NrIHR5cGU9InNlcnZvX2luaXQiIGlkPSI5V24xOlsvVm1aJW93SGV2Tz8ldyI+PGZpZWxkIG5hbWU9InBvcnQiPkJCUzM8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48bmV4dD48YmxvY2sgdHlwZT0ic2Vydm9fc2V0UG9zX3ZhbHVlIiBpZD0iWV1ScDtoVzFTKylacFJ7YmEpM2AiPjx2YWx1ZSBuYW1lPSJzZXJ2byI+PGJsb2NrIHR5cGU9InNlcnZvX2luaXQiIGlkPSIwfS92OWQsRk86W35bOVpFcTlCaiI+PGZpZWxkIG5hbWU9InBvcnQiPkJCUzM8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48dmFsdWUgbmFtZT0icG9zIj48YmxvY2sgdHlwZT0ibWF0aF9hcml0aG1ldGljIiBpZD0iPzJVTVZQWChrWjhNdzFMNz9YX3ciPjxmaWVsZCBuYW1lPSJPUCI+QUREPC9maWVsZD48dmFsdWUgbmFtZT0iQSI+PHNoYWRvdyB0eXBlPSJtYXRoX251bWJlciIgaWQ9Ill7UTNkYHFNbC5TekB+Y09JVVReIj48ZmllbGQgbmFtZT0iTlVNIj4xPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjx2YWx1ZSBuYW1lPSJCIj48c2hhZG93IHR5cGU9Im1hdGhfbnVtYmVyIiBpZD0iJSNjLjtUaS8/ajRvTHxvWC9PNngiPjxmaWVsZCBuYW1lPSJOVU0iPjE8L2ZpZWxkPjwvc2hhZG93PjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzZXJ2b19zZXRTcGVlZF92YWx1ZSIgaWQ9IlUxfCVLTFBeVDhwTDR+cV87RXdZIj48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0iZFFCcUR8OS9EbUclcSx8RDl6MHQiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQlMzPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PHZhbHVlIG5hbWU9InNwZWVkIj48YmxvY2sgdHlwZT0ibWF0aF9hcml0aG1ldGljIiBpZD0ib34oKlRKUDs4aEAxNSpwKiNONiMiPjxmaWVsZCBuYW1lPSJPUCI+QUREPC9maWVsZD48dmFsdWUgbmFtZT0iQSI+PHNoYWRvdyB0eXBlPSJtYXRoX251bWJlciIgaWQ9IkpwZzR0MkNyOChBSTRUUVowOmQhIj48ZmllbGQgbmFtZT0iTlVNIj4xPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjx2YWx1ZSBuYW1lPSJCIj48c2hhZG93IHR5cGU9Im1hdGhfbnVtYmVyIiBpZD0iUlEsd1Z6TDZ5MThNb0FgXmxSNzIiPjxmaWVsZCBuYW1lPSJOVU0iPjE8L2ZpZWxkPjwvc2hhZG93PjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzZXJ2b19zZXRQdWxzZV92YWx1ZSIgaWQ9InBtdmBUMVNlYSN+KHl3QVNNUEovIj48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0iXUd+PWZQdGk4UC1DJSE5e3V0OCgiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQVMzPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PHZhbHVlIG5hbWU9InB1bHNlIj48YmxvY2sgdHlwZT0ibWF0aF9jb25zdHJhaW4iIGlkPSJANUp2TnJaQnRBOmtOUiNUOjN+OiI+PHZhbHVlIG5hbWU9IlZBTFVFIj48c2hhZG93IHR5cGU9Im1hdGhfbnVtYmVyIiBpZD0ie0pGTkxmcVV9bUE6QWRqKnQrS3YiPjxmaWVsZCBuYW1lPSJOVU0iPjUwPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjx2YWx1ZSBuYW1lPSJMT1ciPjxzaGFkb3cgdHlwZT0ibWF0aF9udW1iZXIiIGlkPSI3cTlKbDZAYzVUOV5vaDVMZFBecyI+PGZpZWxkIG5hbWU9Ik5VTSI+NTAwPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjx2YWx1ZSBuYW1lPSJISUdIIj48c2hhZG93IHR5cGU9Im1hdGhfbnVtYmVyIiBpZD0iZiU3XzhBaVE6bzUqdXNfL1R9QVAiPjxmaWVsZCBuYW1lPSJOVU0iPjI1MDA8L2ZpZWxkPjwvc2hhZG93PjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzeXN0ZW1fcHJpbnQiIGlkPSJfI2QuL29ja0ZFXzh8aThpPXVTSCI+PHZhbHVlIG5hbWU9IlRFWFQiPjxzaGFkb3cgdHlwZT0idGV4dCIgaWQ9IjNuQmNQNk43dCU1dEE3TXlOXy9CIj48ZmllbGQgbmFtZT0iVEVYVCI+SGVsbG8gV29ybGQ8L2ZpZWxkPjwvc2hhZG93PjxibG9jayB0eXBlPSJHcm92ZV9CdXR0b25fX2lzUHJlc3NlZCIgaWQ9IktDOSpqM2t+RV9sOGZtSU5HN2pgIj48dmFsdWUgbmFtZT0ic2Vuc29yIj48YmxvY2sgdHlwZT0iR3JvdmVfQnV0dG9uIiBpZD0iY0FWfi13aG43cHguYm40aE9yLDMiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQkQxPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzeXN0ZW1fcHJpbnQiIGlkPSJGLnB7KT9MZmFNXlkwfkRIWFdHZSI+PHZhbHVlIG5hbWU9IlRFWFQiPjxzaGFkb3cgdHlwZT0idGV4dCIgaWQ9IlJSYyNAQUhXbWd9UmlxOGBlYnFBIj48ZmllbGQgbmFtZT0iVEVYVCI+SGVsbG8gV29ybGQ8L2ZpZWxkPjwvc2hhZG93PjxibG9jayB0eXBlPSJHcm92ZV9QSVJfTW90aW9uX1NlbnNvcl9fbW90aW9uRGV0ZWN0ZWQiIGlkPSI4VkNoWG93OENKLil0RnM6LTpdVCI+PHZhbHVlIG5hbWU9InNlbnNvciI+PGJsb2NrIHR5cGU9Ikdyb3ZlX1BJUl9Nb3Rpb25fU2Vuc29yIiBpZD0iQGkwYTZRbE9mMkVLXVY0YTAyal4iPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQkQyPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzeXN0ZW1fcHJpbnQiIGlkPSJQVTM9b35Ta1FybFZLekpSOSlxbyI+PHZhbHVlIG5hbWU9IlRFWFQiPjxzaGFkb3cgdHlwZT0idGV4dCIgaWQ9InJ7aWUuOSFqLGtvVV1QdUkhalElIj48ZmllbGQgbmFtZT0iVEVYVCI+SGVsbG8gV29ybGQ8L2ZpZWxkPjwvc2hhZG93PjxibG9jayB0eXBlPSJHcm92ZV9GbGFtZV9TZW5zb3JfX2ZpcmVEZXRlY3RlZCIgaWQ9IlRgL0BIaSVGTHBKLz1hbnNVKkp4Ij48dmFsdWUgbmFtZT0ic2Vuc29yIj48YmxvY2sgdHlwZT0iR3JvdmVfRmxhbWVfU2Vuc29yIiBpZD0iXj1KfGVKby5Bdyh6RnsqQTtTZE0iPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQUEyPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzeXN0ZW1fcHJpbnQiIGlkPSJvMmpnTm1yK119IUQ7ZztJblZJVyI+PHZhbHVlIG5hbWU9IlRFWFQiPjxzaGFkb3cgdHlwZT0idGV4dCIgaWQ9ImEsLl01IUAzMzRKTkl7SHVAX2M0Ij48ZmllbGQgbmFtZT0iVEVYVCI+SGVsbG8gV29ybGQ8L2ZpZWxkPjwvc2hhZG93PjxibG9jayB0eXBlPSJHcm92ZV9MdW1pbmFuY2VfU2Vuc29yX19sdW1pbmFuY2UiIGlkPSJ1KihjLVZUOHJvdDdzITBlZSFARSI+PHZhbHVlIG5hbWU9InNlbnNvciI+PGJsb2NrIHR5cGU9Ikdyb3ZlX0x1bWluYW5jZV9TZW5zb3IiIGlkPSIjMmIuL1FPOW1kNDlRRzspOlhLVCI+PGZpZWxkIG5hbWU9InBvcnQiPkJCQTE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9wcmludCIgaWQ9IixZOlZTP2xzcEV0QGdQXn1RfjleIj48dmFsdWUgbmFtZT0iVEVYVCI+PHNoYWRvdyB0eXBlPSJ0ZXh0IiBpZD0iKFc3I3Uob01CYzJMSnpDWWlPKUEiPjxmaWVsZCBuYW1lPSJURVhUIj5IZWxsbyBXb3JsZDwvZmllbGQ+PC9zaGFkb3c+PGJsb2NrIHR5cGU9Ikdyb3ZlX0xpZ2h0X1NlbnNvcl9fbGlnaHRMZXZlbCIgaWQ9Ii0hZkxFMjEwI3U3M3hzbDZkKy1CIj48dmFsdWUgbmFtZT0ic2Vuc29yIj48YmxvY2sgdHlwZT0iR3JvdmVfTGlnaHRfU2Vuc29yIiBpZD0iNUd3M1p0N1ZhZEIqN3pLNW9QMG8iPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQkExPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzeXN0ZW1fcHJpbnQiIGlkPSIrQTtlRnUqI2ZNTkdrLmh9IUAxdiI+PHZhbHVlIG5hbWU9IlRFWFQiPjxzaGFkb3cgdHlwZT0idGV4dCIgaWQ9IjUxUz9abnJ3amBZcmRaVDdyPWkhIj48ZmllbGQgbmFtZT0iVEVYVCI+SGVsbG8gV29ybGQ8L2ZpZWxkPjwvc2hhZG93PjxibG9jayB0eXBlPSJHcm92ZV9UZW1wZXJhdHVyZV9TZW5zb3JfX3RlbXBlcmF0dXJlIiBpZD0iUi5FQ2BYSCMoTW5xXXpUKV5Aa0UiPjx2YWx1ZSBuYW1lPSJzZW5zb3IiPjxibG9jayB0eXBlPSJHcm92ZV9UZW1wZXJhdHVyZV9TZW5zb3IiIGlkPSJsYkNUcHRQaFppSTQjTmMvNzd8byI+PGZpZWxkIG5hbWU9InBvcnQiPkJCQTE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9wcmludCIgaWQ9IkNBdTNbIUxhSXlpPVBVXjplI3tvIj48dmFsdWUgbmFtZT0iVEVYVCI+PHNoYWRvdyB0eXBlPSJ0ZXh0IiBpZD0iVmBhcj1WYSlxOnUwS0Y/fkRAaC8iPjxmaWVsZCBuYW1lPSJURVhUIj5IZWxsbyBXb3JsZDwvZmllbGQ+PC9zaGFkb3c+PGJsb2NrIHR5cGU9Ikdyb3ZlX1RlbXBlcmF0dXJlX1NlbnNvcl9fQ3RvRiIgaWQ9Ik9gY0dXfmpKQFdBUiUhJXAqaz9+Ij48dmFsdWUgbmFtZT0iY2Vsc2l1cyI+PGJsb2NrIHR5cGU9Ikdyb3ZlX1RlbXBlcmF0dXJlX1NlbnNvcl9fdGVtcGVyYXR1cmUiIGlkPSIyNHY4fmpGaFh4VGV+YDAvRzJ5fSI+PHZhbHVlIG5hbWU9InNlbnNvciI+PGJsb2NrIHR5cGU9Ikdyb3ZlX1RlbXBlcmF0dXJlX1NlbnNvciIgaWQ9Ino3LmkrYilrOXUwXj9+K1VodVpyIj48ZmllbGQgbmFtZT0icG9ydCI+QkJBMTwvZmllbGQ+PC9ibG9jaz48L3ZhbHVlPjwvYmxvY2s+PC92YWx1ZT48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9wcmludCIgaWQ9IkVsUXNgYWFjK3FlTGREWyhLY3E3Ij48Y29tbWVudCBwaW5uZWQ9InRydWUiIGg9IjgwIiB3PSIxNjAiPkNhbGN1bGF0ZXMgYW4gYXZlcmFnZSBvZiAxMDI0IHJlYWRpbmdzLCB0aGlzIHRha2VzIGEgbW9tZW50PC9jb21tZW50Pjx2YWx1ZSBuYW1lPSJURVhUIj48c2hhZG93IHR5cGU9InRleHQiIGlkPSJMa0xDeU5yS3l8LnFHZzo6UklwIyI+PGZpZWxkIG5hbWU9IlRFWFQiPkhlbGxvIFdvcmxkPC9maWVsZD48L3NoYWRvdz48YmxvY2sgdHlwZT0iR3JvdmVfVVZfU2Vuc29yX19pbnRlbnNpdHkiIGlkPSJwP0RfaTU1STZ2V0prIyl6P1clUyI+PHZhbHVlIG5hbWU9InNlbnNvciI+PGJsb2NrIHR5cGU9Ikdyb3ZlX1VWX1NlbnNvciIgaWQ9IjBbVHtnI2VyfVJ6I3ZSblVdSzc4Ij48ZmllbGQgbmFtZT0icG9ydCI+QkJBMTwvZmllbGQ+PC9ibG9jaz48L3ZhbHVlPjwvYmxvY2s+PC92YWx1ZT48bmV4dD48YmxvY2sgdHlwZT0ic3lzdGVtX3ByaW50IiBpZD0iOnlEKnteemxNM2l2SGFMN114LDgiPjxjb21tZW50IHBpbm5lZD0iZmFsc2UiIGg9IjgwIiB3PSIxNjAiPkNhbGN1bGF0ZXMgYW4gYXZlcmFnZSBvZiAxMDI0IHJlYWRpbmdzLCB0aGlzIHRha2VzIGEgbW9tZW50PC9jb21tZW50Pjx2YWx1ZSBuYW1lPSJURVhUIj48c2hhZG93IHR5cGU9InRleHQiIGlkPSJkeXQ3LFVeRE87XnhOTEdkMV05MyI+PGZpZWxkIG5hbWU9IlRFWFQiPkhlbGxvIFdvcmxkPC9maWVsZD48L3NoYWRvdz48YmxvY2sgdHlwZT0iR3JvdmVfVVZfU2Vuc29yX19VVmluZGV4IiBpZD0iZTtjXygzbnNSbH53ZzhxRkNCdn4iPjx2YWx1ZSBuYW1lPSJzZW5zb3IiPjxibG9jayB0eXBlPSJHcm92ZV9VVl9TZW5zb3IiIGlkPSJ2ayFzRWBrUHRpXjRQbVZmQDJfeCI+PGZpZWxkIG5hbWU9InBvcnQiPkJCQTE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9wcmludCIgaWQ9Ii9OMWhuKG9nR20zO1Z4djBMYFkjIj48dmFsdWUgbmFtZT0iVEVYVCI+PHNoYWRvdyB0eXBlPSJ0ZXh0IiBpZD0iLlFQNnI/JWF5eGQpUU1TLXtSNEwiPjxmaWVsZCBuYW1lPSJURVhUIj5IZWxsbyBXb3JsZDwvZmllbGQ+PC9zaGFkb3c+PGJsb2NrIHR5cGU9Ikdyb3ZlX01vaXN0dXJlX1NlbnNvcl9fbW9pc3R1cmVMZXZlbCIgaWQ9Ilc9KCtuLFVbWDZVfE86NjhTU3h5Ij48dmFsdWUgbmFtZT0ic2Vuc29yIj48YmxvY2sgdHlwZT0iR3JvdmVfTW9pc3R1cmVfU2Vuc29yIiBpZD0iM3JnQDFoMVkvJXR7TH5sOjZEaTQiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQkExPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzeXN0ZW1fcHJpbnQiIGlkPSIoPXFFeXE4QD0jX3lZKFdiIy59ZyI+PHZhbHVlIG5hbWU9IlRFWFQiPjxzaGFkb3cgdHlwZT0idGV4dCIgaWQ9Il9NQmpZfHVkfEFnYUQ3czZ+cm94Ij48ZmllbGQgbmFtZT0iVEVYVCI+SGVsbG8gV29ybGQ8L2ZpZWxkPjwvc2hhZG93PjxibG9jayB0eXBlPSJHcm92ZV9Tb3VuZF9TZW5zb3JfX3NvdW5kSW50ZW5zaXR5IiBpZD0iTWQucHx1YmBrcHdgKm8rbks1OFQiPjx2YWx1ZSBuYW1lPSJzZW5zb3IiPjxibG9jayB0eXBlPSJHcm92ZV9Tb3VuZF9TZW5zb3IiIGlkPSJ7MS80fX12Km5VOmRoLm41V3FLPSI+PGZpZWxkIG5hbWU9InBvcnQiPkJCQTE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9wcmludCIgaWQ9IkRBeUtKTFtCQXhnZXNLQkJ8L21yIj48dmFsdWUgbmFtZT0iVEVYVCI+PHNoYWRvdyB0eXBlPSJ0ZXh0IiBpZD0iaWtsblYtbnt1b0JSVik6SiNWZEYiPjxmaWVsZCBuYW1lPSJURVhUIj5IZWxsbyBXb3JsZDwvZmllbGQ+PC9zaGFkb3c+PGJsb2NrIHR5cGU9Ikdyb3ZlX0xvdWRuZXNzX1NlbnNvcl9fZGV0ZWN0U291bmQiIGlkPSJ1KWsqZX1JXVE0W1lILHNYQXA6cyI+PHZhbHVlIG5hbWU9InNlbnNvciI+PGJsb2NrIHR5cGU9Ikdyb3ZlX0xvdWRuZXNzX1NlbnNvciIgaWQ9ImtBcHUlOXNyOF55Nil2TTkwNnNsIj48ZmllbGQgbmFtZT0icG9ydCI+QkJBMTwvZmllbGQ+PC9ibG9jaz48L3ZhbHVlPjwvYmxvY2s+PC92YWx1ZT48bmV4dD48YmxvY2sgdHlwZT0ic3lzdGVtX3ByaW50IiBpZD0ib1ZtXTRKUWdGVzZLM2MlVzNhSj8iPjx2YWx1ZSBuYW1lPSJURVhUIj48c2hhZG93IHR5cGU9InRleHQiIGlkPSJpa2xuVi1ue3VvQlJWKTpKI1ZkRiI+PGZpZWxkIG5hbWU9IlRFWFQiPkhlbGxvIFdvcmxkPC9maWVsZD48L3NoYWRvdz48YmxvY2sgdHlwZT0iR3JvdmVfQWlyX1F1YWxpdHlfU2Vuc29yX19haXJRdWFsaXR5IiBpZD0iQlJyI2BeRW8ucXh6d1RsU1p8eDUiPjx2YWx1ZSBuYW1lPSJzZW5zb3IiPjxibG9jayB0eXBlPSJHcm92ZV9BaXJfUXVhbGl0eV9TZW5zb3IiIGlkPSJpVytre0NYYFJBZz0hWWQ6MyppRiI+PGZpZWxkIG5hbWU9InBvcnQiPkJCQTE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9wcmludCIgaWQ9Il11Z1gxUnc3PSEqcUZaRVAlUkBzIj48dmFsdWUgbmFtZT0iVEVYVCI+PHNoYWRvdyB0eXBlPSJ0ZXh0IiBpZD0iV05XKVZGTGx0P31nKzNvI1BvZzIiPjxmaWVsZCBuYW1lPSJURVhUIj5IZWxsbyBXb3JsZDwvZmllbGQ+PC9zaGFkb3c+PGJsb2NrIHR5cGU9Ikdyb3ZlX0Fpcl9RdWFsaXR5X1NlbnNvcl9fcXVhbGl0YXRpdmVNZWFzdXJlbWVudCIgaWQ9IlVNMzthTzlQZnBrLEssZlMoLylGIj48dmFsdWUgbmFtZT0ic2Vuc29yIj48YmxvY2sgdHlwZT0iR3JvdmVfQWlyX1F1YWxpdHlfU2Vuc29yIiBpZD0iJW8/LVZ+I3s2I3ZKa0pmVG0uaSsiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQkExPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC94bWw+ 9e174986596c41278729db6d48d4c86efff42f072d3b7fdedd1bec6e78dbaa29 --END BLOCKS-- """ from PiStorms_GRX import RCServo import GroveDevices servo_BBS1 = RCServo("BBS1") servo_BAS2 = RCServo("BAS2") servo_BBS3 = RCServo("BBS3") servo_BAS3 = RCServo("BAS3") groveButton_BBD1 = GroveDevices.Grove_Button("BBD1") groveMotionSensor_BBD2 = GroveDevices.Grove_PIR_Motion_Sensor("BBD2") groveFlameSensor_BAA2 = GroveDevices.Grove_Flame_Sensor("BAA2") groveLuminanceSensor_BBA1 = GroveDevices.Grove_Luminance_Sensor("BBA1")
m[1] = "This program can help you find what value *actually* makes your servo stop. This will be saved to a configuration file so you don't have to worry about it again. Would you like to continue?" if not psm.screen.askYesOrNoQuestion(m, wrapText=True, goBtn=True): sys.exit(0) bank = psm.screen.askQuestion( ["Motor Bank", "Which bank is your servo connected to?"], [" <-- B", " " * 13 + "A -->"], wrapText=True) bank = ["B", "A"][bank] port = psm.screen.askQuestion( ["Motor Port", "Which port number is your servo connected to?"], [1, 2, 3] if bank != "A" else [3, 2, 1], wrapText=True) port = (["1", "2", "3"] if bank != "A" else ["3", "2", "1"])[port] port = "B{}S{}".format(bank, port) servo = RCServo(port) servo.stop() def exit(): servo.stop() psm.screen.forceMessage(["Exiting...", "Calibration cancelled"]) time.sleep(1) sys.exit(0) if psm.screen.askYesOrNoQuestion( ["Encoder", "Do you have an encoder attached to this servo?"], wrapText=True): # zero-indexed encoder port number encPortNum0 = psm.screen.askQuestion(
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # #mindsensors.com invests time and resources providing this open source code, #please support mindsensors.com by purchasing products from mindsensors.com! #Learn more product option visit us @ http://www.mindsensors.com/ from PiStorms_GRX import PiStorms_GRX psm = PiStorms_GRX() from PiStorms_GRX import RCServo l = RCServo("BAS1", 1300) r = RCServo("BAS2", 1690) import pygame, sys try: pygame.init() joystick = pygame.joystick.Joystick(0) joystick.init() except: psm.screen.showMessage("Please connect a joystick and try again.") sys.exit(0) import time while not psm.isKeyPressed() and not joystick.get_button(16): pygame.event.pump() l.setSpeed(joystick.get_axis(1)*-40)
#Learn more product option visit us @ http://www.mindsensors.com """ --BLOCKLY FILE-- --START BLOCKS-- PHhtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGJsb2NrIHR5cGU9InNlcnZvX3NldFNwZWVkIiBpZD0iWG55Sk9rfHM7V2EobkV6YHI6MG8iIHg9Ijg0IiB5PSI2NSI+PGZpZWxkIG5hbWU9InNwZWVkIj41MDwvZmllbGQ+PGNvbW1lbnQgcGlubmVkPSJ0cnVlIiBoPSI0MSIgdz0iMjAyIj5jb250aW51b3VzIHJvdGF0aW9uIHNlcnZvczwvY29tbWVudD48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0ibW44MW1da0t5UG51Uzk9cyN7LWMiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQVMxPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InNlcnZvX3NldFNwZWVkIiBpZD0ifjQpV2RASEBoZWZ9Y0hZLGFFZEEiPjxmaWVsZCBuYW1lPSJzcGVlZCI+LTUwPC9maWVsZD48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0iM25yIVV8eDA9O1RjOnNHdl56K18iPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQVMyPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9zbGVlcCIgaWQ9ImxTJXRZKnJXXn5scS9pP3xRcmJXIj48dmFsdWUgbmFtZT0iVElNRSI+PHNoYWRvdyB0eXBlPSJtYXRoX251bWJlciIgaWQ9InlrZFk9Oltjfl0rS35rMHNrQ3dgIj48ZmllbGQgbmFtZT0iTlVNIj4zPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzZXJ2b19zdG9wIiBpZD0icHcvPSs0a0c6WXQ/RW15NztNKjQiPjx2YWx1ZSBuYW1lPSJzZXJ2byI+PGJsb2NrIHR5cGU9InNlcnZvX2luaXQiIGlkPSIpNy0sODU/Sy11MlYrSypHdkpPXiI+PGZpZWxkIG5hbWU9InBvcnQiPkJBUzE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48bmV4dD48YmxvY2sgdHlwZT0ic2Vydm9fc3RvcCIgaWQ9Ijo0VE1sLklAZElxVlBbYlt2NX03Ij48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0icTYtLFRPQ3YrV1MwQ3kzYzNBUDgiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQVMyPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9zbGVlcCIgaWQ9ImNXfkRFQSlaOyhoRDNCOCNYZEl3Ij48dmFsdWUgbmFtZT0iVElNRSI+PHNoYWRvdyB0eXBlPSJtYXRoX251bWJlciIgaWQ9Ikk3cGJ8TitCfmRsYy9oOGk5WEZzIj48ZmllbGQgbmFtZT0iTlVNIj4xPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PGJsb2NrIHR5cGU9InNlcnZvX3NldFBvcyIgaWQ9IjJnY1lVLlpgNl1MOStHVG1lQ0dWIiB4PSI4NCIgeT0iMzY5Ij48ZmllbGQgbmFtZT0icG9zIj4wPC9maWVsZD48Y29tbWVudCBwaW5uZWQ9InRydWUiIGg9IjQ0IiB3PSIxNDYiPiJub3JtYWwiIHNlcnZvczwvY29tbWVudD48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0iP0FSXSp8SUJAd1haVVt9UCU6JU0iPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQlMxPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9zbGVlcCIgaWQ9IkMwZU4/LTBhZGAtZFFnLnF+Xno2Ij48dmFsdWUgbmFtZT0iVElNRSI+PHNoYWRvdyB0eXBlPSJtYXRoX251bWJlciIgaWQ9IjpsKyVQN2hRNkc9MGR6RmU0K3Z8Ij48ZmllbGQgbmFtZT0iTlVNIj4yPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzZXJ2b19zZXRQb3MiIGlkPSJvKXJFNkNUYjI2eiNwSGQpOkdvbCI+PGZpZWxkIG5hbWU9InBvcyI+OTA8L2ZpZWxkPjx2YWx1ZSBuYW1lPSJzZXJ2byI+PGJsb2NrIHR5cGU9InNlcnZvX2luaXQiIGlkPSJ3cWliK0I2Q21Rbnl3IVIhbmRwcSI+PGZpZWxkIG5hbWU9InBvcnQiPkJCUzE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48bmV4dD48YmxvY2sgdHlwZT0ic3lzdGVtX3NsZWVwIiBpZD0iUVJgdSxwMl9PTGxteio3O29FUDoiPjx2YWx1ZSBuYW1lPSJUSU1FIj48c2hhZG93IHR5cGU9Im1hdGhfbnVtYmVyIiBpZD0iR0Zoam99TGAhZDBsLXpjYy1PNV0iPjxmaWVsZCBuYW1lPSJOVU0iPjI8L2ZpZWxkPjwvc2hhZG93PjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InNlcnZvX3NldFBvcyIgaWQ9ImU0ZEV5RHpBbldFZV50IU13K3FBIj48ZmllbGQgbmFtZT0icG9zIj4xODA8L2ZpZWxkPjx2YWx1ZSBuYW1lPSJzZXJ2byI+PGJsb2NrIHR5cGU9InNlcnZvX2luaXQiIGlkPSJETSNrb3xGNFBJNkovKS1hTiVSTyI+PGZpZWxkIG5hbWU9InBvcnQiPkJCUzE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48bmV4dD48YmxvY2sgdHlwZT0ic3lzdGVtX3NsZWVwIiBpZD0iaXxkR0tzI15rL1hNekdWPWdoZF8iPjx2YWx1ZSBuYW1lPSJUSU1FIj48c2hhZG93IHR5cGU9Im1hdGhfbnVtYmVyIiBpZD0iQDM4WURValY1ZExLNGtPMGtpY0UiPjxmaWVsZCBuYW1lPSJOVU0iPjE8L2ZpZWxkPjwvc2hhZG93PjwvdmFsdWU+PC9ibG9jaz48L25leHQ+PC9ibG9jaz48L25leHQ+PC9ibG9jaz48L25leHQ+PC9ibG9jaz48L25leHQ+PC9ibG9jaz48L25leHQ+PC9ibG9jaz48YmxvY2sgdHlwZT0iY29udHJvbHNfcmVwZWF0X2V4dCIgaWQ9ImR1IUYyen1MLTcobjB3VWtySG04IiB4PSI4NiIgeT0iNjczIj48Y29tbWVudCBwaW5uZWQ9InRydWUiIGg9IjQxIiB3PSIyNTQiPm1vdmUgc2Vydm8gdG8gMTAgcmFuZG9tIHBvc2l0aW9uczwvY29tbWVudD48dmFsdWUgbmFtZT0iVElNRVMiPjxzaGFkb3cgdHlwZT0ibWF0aF9udW1iZXIiIGlkPSJDblZwJW5xLlVVa21WNUw5cmh+SSI+PGZpZWxkIG5hbWU9Ik5VTSI+MTA8L2ZpZWxkPjwvc2hhZG93PjwvdmFsdWU+PHN0YXRlbWVudCBuYW1lPSJETyI+PGJsb2NrIHR5cGU9InNlcnZvX3NldFBvc192YWx1ZSIgaWQ9IkFwYW1FdDtsREdRSXYrd1NUWWclIj48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0ieSlnXk56VUYzVCphZS9fX0dSVVMiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQlMxPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PHZhbHVlIG5hbWU9InBvcyI+PGJsb2NrIHR5cGU9Im1hdGhfcmFuZG9tX2ludCIgaWQ9InI4czJtSnZXRW55YC1abDdgfWdYIj48dmFsdWUgbmFtZT0iRlJPTSI+PHNoYWRvdyB0eXBlPSJtYXRoX251bWJlciIgaWQ9ImxwVn4qQEdPMmllVWBEbixjW1JoIj48ZmllbGQgbmFtZT0iTlVNIj4wPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjx2YWx1ZSBuYW1lPSJUTyI+PHNoYWRvdyB0eXBlPSJtYXRoX251bWJlciIgaWQ9IjJ2dG13VHxfRVVbY2pZUHloUyx6Ij48ZmllbGQgbmFtZT0iTlVNIj4xODA8L2ZpZWxkPjwvc2hhZG93PjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzeXN0ZW1fc2xlZXAiIGlkPSJvc0VVQXJmYjo5SFk3WFcqcjpKSiI+PHZhbHVlIG5hbWU9IlRJTUUiPjxzaGFkb3cgdHlwZT0ibWF0aF9udW1iZXIiIGlkPSJYbntkdVIlWz0yTEE1VStXYDEuLyI+PGZpZWxkIG5hbWU9Ik5VTSI+MC41PC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9zdGF0ZW1lbnQ+PC9ibG9jaz48L3htbD4= a91828cecbf465c76316c80f1bc3986194e7740a4a9435ad987ef6b3c44572eb --END BLOCKS-- """ from PiStorms_GRX import RCServo import time import random servo_BAS1 = RCServo("BAS1") servo_BAS2 = RCServo("BAS2") servo_BBS1 = RCServo("BBS1") # continuous rotation servos servo_BAS1.setSpeed(50) servo_BAS2.setSpeed(-50) time.sleep(3) servo_BAS1.stop() servo_BAS2.stop() time.sleep(1) # "normal" servos
# #mindsensors.com invests time and resources providing this open source code, #please support mindsensors.com by purchasing products from mindsensors.com! #Learn more product option visit us @ http://www.mindsensors.com """ --BLOCKLY FILE-- --START BLOCKS-- PHhtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGJsb2NrIHR5cGU9InNlcnZvX3NldFBvcyIgaWQ9IilETndXYmxOLHxKcXElaFpbNGRNIiB4PSI0MyIgeT0iMTAyIj48ZmllbGQgbmFtZT0icG9zIj45MDwvZmllbGQ+PHZhbHVlIG5hbWU9InNlcnZvIj48YmxvY2sgdHlwZT0ic2Vydm9faW5pdCIgaWQ9Imxrbyh+a1lmeXlpVlg3KFBqWDUzIj48ZmllbGQgbmFtZT0icG9ydCI+QkJTMTwvZmllbGQ+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzZXJ2b19zZXRTcGVlZCIgaWQ9IkowNktseDl3OEtrZzpSW1BwSi4uIj48ZmllbGQgbmFtZT0ic3BlZWQiPjUwPC9maWVsZD48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0iVjg/dld0NFM6fjhqI29QYEVzNWoiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQVMyPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InNlcnZvX3N0b3AiIGlkPSIlY3pYPW8tQGVfYC1XJWZ7fm5ZISI+PHZhbHVlIG5hbWU9InNlcnZvIj48YmxvY2sgdHlwZT0ic2Vydm9faW5pdCIgaWQ9IlNdV3x5LEFyWHB7b20xe3gofixtIj48ZmllbGQgbmFtZT0icG9ydCI+QkFTMjwvZmllbGQ+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzZXJ2b19zZXROZXV0cmFsUG9pbnQiIGlkPSJmZTlSX19Hcld1VylYKSU4KTgyMCI+PGZpZWxkIG5hbWU9Im5ldXRyYWxQb2ludCI+MTUwMDwvZmllbGQ+PHZhbHVlIG5hbWU9InNlcnZvIj48YmxvY2sgdHlwZT0ic2Vydm9faW5pdCIgaWQ9ImZWKUM/Vy0uXWlZMUdJRHhWMGR8Ij48ZmllbGQgbmFtZT0icG9ydCI+QkFTMjwvZmllbGQ+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzZXJ2b19zZXROZXV0cmFsIiBpZD0iVTd1Rn5kek5oVDFORmAuLEVRQmMiPjx2YWx1ZSBuYW1lPSJzZXJ2byI+PGJsb2NrIHR5cGU9InNlcnZvX2luaXQiIGlkPSI7N18xQyNTM1g4cGFsbSg/UV1UKyI+PGZpZWxkIG5hbWU9InBvcnQiPkJBUzI8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48bmV4dD48YmxvY2sgdHlwZT0ic2Vydm9fc2V0UHVsc2UiIGlkPSI7R05udkw4UCpIR0NZX1R9ZkI9TiI+PGZpZWxkIG5hbWU9InB1bHNlIj41MDA8L2ZpZWxkPjx2YWx1ZSBuYW1lPSJzZXJ2byI+PGJsb2NrIHR5cGU9InNlcnZvX2luaXQiIGlkPSI5V24xOlsvVm1aJW93SGV2Tz8ldyI+PGZpZWxkIG5hbWU9InBvcnQiPkJCUzM8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48bmV4dD48YmxvY2sgdHlwZT0ic2Vydm9fc2V0UG9zX3ZhbHVlIiBpZD0iWV1ScDtoVzFTKylacFJ7YmEpM2AiPjx2YWx1ZSBuYW1lPSJzZXJ2byI+PGJsb2NrIHR5cGU9InNlcnZvX2luaXQiIGlkPSIwfS92OWQsRk86W35bOVpFcTlCaiI+PGZpZWxkIG5hbWU9InBvcnQiPkJCUzM8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48dmFsdWUgbmFtZT0icG9zIj48YmxvY2sgdHlwZT0ibWF0aF9hcml0aG1ldGljIiBpZD0iPzJVTVZQWChrWjhNdzFMNz9YX3ciPjxmaWVsZCBuYW1lPSJPUCI+QUREPC9maWVsZD48dmFsdWUgbmFtZT0iQSI+PHNoYWRvdyB0eXBlPSJtYXRoX251bWJlciIgaWQ9Ill7UTNkYHFNbC5TekB+Y09JVVReIj48ZmllbGQgbmFtZT0iTlVNIj4xPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjx2YWx1ZSBuYW1lPSJCIj48c2hhZG93IHR5cGU9Im1hdGhfbnVtYmVyIiBpZD0iJSNjLjtUaS8/ajRvTHxvWC9PNngiPjxmaWVsZCBuYW1lPSJOVU0iPjE8L2ZpZWxkPjwvc2hhZG93PjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzZXJ2b19zZXRTcGVlZF92YWx1ZSIgaWQ9IlUxfCVLTFBeVDhwTDR+cV87RXdZIj48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0iZFFCcUR8OS9EbUclcSx8RDl6MHQiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQlMzPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PHZhbHVlIG5hbWU9InNwZWVkIj48YmxvY2sgdHlwZT0ibWF0aF9hcml0aG1ldGljIiBpZD0ib34oKlRKUDs4aEAxNSpwKiNONiMiPjxmaWVsZCBuYW1lPSJPUCI+QUREPC9maWVsZD48dmFsdWUgbmFtZT0iQSI+PHNoYWRvdyB0eXBlPSJtYXRoX251bWJlciIgaWQ9IkpwZzR0MkNyOChBSTRUUVowOmQhIj48ZmllbGQgbmFtZT0iTlVNIj4xPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjx2YWx1ZSBuYW1lPSJCIj48c2hhZG93IHR5cGU9Im1hdGhfbnVtYmVyIiBpZD0iUlEsd1Z6TDZ5MThNb0FgXmxSNzIiPjxmaWVsZCBuYW1lPSJOVU0iPjE8L2ZpZWxkPjwvc2hhZG93PjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzZXJ2b19zZXRQdWxzZV92YWx1ZSIgaWQ9InBtdmBUMVNlYSN+KHl3QVNNUEovIj48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0iXUd+PWZQdGk4UC1DJSE5e3V0OCgiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQVMzPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PHZhbHVlIG5hbWU9InB1bHNlIj48YmxvY2sgdHlwZT0ibWF0aF9jb25zdHJhaW4iIGlkPSJANUp2TnJaQnRBOmtOUiNUOjN+OiI+PHZhbHVlIG5hbWU9IlZBTFVFIj48c2hhZG93IHR5cGU9Im1hdGhfbnVtYmVyIiBpZD0ie0pGTkxmcVV9bUE6QWRqKnQrS3YiPjxmaWVsZCBuYW1lPSJOVU0iPjUwPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjx2YWx1ZSBuYW1lPSJMT1ciPjxzaGFkb3cgdHlwZT0ibWF0aF9udW1iZXIiIGlkPSI3cTlKbDZAYzVUOV5vaDVMZFBecyI+PGZpZWxkIG5hbWU9Ik5VTSI+NTAwPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjx2YWx1ZSBuYW1lPSJISUdIIj48c2hhZG93IHR5cGU9Im1hdGhfbnVtYmVyIiBpZD0iZiU3XzhBaVE6bzUqdXNfL1R9QVAiPjxmaWVsZCBuYW1lPSJOVU0iPjI1MDA8L2ZpZWxkPjwvc2hhZG93PjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzeXN0ZW1fcHJpbnQiIGlkPSJfI2QuL29ja0ZFXzh8aThpPXVTSCI+PHZhbHVlIG5hbWU9IlRFWFQiPjxzaGFkb3cgdHlwZT0idGV4dCIgaWQ9IjNuQmNQNk43dCU1dEE3TXlOXy9CIj48ZmllbGQgbmFtZT0iVEVYVCI+SGVsbG8gV29ybGQ8L2ZpZWxkPjwvc2hhZG93PjxibG9jayB0eXBlPSJHcm92ZV9CdXR0b25fX2lzUHJlc3NlZCIgaWQ9IktDOSpqM2t+RV9sOGZtSU5HN2pgIj48dmFsdWUgbmFtZT0ic2Vuc29yIj48YmxvY2sgdHlwZT0iR3JvdmVfQnV0dG9uIiBpZD0iY0FWfi13aG43cHguYm40aE9yLDMiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQkQxPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzeXN0ZW1fcHJpbnQiIGlkPSJGLnB7KT9MZmFNXlkwfkRIWFdHZSI+PHZhbHVlIG5hbWU9IlRFWFQiPjxzaGFkb3cgdHlwZT0idGV4dCIgaWQ9IlJSYyNAQUhXbWd9UmlxOGBlYnFBIj48ZmllbGQgbmFtZT0iVEVYVCI+SGVsbG8gV29ybGQ8L2ZpZWxkPjwvc2hhZG93PjxibG9jayB0eXBlPSJHcm92ZV9QSVJfTW90aW9uX1NlbnNvcl9fbW90aW9uRGV0ZWN0ZWQiIGlkPSI4VkNoWG93OENKLil0RnM6LTpdVCI+PHZhbHVlIG5hbWU9InNlbnNvciI+PGJsb2NrIHR5cGU9Ikdyb3ZlX1BJUl9Nb3Rpb25fU2Vuc29yIiBpZD0iQGkwYTZRbE9mMkVLXVY0YTAyal4iPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQkQyPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzeXN0ZW1fcHJpbnQiIGlkPSJQVTM9b35Ta1FybFZLekpSOSlxbyI+PHZhbHVlIG5hbWU9IlRFWFQiPjxzaGFkb3cgdHlwZT0idGV4dCIgaWQ9InJ7aWUuOSFqLGtvVV1QdUkhalElIj48ZmllbGQgbmFtZT0iVEVYVCI+SGVsbG8gV29ybGQ8L2ZpZWxkPjwvc2hhZG93PjxibG9jayB0eXBlPSJHcm92ZV9GbGFtZV9TZW5zb3JfX2ZpcmVEZXRlY3RlZCIgaWQ9IlRgL0BIaSVGTHBKLz1hbnNVKkp4Ij48dmFsdWUgbmFtZT0ic2Vuc29yIj48YmxvY2sgdHlwZT0iR3JvdmVfRmxhbWVfU2Vuc29yIiBpZD0iXj1KfGVKby5Bdyh6RnsqQTtTZE0iPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQUEyPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzeXN0ZW1fcHJpbnQiIGlkPSJvMmpnTm1yK119IUQ7ZztJblZJVyI+PHZhbHVlIG5hbWU9IlRFWFQiPjxzaGFkb3cgdHlwZT0idGV4dCIgaWQ9ImEsLl01IUAzMzRKTkl7SHVAX2M0Ij48ZmllbGQgbmFtZT0iVEVYVCI+SGVsbG8gV29ybGQ8L2ZpZWxkPjwvc2hhZG93PjxibG9jayB0eXBlPSJHcm92ZV9MdW1pbmFuY2VfU2Vuc29yX19sdW1pbmFuY2UiIGlkPSJ1KihjLVZUOHJvdDdzITBlZSFARSI+PHZhbHVlIG5hbWU9InNlbnNvciI+PGJsb2NrIHR5cGU9Ikdyb3ZlX0x1bWluYW5jZV9TZW5zb3IiIGlkPSIjMmIuL1FPOW1kNDlRRzspOlhLVCI+PGZpZWxkIG5hbWU9InBvcnQiPkJCQTE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9wcmludCIgaWQ9IixZOlZTP2xzcEV0QGdQXn1RfjleIj48dmFsdWUgbmFtZT0iVEVYVCI+PHNoYWRvdyB0eXBlPSJ0ZXh0IiBpZD0iKFc3I3Uob01CYzJMSnpDWWlPKUEiPjxmaWVsZCBuYW1lPSJURVhUIj5IZWxsbyBXb3JsZDwvZmllbGQ+PC9zaGFkb3c+PGJsb2NrIHR5cGU9Ikdyb3ZlX0xpZ2h0X1NlbnNvcl9fbGlnaHRMZXZlbCIgaWQ9Ii0hZkxFMjEwI3U3M3hzbDZkKy1CIj48dmFsdWUgbmFtZT0ic2Vuc29yIj48YmxvY2sgdHlwZT0iR3JvdmVfTGlnaHRfU2Vuc29yIiBpZD0iNUd3M1p0N1ZhZEIqN3pLNW9QMG8iPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQkExPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzeXN0ZW1fcHJpbnQiIGlkPSIrQTtlRnUqI2ZNTkdrLmh9IUAxdiI+PHZhbHVlIG5hbWU9IlRFWFQiPjxzaGFkb3cgdHlwZT0idGV4dCIgaWQ9IjUxUz9abnJ3amBZcmRaVDdyPWkhIj48ZmllbGQgbmFtZT0iVEVYVCI+SGVsbG8gV29ybGQ8L2ZpZWxkPjwvc2hhZG93PjxibG9jayB0eXBlPSJHcm92ZV9UZW1wZXJhdHVyZV9TZW5zb3JfX3RlbXBlcmF0dXJlIiBpZD0iUi5FQ2BYSCMoTW5xXXpUKV5Aa0UiPjx2YWx1ZSBuYW1lPSJzZW5zb3IiPjxibG9jayB0eXBlPSJHcm92ZV9UZW1wZXJhdHVyZV9TZW5zb3IiIGlkPSJsYkNUcHRQaFppSTQjTmMvNzd8byI+PGZpZWxkIG5hbWU9InBvcnQiPkJCQTE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9wcmludCIgaWQ9IkNBdTNbIUxhSXlpPVBVXjplI3tvIj48dmFsdWUgbmFtZT0iVEVYVCI+PHNoYWRvdyB0eXBlPSJ0ZXh0IiBpZD0iVmBhcj1WYSlxOnUwS0Y/fkRAaC8iPjxmaWVsZCBuYW1lPSJURVhUIj5IZWxsbyBXb3JsZDwvZmllbGQ+PC9zaGFkb3c+PGJsb2NrIHR5cGU9Ikdyb3ZlX1RlbXBlcmF0dXJlX1NlbnNvcl9fQ3RvRiIgaWQ9Ik9gY0dXfmpKQFdBUiUhJXAqaz9+Ij48dmFsdWUgbmFtZT0iY2Vsc2l1cyI+PGJsb2NrIHR5cGU9Ikdyb3ZlX1RlbXBlcmF0dXJlX1NlbnNvcl9fdGVtcGVyYXR1cmUiIGlkPSIyNHY4fmpGaFh4VGV+YDAvRzJ5fSI+PHZhbHVlIG5hbWU9InNlbnNvciI+PGJsb2NrIHR5cGU9Ikdyb3ZlX1RlbXBlcmF0dXJlX1NlbnNvciIgaWQ9Ino3LmkrYilrOXUwXj9+K1VodVpyIj48ZmllbGQgbmFtZT0icG9ydCI+QkJBMTwvZmllbGQ+PC9ibG9jaz48L3ZhbHVlPjwvYmxvY2s+PC92YWx1ZT48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9wcmludCIgaWQ9IkVsUXNgYWFjK3FlTGREWyhLY3E3Ij48Y29tbWVudCBwaW5uZWQ9InRydWUiIGg9IjgwIiB3PSIxNjAiPkNhbGN1bGF0ZXMgYW4gYXZlcmFnZSBvZiAxMDI0IHJlYWRpbmdzLCB0aGlzIHRha2VzIGEgbW9tZW50PC9jb21tZW50Pjx2YWx1ZSBuYW1lPSJURVhUIj48c2hhZG93IHR5cGU9InRleHQiIGlkPSJMa0xDeU5yS3l8LnFHZzo6UklwIyI+PGZpZWxkIG5hbWU9IlRFWFQiPkhlbGxvIFdvcmxkPC9maWVsZD48L3NoYWRvdz48YmxvY2sgdHlwZT0iR3JvdmVfVVZfU2Vuc29yX19pbnRlbnNpdHkiIGlkPSJwP0RfaTU1STZ2V0prIyl6P1clUyI+PHZhbHVlIG5hbWU9InNlbnNvciI+PGJsb2NrIHR5cGU9Ikdyb3ZlX1VWX1NlbnNvciIgaWQ9IjBbVHtnI2VyfVJ6I3ZSblVdSzc4Ij48ZmllbGQgbmFtZT0icG9ydCI+QkJBMTwvZmllbGQ+PC9ibG9jaz48L3ZhbHVlPjwvYmxvY2s+PC92YWx1ZT48bmV4dD48YmxvY2sgdHlwZT0ic3lzdGVtX3ByaW50IiBpZD0iOnlEKnteemxNM2l2SGFMN114LDgiPjxjb21tZW50IHBpbm5lZD0iZmFsc2UiIGg9IjgwIiB3PSIxNjAiPkNhbGN1bGF0ZXMgYW4gYXZlcmFnZSBvZiAxMDI0IHJlYWRpbmdzLCB0aGlzIHRha2VzIGEgbW9tZW50PC9jb21tZW50Pjx2YWx1ZSBuYW1lPSJURVhUIj48c2hhZG93IHR5cGU9InRleHQiIGlkPSJkeXQ3LFVeRE87XnhOTEdkMV05MyI+PGZpZWxkIG5hbWU9IlRFWFQiPkhlbGxvIFdvcmxkPC9maWVsZD48L3NoYWRvdz48YmxvY2sgdHlwZT0iR3JvdmVfVVZfU2Vuc29yX19VVmluZGV4IiBpZD0iZTtjXygzbnNSbH53ZzhxRkNCdn4iPjx2YWx1ZSBuYW1lPSJzZW5zb3IiPjxibG9jayB0eXBlPSJHcm92ZV9VVl9TZW5zb3IiIGlkPSJ2ayFzRWBrUHRpXjRQbVZmQDJfeCI+PGZpZWxkIG5hbWU9InBvcnQiPkJCQTE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9wcmludCIgaWQ9Ii9OMWhuKG9nR20zO1Z4djBMYFkjIj48dmFsdWUgbmFtZT0iVEVYVCI+PHNoYWRvdyB0eXBlPSJ0ZXh0IiBpZD0iLlFQNnI/JWF5eGQpUU1TLXtSNEwiPjxmaWVsZCBuYW1lPSJURVhUIj5IZWxsbyBXb3JsZDwvZmllbGQ+PC9zaGFkb3c+PGJsb2NrIHR5cGU9Ikdyb3ZlX01vaXN0dXJlX1NlbnNvcl9fbW9pc3R1cmVMZXZlbCIgaWQ9Ilc9KCtuLFVbWDZVfE86NjhTU3h5Ij48dmFsdWUgbmFtZT0ic2Vuc29yIj48YmxvY2sgdHlwZT0iR3JvdmVfTW9pc3R1cmVfU2Vuc29yIiBpZD0iM3JnQDFoMVkvJXR7TH5sOjZEaTQiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQkExPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzeXN0ZW1fcHJpbnQiIGlkPSIoPXFFeXE4QD0jX3lZKFdiIy59ZyI+PHZhbHVlIG5hbWU9IlRFWFQiPjxzaGFkb3cgdHlwZT0idGV4dCIgaWQ9Il9NQmpZfHVkfEFnYUQ3czZ+cm94Ij48ZmllbGQgbmFtZT0iVEVYVCI+SGVsbG8gV29ybGQ8L2ZpZWxkPjwvc2hhZG93PjxibG9jayB0eXBlPSJHcm92ZV9Tb3VuZF9TZW5zb3JfX3NvdW5kSW50ZW5zaXR5IiBpZD0iTWQucHx1YmBrcHdgKm8rbks1OFQiPjx2YWx1ZSBuYW1lPSJzZW5zb3IiPjxibG9jayB0eXBlPSJHcm92ZV9Tb3VuZF9TZW5zb3IiIGlkPSJ7MS80fX12Km5VOmRoLm41V3FLPSI+PGZpZWxkIG5hbWU9InBvcnQiPkJCQTE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9wcmludCIgaWQ9IkRBeUtKTFtCQXhnZXNLQkJ8L21yIj48dmFsdWUgbmFtZT0iVEVYVCI+PHNoYWRvdyB0eXBlPSJ0ZXh0IiBpZD0iaWtsblYtbnt1b0JSVik6SiNWZEYiPjxmaWVsZCBuYW1lPSJURVhUIj5IZWxsbyBXb3JsZDwvZmllbGQ+PC9zaGFkb3c+PGJsb2NrIHR5cGU9Ikdyb3ZlX0xvdWRuZXNzX1NlbnNvcl9fZGV0ZWN0U291bmQiIGlkPSJ1KWsqZX1JXVE0W1lILHNYQXA6cyI+PHZhbHVlIG5hbWU9InNlbnNvciI+PGJsb2NrIHR5cGU9Ikdyb3ZlX0xvdWRuZXNzX1NlbnNvciIgaWQ9ImtBcHUlOXNyOF55Nil2TTkwNnNsIj48ZmllbGQgbmFtZT0icG9ydCI+QkJBMTwvZmllbGQ+PC9ibG9jaz48L3ZhbHVlPjwvYmxvY2s+PC92YWx1ZT48bmV4dD48YmxvY2sgdHlwZT0ic3lzdGVtX3ByaW50IiBpZD0ib1ZtXTRKUWdGVzZLM2MlVzNhSj8iPjx2YWx1ZSBuYW1lPSJURVhUIj48c2hhZG93IHR5cGU9InRleHQiIGlkPSJpa2xuVi1ue3VvQlJWKTpKI1ZkRiI+PGZpZWxkIG5hbWU9IlRFWFQiPkhlbGxvIFdvcmxkPC9maWVsZD48L3NoYWRvdz48YmxvY2sgdHlwZT0iR3JvdmVfQWlyX1F1YWxpdHlfU2Vuc29yX19haXJRdWFsaXR5IiBpZD0iQlJyI2BeRW8ucXh6d1RsU1p8eDUiPjx2YWx1ZSBuYW1lPSJzZW5zb3IiPjxibG9jayB0eXBlPSJHcm92ZV9BaXJfUXVhbGl0eV9TZW5zb3IiIGlkPSJpVytre0NYYFJBZz0hWWQ6MyppRiI+PGZpZWxkIG5hbWU9InBvcnQiPkJCQTE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9wcmludCIgaWQ9Il11Z1gxUnc3PSEqcUZaRVAlUkBzIj48dmFsdWUgbmFtZT0iVEVYVCI+PHNoYWRvdyB0eXBlPSJ0ZXh0IiBpZD0iV05XKVZGTGx0P31nKzNvI1BvZzIiPjxmaWVsZCBuYW1lPSJURVhUIj5IZWxsbyBXb3JsZDwvZmllbGQ+PC9zaGFkb3c+PGJsb2NrIHR5cGU9Ikdyb3ZlX0Fpcl9RdWFsaXR5X1NlbnNvcl9fcXVhbGl0YXRpdmVNZWFzdXJlbWVudCIgaWQ9IlVNMzthTzlQZnBrLEssZlMoLylGIj48dmFsdWUgbmFtZT0ic2Vuc29yIj48YmxvY2sgdHlwZT0iR3JvdmVfQWlyX1F1YWxpdHlfU2Vuc29yIiBpZD0iJW8/LVZ+I3s2I3ZKa0pmVG0uaSsiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQkExPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC94bWw+ 9e174986596c41278729db6d48d4c86efff42f072d3b7fdedd1bec6e78dbaa29 --END BLOCKS-- """ from PiStorms_GRX import RCServo import GroveDevices servo_BBS1 = RCServo("BBS1") servo_BAS2 = RCServo("BAS2") servo_BBS3 = RCServo("BBS3") servo_BAS3 = RCServo("BAS3") groveButton_BBD1 = GroveDevices.Grove_Button("BBD1") groveMotionSensor_BBD2 = GroveDevices.Grove_PIR_Motion_Sensor("BBD2") groveFlameSensor_BAA2 = GroveDevices.Grove_Flame_Sensor("BAA2") groveLuminanceSensor_BBA1 = GroveDevices.Grove_Luminance_Sensor("BBA1")
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # #mindsensors.com invests time and resources providing this open source code, #please support mindsensors.com by purchasing products from mindsensors.com! #Learn more product option visit us @ http://www.mindsensors.com/ from PiStorms_GRX import PiStorms_GRX from PiStorms_GRX import RCServo psm = PiStorms_GRX() servo = RCServo("BAS1") m = ["Grove Normal Servo Demo", "Please connect a normal RC servo to port BAS1 (Bank A, Servo 1) and press OK (or GO) to continue."] psm.screen.showMessage(m, wrapText=True) servo.setPos(0) m[1] = "Position: 0" psm.screen.showMessage(m, wrapText=True) servo.setPos(180) m[1] = "Position: 180" psm.screen.showMessage(m, wrapText=True) servo.setNeutral() m[1] = "Neutral point"
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # #mindsensors.com invests time and resources providing this open source code, #please support mindsensors.com by purchasing products from mindsensors.com! #Learn more product option visit us @ http://www.mindsensors.com/ from PiStorms_GRX import PiStorms_GRX psm = PiStorms_GRX() from PiStorms_GRX import RCServo l = RCServo("BAS1", 1300) r = RCServo("BAS2", 1690) import pygame, sys try: pygame.init() joystick = pygame.joystick.Joystick(0) joystick.init() except: psm.screen.showMessage("Please connect a joystick and try again.") sys.exit(0) import time while not psm.isKeyPressed() and not joystick.get_button(16): pygame.event.pump() l.setSpeed(joystick.get_axis(1) * -40)
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # #mindsensors.com invests time and resources providing this open source code, #please support mindsensors.com by purchasing products from mindsensors.com! #Learn more product option visit us @ http://www.mindsensors.com/ from PiStorms_GRX import PiStorms_GRX from PiStorms_GRX import RCServo psm = PiStorms_GRX() servo = RCServo("BAS1") m = [ "Grove Continous Rotation Servo Demo", "Please connect a continuous rotation RC servo to port BAS1 (Bank A, Servo 1) and press OK (or GO) to continue." ] psm.screen.showMessage(m, wrapText=True) m[1] = "If your servo is spinning right now, please run 45-Utils/03-FindNeutralPoint." psm.screen.showMessage(m, wrapText=True) servo.setSpeed(100) m[1] = "Speed: 100" psm.screen.showMessage(m, wrapText=True) servo.setSpeed(-100)
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # #mindsensors.com invests time and resources providing this open source code, #please support mindsensors.com by purchasing products from mindsensors.com! #Learn more product option visit us @ http://www.mindsensors.com/ from PiStorms_GRX import PiStorms_GRX from PiStorms_GRX import RCServo psm = PiStorms_GRX() servo = RCServo("BAS1") m = [ "Grove Normal Servo Demo", "Please connect a normal RC servo to port BAS1 (Bank A, Servo 1) and press OK (or GO) to continue." ] psm.screen.showMessage(m, wrapText=True) servo.setPos(0) m[1] = "Position: 0" psm.screen.showMessage(m, wrapText=True) servo.setPos(180) m[1] = "Position: 180" psm.screen.showMessage(m, wrapText=True)
from PiStorms_GRX import RCServo servo = RCServo("BAS1") servo.setPos(90) # 0 to 180
from PiStorms_GRX import RCServo servo = RCServo("BAS1") servo.setSpeed(50) # -100 to 100
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # #mindsensors.com invests time and resources providing this open source code, #please support mindsensors.com by purchasing products from mindsensors.com! #Learn more product option visit us @ http://www.mindsensors.com """ --BLOCKLY FILE-- --START BLOCKS-- PHhtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGJsb2NrIHR5cGU9InN5c3RlbV91bnRpbGtleXByZXNzIiBpZD0iRWVnVjovXVZmOVJvY2chOjg3Ky0iIHg9IjQzIiB5PSI0NCI+PHN0YXRlbWVudCBuYW1lPSJmdW5jIj48YmxvY2sgdHlwZT0ic2Vydm9fc2V0U3BlZWQiIGlkPSJ7XlpnYyhlKE5YL0kpdHpoc1I9dCI+PGZpZWxkIG5hbWU9InNwZWVkIj41MDwvZmllbGQ+PHZhbHVlIG5hbWU9InNlcnZvIj48YmxvY2sgdHlwZT0ic2Vydm9faW5pdCIgaWQ9ImA0OzZ9V3ZGYn02fWc5VXRFRm9RIj48ZmllbGQgbmFtZT0icG9ydCI+QkJTMTwvZmllbGQ+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzeXN0ZW1fc2xlZXAiIGlkPSJwQUw7dGUsfmVhaGgjMlY9cjJpUiI+PHZhbHVlIG5hbWU9IlRJTUUiPjxzaGFkb3cgdHlwZT0ibWF0aF9udW1iZXIiIGlkPSJaLFR4eCo0bylWKHhOMkB3U1t2ISI+PGZpZWxkIG5hbWU9Ik5VTSI+MTwvZmllbGQ+PC9zaGFkb3c+PC92YWx1ZT48bmV4dD48YmxvY2sgdHlwZT0ic2Vydm9fc3RvcCIgaWQ9Ii5+OE4xOEk7dXQlLFI2Z3NldllSIj48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0ibzNbYXlMPX1XLDJPdF0zY0llLUwiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQlMxPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9zbGVlcCIgaWQ9InBhUlhwa3FqZzJhTVQze3F9c2J0Ij48dmFsdWUgbmFtZT0iVElNRSI+PHNoYWRvdyB0eXBlPSJtYXRoX251bWJlciIgaWQ9ImFLYzJwUylnWkNoaDk4ZEVpYHsrIj48ZmllbGQgbmFtZT0iTlVNIj4xPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9zdGF0ZW1lbnQ+PC9ibG9jaz48L3htbD4= c70aaded7b0b66cce0501c89245ba00e38e6f17d585cfc04570046128708434e --END BLOCKS-- """ from PiStorms_GRX import RCServo import time from PiStorms_GRX import PiStorms_GRX servo_BBS1 = RCServo("BBS1") grx = PiStorms_GRX() def leCUI8hutHZI4480Dc(): servo_BBS1.setSpeed(50) time.sleep(1) servo_BBS1.stop() time.sleep(1) grx.untilKeyPress(leCUI8hutHZI4480Dc)
# introduce program and intent m = ["Find Neutral Point - Introduction", 'Every servo is slightly different due to the manufacturing process. This could make a continuous rotation servo "drift" when you set the speed to "0".'] psm.screen.showMessage(m, wrapText=True) m[1] = "This program can help you find what value *actually* makes your servo stop. This will be saved to a configuration file so you don't have to worry about it again. Would you like to continue?" if not psm.screen.askYesOrNoQuestion(m, wrapText=True, goBtn=True): sys.exit(0) bank = psm.screen.askQuestion(["Motor Bank", "Which bank is your servo connected to?"], [" <-- B", " "*13+"A -->"], wrapText=True) bank = ["B", "A"][bank] port = psm.screen.askQuestion(["Motor Port", "Which port number is your servo connected to?"], [1,2,3] if bank!="A" else [3,2,1], wrapText=True) port = (["1","2","3"] if bank!="A" else ["3","2","1"])[port] port = "B{}S{}".format(bank, port) servo = RCServo(port) servo.stop() def exit(): servo.stop() psm.screen.forceMessage(["Exiting...", "Calibration cancelled"]) time.sleep(1) sys.exit(0) if psm.screen.askYesOrNoQuestion(["Encoder", "Do you have an encoder attached to this servo?"], wrapText=True): # zero-indexed encoder port number encPortNum0 = psm.screen.askQuestion(["Encoder Port", "Which port is your encoder connected to?"], ["B{}D1".format(bank), "B{}D2".format(bank)], wrapText=True) encPortNum = ["1", "2"][encPortNum0] encPort = "B{}D{}".format(bank, encPortNum) encoder = GrovePort(encPort, type=GRXCom.TYPE.ENCODER, mode=int(encPortNum0))
#mindsensors.com invests time and resources providing this open source code, #please support mindsensors.com by purchasing products from mindsensors.com! #Learn more product option visit us @ http://www.mindsensors.com """ --BLOCKLY FILE-- --START BLOCKS-- PHhtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGJsb2NrIHR5cGU9InNlcnZvX3NldFNwZWVkIiBpZD0iWG55Sk9rfHM7V2EobkV6YHI6MG8iIHg9Ijg0IiB5PSI2NSI+PGZpZWxkIG5hbWU9InNwZWVkIj41MDwvZmllbGQ+PGNvbW1lbnQgcGlubmVkPSJ0cnVlIiBoPSI0MSIgdz0iMjAyIj5jb250aW51b3VzIHJvdGF0aW9uIHNlcnZvczwvY29tbWVudD48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0ibW44MW1da0t5UG51Uzk9cyN7LWMiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQVMxPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InNlcnZvX3NldFNwZWVkIiBpZD0ifjQpV2RASEBoZWZ9Y0hZLGFFZEEiPjxmaWVsZCBuYW1lPSJzcGVlZCI+LTUwPC9maWVsZD48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0iM25yIVV8eDA9O1RjOnNHdl56K18iPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQVMyPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9zbGVlcCIgaWQ9ImxTJXRZKnJXXn5scS9pP3xRcmJXIj48dmFsdWUgbmFtZT0iVElNRSI+PHNoYWRvdyB0eXBlPSJtYXRoX251bWJlciIgaWQ9InlrZFk9Oltjfl0rS35rMHNrQ3dgIj48ZmllbGQgbmFtZT0iTlVNIj4zPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzZXJ2b19zdG9wIiBpZD0icHcvPSs0a0c6WXQ/RW15NztNKjQiPjx2YWx1ZSBuYW1lPSJzZXJ2byI+PGJsb2NrIHR5cGU9InNlcnZvX2luaXQiIGlkPSIpNy0sODU/Sy11MlYrSypHdkpPXiI+PGZpZWxkIG5hbWU9InBvcnQiPkJBUzE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48bmV4dD48YmxvY2sgdHlwZT0ic2Vydm9fc3RvcCIgaWQ9Ijo0VE1sLklAZElxVlBbYlt2NX03Ij48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0icTYtLFRPQ3YrV1MwQ3kzYzNBUDgiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQVMyPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9zbGVlcCIgaWQ9ImNXfkRFQSlaOyhoRDNCOCNYZEl3Ij48dmFsdWUgbmFtZT0iVElNRSI+PHNoYWRvdyB0eXBlPSJtYXRoX251bWJlciIgaWQ9Ikk3cGJ8TitCfmRsYy9oOGk5WEZzIj48ZmllbGQgbmFtZT0iTlVNIj4xPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PGJsb2NrIHR5cGU9InNlcnZvX3NldFBvcyIgaWQ9IjJnY1lVLlpgNl1MOStHVG1lQ0dWIiB4PSI4NCIgeT0iMzY5Ij48ZmllbGQgbmFtZT0icG9zIj4wPC9maWVsZD48Y29tbWVudCBwaW5uZWQ9InRydWUiIGg9IjQ0IiB3PSIxNDYiPiJub3JtYWwiIHNlcnZvczwvY29tbWVudD48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0iP0FSXSp8SUJAd1haVVt9UCU6JU0iPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQlMxPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InN5c3RlbV9zbGVlcCIgaWQ9IkMwZU4/LTBhZGAtZFFnLnF+Xno2Ij48dmFsdWUgbmFtZT0iVElNRSI+PHNoYWRvdyB0eXBlPSJtYXRoX251bWJlciIgaWQ9IjpsKyVQN2hRNkc9MGR6RmU0K3Z8Ij48ZmllbGQgbmFtZT0iTlVNIj4yPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzZXJ2b19zZXRQb3MiIGlkPSJvKXJFNkNUYjI2eiNwSGQpOkdvbCI+PGZpZWxkIG5hbWU9InBvcyI+OTA8L2ZpZWxkPjx2YWx1ZSBuYW1lPSJzZXJ2byI+PGJsb2NrIHR5cGU9InNlcnZvX2luaXQiIGlkPSJ3cWliK0I2Q21Rbnl3IVIhbmRwcSI+PGZpZWxkIG5hbWU9InBvcnQiPkJCUzE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48bmV4dD48YmxvY2sgdHlwZT0ic3lzdGVtX3NsZWVwIiBpZD0iUVJgdSxwMl9PTGxteio3O29FUDoiPjx2YWx1ZSBuYW1lPSJUSU1FIj48c2hhZG93IHR5cGU9Im1hdGhfbnVtYmVyIiBpZD0iR0Zoam99TGAhZDBsLXpjYy1PNV0iPjxmaWVsZCBuYW1lPSJOVU0iPjI8L2ZpZWxkPjwvc2hhZG93PjwvdmFsdWU+PG5leHQ+PGJsb2NrIHR5cGU9InNlcnZvX3NldFBvcyIgaWQ9ImU0ZEV5RHpBbldFZV50IU13K3FBIj48ZmllbGQgbmFtZT0icG9zIj4xODA8L2ZpZWxkPjx2YWx1ZSBuYW1lPSJzZXJ2byI+PGJsb2NrIHR5cGU9InNlcnZvX2luaXQiIGlkPSJETSNrb3xGNFBJNkovKS1hTiVSTyI+PGZpZWxkIG5hbWU9InBvcnQiPkJCUzE8L2ZpZWxkPjwvYmxvY2s+PC92YWx1ZT48bmV4dD48YmxvY2sgdHlwZT0ic3lzdGVtX3NsZWVwIiBpZD0iaXxkR0tzI15rL1hNekdWPWdoZF8iPjx2YWx1ZSBuYW1lPSJUSU1FIj48c2hhZG93IHR5cGU9Im1hdGhfbnVtYmVyIiBpZD0iQDM4WURValY1ZExLNGtPMGtpY0UiPjxmaWVsZCBuYW1lPSJOVU0iPjE8L2ZpZWxkPjwvc2hhZG93PjwvdmFsdWU+PC9ibG9jaz48L25leHQ+PC9ibG9jaz48L25leHQ+PC9ibG9jaz48L25leHQ+PC9ibG9jaz48L25leHQ+PC9ibG9jaz48L25leHQ+PC9ibG9jaz48YmxvY2sgdHlwZT0iY29udHJvbHNfcmVwZWF0X2V4dCIgaWQ9ImR1IUYyen1MLTcobjB3VWtySG04IiB4PSI4NiIgeT0iNjczIj48Y29tbWVudCBwaW5uZWQ9InRydWUiIGg9IjQxIiB3PSIyNTQiPm1vdmUgc2Vydm8gdG8gMTAgcmFuZG9tIHBvc2l0aW9uczwvY29tbWVudD48dmFsdWUgbmFtZT0iVElNRVMiPjxzaGFkb3cgdHlwZT0ibWF0aF9udW1iZXIiIGlkPSJDblZwJW5xLlVVa21WNUw5cmh+SSI+PGZpZWxkIG5hbWU9Ik5VTSI+MTA8L2ZpZWxkPjwvc2hhZG93PjwvdmFsdWU+PHN0YXRlbWVudCBuYW1lPSJETyI+PGJsb2NrIHR5cGU9InNlcnZvX3NldFBvc192YWx1ZSIgaWQ9IkFwYW1FdDtsREdRSXYrd1NUWWclIj48dmFsdWUgbmFtZT0ic2Vydm8iPjxibG9jayB0eXBlPSJzZXJ2b19pbml0IiBpZD0ieSlnXk56VUYzVCphZS9fX0dSVVMiPjxmaWVsZCBuYW1lPSJwb3J0Ij5CQlMxPC9maWVsZD48L2Jsb2NrPjwvdmFsdWU+PHZhbHVlIG5hbWU9InBvcyI+PGJsb2NrIHR5cGU9Im1hdGhfcmFuZG9tX2ludCIgaWQ9InI4czJtSnZXRW55YC1abDdgfWdYIj48dmFsdWUgbmFtZT0iRlJPTSI+PHNoYWRvdyB0eXBlPSJtYXRoX251bWJlciIgaWQ9ImxwVn4qQEdPMmllVWBEbixjW1JoIj48ZmllbGQgbmFtZT0iTlVNIj4wPC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjx2YWx1ZSBuYW1lPSJUTyI+PHNoYWRvdyB0eXBlPSJtYXRoX251bWJlciIgaWQ9IjJ2dG13VHxfRVVbY2pZUHloUyx6Ij48ZmllbGQgbmFtZT0iTlVNIj4xODA8L2ZpZWxkPjwvc2hhZG93PjwvdmFsdWU+PC9ibG9jaz48L3ZhbHVlPjxuZXh0PjxibG9jayB0eXBlPSJzeXN0ZW1fc2xlZXAiIGlkPSJvc0VVQXJmYjo5SFk3WFcqcjpKSiI+PHZhbHVlIG5hbWU9IlRJTUUiPjxzaGFkb3cgdHlwZT0ibWF0aF9udW1iZXIiIGlkPSJYbntkdVIlWz0yTEE1VStXYDEuLyI+PGZpZWxkIG5hbWU9Ik5VTSI+MC41PC9maWVsZD48L3NoYWRvdz48L3ZhbHVlPjwvYmxvY2s+PC9uZXh0PjwvYmxvY2s+PC9zdGF0ZW1lbnQ+PC9ibG9jaz48L3htbD4= a91828cecbf465c76316c80f1bc3986194e7740a4a9435ad987ef6b3c44572eb --END BLOCKS-- """ from PiStorms_GRX import RCServo import time import random servo_BAS1 = RCServo("BAS1") servo_BAS2 = RCServo("BAS2") servo_BBS1 = RCServo("BBS1") # continuous rotation servos servo_BAS1.setSpeed(50) servo_BAS2.setSpeed(-50) time.sleep(3) servo_BAS1.stop() servo_BAS2.stop() time.sleep(1) # "normal" servos servo_BBS1.setPos(0)