Advertisement
asqapro

RobotCgen

Jul 3rd, 2013
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.92 KB | None | 0 0
  1. from easygui import * #now with a GUI!
  2.  
  3. portNum = 1 #keep track of the port(s) used
  4. def makeMotor(program, motor):
  5.     global portNum
  6.     with file('robotCode.c', 'r') as original: data = original.read() #read in the old data
  7.     with file('robotCode.c', 'w') as modified: modified.write(motor + " = [port" + str(portNum) + "]\n" + data) #prepend the motor = port code
  8.     portNum += 1
  9.  
  10. taskTabs = 0
  11. loopTabs = 0 #to keep track of the number of tabs for each block of code
  12. def tab(which):
  13.     global taskTabs
  14.     global loopTabs
  15.     tabString = ""
  16.     if which == "task":
  17.         for x in range(0, taskTabs):
  18.             tabString += "\t"
  19.     else:
  20.         for x in range(0, loopTabs+taskTabs):
  21.             tabString += "\t"
  22.     return tabString
  23.  
  24. def gui():
  25.     msg         = "Enter your task"
  26.     title       = "RobotC Gen"
  27.     fieldNames  = ["Button/ Joystick","Motor Name","Special","Power"]
  28.     fieldValues = []  # we start with blanks for the values
  29.     fieldValues = multenterbox(msg,title, fieldNames)
  30.  
  31.     # make sure that none of the fields was left blank
  32.     while True:  # do forever, until we find acceptable values and break out
  33.         # look for errors in the returned values
  34.         errmsg = ""
  35.         if not fieldValues:
  36.             return (None, None, None, None)
  37.         for item in fieldValues:
  38.             if item.strip() == "":
  39.                 if fieldNames[fieldValues.index(item)] != "Special":
  40.                     if fieldNames[fieldValues.index(item)] != "Power":
  41.                         errmsg = errmsg + ('"%s" is a required field.\n\n' % item)
  42.         if errmsg == "":
  43.             break # no problems found
  44.         else:
  45.             # show the box again, with the errmsg as the message    
  46.             fieldValues = multenterbox(errmsg, title, fieldNames, fieldValues)
  47.     return fieldValues
  48.  
  49. mainTask = []
  50. mainLoop = []
  51. def main():
  52.     print "Hit \"cancel\" to end."
  53.     global taskTabs
  54.     global loopTabs
  55.     global mainTask
  56.     global mainLoop
  57.     program = file("robotCode.c", "w")
  58.     mainTask.append("task main(){\n")
  59.     taskTabs += 1
  60.     mainLoop.append(tab("task") + "while(true){\n")
  61.     loopTabs += 1
  62.     #mainTask.append(mainLoop)
  63.     controllerBtns = dict() #a dictionary of all the buttons on the vexRT controller
  64.     controllerJSticks = dict() #a dictionary of all the joysticks on the vexRT controller
  65.     controllerJSticks["Ch1"] = "vexRT[Ch1]"
  66.     controllerJSticks["Ch2"] = "vexRT[Ch2]"
  67.     controllerJSticks["Ch3"] = "vexRT[Ch3]"
  68.     controllerJSticks["Ch4"] = "vexRT[Ch4]"
  69.     controllerBtns["5U"] = "vexRT[5U]"
  70.     controllerBtns["5D"] = "vexRT[5D]"
  71.     controllerBtns["6U"] = "vexRT[6U]"
  72.     controllerBtns["6D"] = "vexRT[6D]"
  73.     controllerBtns["7U"] = "vexRT[7U]"
  74.     controllerBtns["7D"] = "vexRT[7D]"
  75.     controllerBtns["7L"] = "vexRT[7L]"
  76.     controllerBtns["7R"] = "vexRT[7R]"
  77.     controllerBtns["8U"] = "vexRT[8U]"
  78.     controllerBtns["8D"] = "vexRT[8D]"
  79.     controllerBtns["8L"] = "vexRT[8L]"
  80.     controllerBtns["8R"] = "vexRT[8R]"
  81.     specKeyWords = []
  82.     specKeyWords.append("const")
  83.     motors = [] #a list of all of the motors
  84.     while True:
  85.         (key, motor, spec, power) = gui()
  86.         if key in controllerBtns:
  87.             button(program, key, motor, spec, power)
  88.         elif key in controllerJSticks:
  89.             joystick(program, key, motor, spec)
  90.         else:
  91.             for command in mainTask:
  92.                 program.write(command)
  93.             for command in mainLoop:
  94.                 program.write(command)
  95.             program.write(tab("loop") + "}\n") #close the main loop
  96.             loopTabs -= 1
  97.             program.write("}") #close the main task
  98.             program.close()
  99.             for motor in motors:
  100.                 makeMotor(program, motor)
  101.             program.close()
  102.             break
  103.  
  104. def joystick(program, channel, motor, special=None):
  105.     global taskTabs
  106.     global loopTabs
  107.     mainLoop.append(tab("loop") + motor + " = vexRT[" + channel + "];\n")
  108.  
  109. def button(program, btn, motor, special=None, power=None):
  110.     global taskTabs
  111.     global loopTabs
  112.     global mainTask
  113.     global mainLoop
  114.     if power == None:
  115.         power = 127
  116.     buttonState = "toggle" + btn
  117.     if special:
  118.         if special == "const":
  119.             nonConst = None
  120.             for item in mainLoop:
  121.                 if motor in item:
  122.                     nonConst = item
  123.                     mainLoop.remove(item)
  124.                     break
  125.             if nonConst == None:
  126.                 print "You have not assigned what controls this motor normally."
  127.             else:
  128.                 mainTask.append(tab("task") + "bool " + buttonState + " = false;\n")
  129.                 #Toggle constant power on/ off
  130.                 mainLoop.append(tab("loop") + "if (vexRT[" + btn + "]){\n")
  131.                 loopTabs += 1
  132.                 mainLoop.append(tab("loop") + "if(" + buttonState + "){\n")
  133.                 loopTabs += 1
  134.                 mainLoop.append(tab("loop") + buttonState + " = false;\n")
  135.                 loopTabs -= 1
  136.                 mainLoop.append(tab("loop") + "}\n")
  137.                 mainLoop.append(tab("loop") + "else{\n")
  138.                 loopTabs += 1
  139.                 mainLoop.append(tab("loop") + buttonState + " = true;\n")
  140.                 loopTabs -= 1
  141.                 mainLoop.append(tab("loop") + "}\n")
  142.                 loopTabs -= 1
  143.                 mainLoop.append(tab("loop") + "}\n")
  144.                 #Apply the pressure
  145.                 mainLoop.append(tab("loop") + "if(" + buttonState + "){\n")
  146.                 loopTabs += 1
  147.                 mainLoop.append(tab("loop") + motor + " = " + str(power) + ";\n")
  148.                 loopTabs -= 1
  149.                 mainLoop.append(tab("loop") + "}\n")
  150.                 mainLoop.append(tab("loop") + "else{\n")
  151.                 loopTabs += 1
  152.                 mainLoop.append("\t" + nonConst)
  153.                 loopTabs -= 1
  154.                 mainLoop.append(tab("loop") + "}\n")
  155.                 loopTabs -= 1
  156.     else:
  157.         mainTask.append(tab("task") + "bool " + buttonState + " = false;\n")
  158.         mainLoop.append(tab("loop") + "if (vexRT[" + btn + "]){\n") #if the button is pressed
  159.         loopTabs += 1
  160.         mainLoop.append(tab("loop") + "if(" + buttonState + "){\n") #check the toggle state - if true
  161.         loopTabs += 1
  162.         mainLoop.append(tab("loop") + buttonState + " = false;\n") #toggle to false
  163.         mainLoop.append(tab("loop") + motor + " = 0;\n") #set the new motor power
  164.         loopTabs -= 1
  165.         mainLoop.append(tab("loop") + "}\n")
  166.         mainLoop.append(tab("loop") + "else{\n") #if false
  167.         loopTabs += 1
  168.         mainLoop.append(tab("loop") + buttonState + " = true;\n") #toggle to true
  169.         mainLoop.append(tab("loop") + motor + " = " + str(power) + ";\n") #set the new motor power
  170.         loopTabs -= 1
  171.         mainLoop.append(tab("loop") + "}\n")
  172.         loopTabs -= 1
  173.         mainLoop.append(tab("loop") + "}\n")
  174.     #loopTabs -= 1
  175.  
  176. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement