#
# 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)
Exemple #3
0
#
# 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)
Exemple #4
0
#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(
Exemple #6
0
# 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
Exemple #8
0
#
#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"
Exemple #10
0
# 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)
Exemple #11
0
# 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)
Exemple #12
0
# 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
Exemple #15
0
# 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)
Exemple #16
0
from PiStorms_GRX import RCServo
servo = RCServo("BAS1")
servo.setPos(90)  # 0 to 180
# 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))
from PiStorms_GRX import RCServo
servo = RCServo("BAS1")
servo.setSpeed(50)  # -100 to 100
Exemple #19
0
#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)