diff --git a/.gitignore b/.gitignore
index dc8f12bb..510af278 100644
--- a/.gitignore
+++ b/.gitignore
@@ -58,3 +58,13 @@ static/blockly-tutorial
.Trashes
ehthumbs.db
Thumbs.db
+
+static/.DS_Store
+
+static/.DS_Store
+
+static/js/.DS_Store
+
+static/css/.DS_Store
+
+static/.DS_Store
diff --git a/awesomeinput.py b/awesomeinput.py
new file mode 100644
index 00000000..0a8443c4
--- /dev/null
+++ b/awesomeinput.py
@@ -0,0 +1,35 @@
+import time
+import pigpio
+import logging
+
+class Awesomeinput:
+ """
+ ound trip time.
+ """
+
+ def __init__(self, pi, linesensorpin):
+ """
+ The class is instantiated with the Pi to use and the
+ gpios connected to the trigger and echo pins.
+ """
+ self.pi = pi
+ self._linesensorpin = linesensorpin
+ pi.set_mode(self._linesensorpin, pigpio.INPUT)
+ self._inited = True
+
+ def buttonInput(self, awesome_button):
+ self.pi.set_mode(awesome_button, pigpio.INPUT)
+ self.pi.set_pull_up_down(awesome_button, pigpio.PUD_UP)
+ print "Button pin:" + str(awesome_button)
+ print "Button reads: " + str(self.pi.read(awesome_button))
+ if self.pi.read(awesome_button) == 1:
+ return False
+ else:
+ return True
+
+ def lineSensor(self):
+ if self._inited:
+ if self.pi.read(self._linesensorpin) == 1:
+ return False
+ else:
+ return True
diff --git a/awesomeoutput.py b/awesomeoutput.py
new file mode 100644
index 00000000..181f27b1
--- /dev/null
+++ b/awesomeoutput.py
@@ -0,0 +1,20 @@
+import time
+import pigpio
+import logging
+
+class Awesomeoutput:
+ """
+ ound trip time.
+ """
+
+ def __init__(self, pi):
+ """
+ The class is instantiated with the Pi to use and the
+ gpios connected to the trigger and echo pins.
+ """
+ self.pi = pi
+
+
+ def ledOutput(self, awesome_led, LED_State):
+ self.pi.set_mode(awesome_led, pigpio.OUTPUT)
+ self.pi.write(awesome_led, LED_State)
diff --git a/coderbot.cfg b/coderbot.cfg
index 47fa3526..7e5ef258 100644
--- a/coderbot.cfg
+++ b/coderbot.cfg
@@ -1 +1 @@
-{"move_tr_speed": "80", "move_fw_elapse": "1", "camera_color_object_size_min": "4000", "camera_path_object_size_min": "4000", "load_at_start": "", "move_tr_elapse": "0.5", "sound_stop": "$shutdown.mp3", "prog_video_rec": "true", "show_control_move_commands": "true", "prog_level": "adv", "prog_scrollbars": "true", "move_fw_speed": "100", "camera_color_object_size_max": "160000", "sound_shutter": "$shutter.mp3", "show_page_prefs": "true", "cv_image_factor": "4", "ctrl_hud_image": "", "button_func": "none", "ctrl_fw_elapse": "-1", "ctrl_tr_elapse": "-1", "move_power_angle_2": "60", "move_power_angle_3": "60", "move_power_angle_1": "40", "move_motor_trim": "1.1", "show_page_program": "true", "sound_start": "$startup.mp3", "camera_exposure_mode": "auto", "ctrl_tr_speed": "80", "ctrl_fw_speed": "100", "camera_refresh_timeout": "0.1", "camera_jpeg_quality": "20", "prog_maxblocks": "-1", "move_motor_mode": "dc", "camera_path_object_size_max": "160000", "show_page_control": "true"}
\ No newline at end of file
+{"move_tr_speed": "80", "move_fw_elapse": "1", "load_at_start": "", "move_tr_elapse": "0.5", "show_control_move_commands": "true", "prog_level": "adv", "prog_scrollbars": "true", "move_fw_speed": "100", "ctrl_fw_elapse": "-1", "ctrl_tr_elapse": "-1", "move_power_angle_2": "60", "move_power_angle_3": "60", "move_power_angle_1": "40", "move_motor_trim": "1.1", "show_page_program": "true", "ctrl_tr_speed": "80", "ctrl_fw_speed": "100", "prog_maxblocks": "-1", "move_motor_mode": "dc", "show_page_control": "true"}
\ No newline at end of file
diff --git a/coderbot.py b/coderbot.py
index 7900e8b8..42dbc9cd 100644
--- a/coderbot.py
+++ b/coderbot.py
@@ -23,38 +23,40 @@
import config
import logging
import sonar
+import awesomeoutput
+import awesomeinput
+
PIN_MOTOR_ENABLE = 22
-PIN_LEFT_FORWARD = 25
-PIN_LEFT_BACKWARD = 24
-PIN_RIGHT_FORWARD = 4
-PIN_RIGHT_BACKWARD = 17
+PIN_LEFT_FORWARD = 8
+PIN_LEFT_BACKWARD = 7
+PIN_RIGHT_FORWARD = 10
+PIN_RIGHT_BACKWARD = 9
PIN_PUSHBUTTON = 11
-PIN_SERVO_3 = 9
-PIN_SERVO_4 = 10
-PIN_SONAR_1_TRIGGER = 18
-PIN_SONAR_1_ECHO = 7
-PIN_SONAR_2_TRIGGER = 18
-PIN_SONAR_2_ECHO = 8
-PIN_SONAR_3_TRIGGER = 18
-PIN_SONAR_3_ECHO = 23
-PIN_ENCODER_LEFT = 14
-PIN_ENCODER_RIGHT = 15
+#PIN_SERVO_3 = 9
+#PIN_SERVO_4 = 10
+PIN_SONAR_1_TRIGGER = 17
+PIN_SONAR_1_ECHO = 18
PWM_FREQUENCY = 100 #Hz
PWM_RANGE = 100 #0-100
+PIN_LINE_SENSOR = 25
+
+#OUTPUT_LED = 1
+#PIN_LED = 24
+
def coderbot_callback(gpio, level, tick):
return CoderBot.get_instance().callback(gpio, level, tick)
class CoderBot:
- _pin_out = [PIN_MOTOR_ENABLE, PIN_LEFT_FORWARD, PIN_RIGHT_FORWARD, PIN_LEFT_BACKWARD, PIN_RIGHT_BACKWARD, PIN_SERVO_3, PIN_SERVO_4]
+ _pin_out = [PIN_MOTOR_ENABLE, PIN_LEFT_FORWARD, PIN_RIGHT_FORWARD, PIN_LEFT_BACKWARD, PIN_RIGHT_BACKWARD]
def __init__(self, servo=False, motor_trim_factor=1.0):
self.pi = pigpio.pi('localhost')
self.pi.set_mode(PIN_PUSHBUTTON, pigpio.INPUT)
- self.pi.set_mode(PIN_ENCODER_LEFT, pigpio.INPUT)
- self.pi.set_mode(PIN_ENCODER_RIGHT, pigpio.INPUT)
+# self.pi.set_mode(PIN_ENCODER_LEFT, pigpio.INPUT)
+# self.pi.set_mode(PIN_ENCODER_RIGHT, pigpio.INPUT)
self._cb = dict()
self._cb_last_tick = dict()
self._cb_elapse = dict()
@@ -65,17 +67,15 @@ def __init__(self, servo=False, motor_trim_factor=1.0):
else:
self.motor_control = self._dc_motor
self._cb1 = self.pi.callback(PIN_PUSHBUTTON, pigpio.EITHER_EDGE, coderbot_callback)
- self._cb2 = self.pi.callback(PIN_ENCODER_LEFT, pigpio.RISING_EDGE, coderbot_callback)
- self._cb3 = self.pi.callback(PIN_ENCODER_RIGHT, pigpio.RISING_EDGE, coderbot_callback)
for pin in self._pin_out:
self.pi.set_PWM_frequency(pin, PWM_FREQUENCY)
self.pi.set_PWM_range(pin, PWM_RANGE)
self.stop()
self._is_moving = False
- self.sonar = [sonar.Sonar(self.pi, PIN_SONAR_1_TRIGGER, PIN_SONAR_1_ECHO),
- sonar.Sonar(self.pi, PIN_SONAR_2_TRIGGER, PIN_SONAR_2_ECHO),
- sonar.Sonar(self.pi, PIN_SONAR_3_TRIGGER, PIN_SONAR_3_ECHO)]
+ self.sonar = [sonar.Sonar(self.pi, PIN_SONAR_1_TRIGGER, PIN_SONAR_1_ECHO)]
+ self.awesomeoutput = awesomeoutput.Awesomeoutput(self.pi)
+ self.awesomeinput = awesomeinput.Awesomeinput(self.pi, PIN_LINE_SENSOR)
self._encoder_cur_left = 0
self._encoder_cur_right = 0
self._encoder_target_left = -1
@@ -84,8 +84,8 @@ def __init__(self, servo=False, motor_trim_factor=1.0):
def exit(self):
self._cb1.cancel()
- self._cb2.cancel()
- self._cb3.cancel()
+# self._cb2.cancel()
+# self._cb3.cancel()
for s in self.sonar:
s.cancel()
@@ -122,12 +122,21 @@ def servo4(self, angle):
def get_sonar_distance(self, sonar_id=0):
return self.sonar[sonar_id].get_distance()
+ def ledOutput(self, pin_led, output_led):
+ self.awesomeoutput.ledOutput(pin_led, output_led)
+
+ def buttonInput(self, pin_button):
+ return self.awesomeinput.buttonInput(pin_button)
+
+ def lineSensor(self):
+ return self.awesomeinput.lineSensor()
+
def _dc_motor(self, speed_left=100, speed_right=100, elapse=-1, steps_left=-1, steps_right=-1 ):
self._encoder_cur_left = 0
self._encoder_cur_right = 0
self._encoder_target_left = steps_left
self._encoder_target_right = steps_right
-
+
self._is_moving = True
if speed_left < 0:
speed_left = abs(speed_left)
@@ -210,7 +219,7 @@ def callback(self, gpio, level, tick):
elapse = self._cb_elapse.get(gpio)
if level == 0:
self._cb_last_tick[gpio] = tick
- elif tick - self._cb_last_tick[gpio] > elapse:
+ elif tick - self._cb_last_tick[gpio] > elapse:
self._cb_last_tick[gpio] = tick
print "pushed: ", level, tick
cb()
@@ -226,5 +235,3 @@ def reboot(self):
def sleep(self, elapse):
time.sleep(elapse)
-
-
diff --git a/data/program_face_find.data b/data/program_face_find.data
deleted file mode 100644
index 56618209..00000000
--- a/data/program_face_find.data
+++ /dev/null
@@ -1 +0,0 @@
-{"dom_code": "WHILETRUEfaceALLface_xGETFROM_STARTface1face_sizeGETFROM_STARTface2face: face_xface_xLTface_x-10LEFT400.1GTface_x10RIGHT400.1", "code": "face = None\nface_x = None\nface_size = None\n\n\nwhile True:\n get_prog_eng().check_end()\n face = get_cam().find_face()\n face_x = face[0]\n face_size = face[1]\n get_cam().set_text(str('face: ') + str(face_x))\n if face_x:\n if face_x < -10:\n get_bot().left(speed=40, elapse=0.1)\n elif face_x > 10:\n get_bot().right(speed=40, elapse=0.1)\n else:\n get_bot().stop()\n", "name": "face_find"}
\ No newline at end of file
diff --git a/data/program_find_code_test.data b/data/program_find_code_test.data
deleted file mode 100644
index 25424314..00000000
--- a/data/program_find_code_test.data
+++ /dev/null
@@ -1 +0,0 @@
-{"dom_code": "WHILETRUE", "code": "while True:\n get_prog_eng().check_end()\n get_cam().set_text(get_cam().find_code())\n", "name": "find_code_test"}
\ No newline at end of file
diff --git a/data/program_find_color.data b/data/program_find_color.data
deleted file mode 100644
index 68bc4586..00000000
--- a/data/program_find_color.data
+++ /dev/null
@@ -1 +0,0 @@
-{"dom_code": "WHILETRUEdistDIST#96b73cangleANGLE#96b73cDistance: dist angle: angle", "code": "dist = None\nangle = None\n\n\nwhile True:\n get_prog_eng().check_end()\n dist = get_cam().find_color('#96b73c')[0]\n angle = get_cam().find_color('#96b73c')[1]\n get_cam().set_text(''.join([str(temp_value) for temp_value in ['Distance: ', dist, ' angle: ', angle]]))\n", "name": "find_color"}
\ No newline at end of file
diff --git a/data/program_find_text.data b/data/program_find_text.data
deleted file mode 100644
index 69ca7c8b..00000000
--- a/data/program_find_text.data
+++ /dev/null
@@ -1 +0,0 @@
-{"dom_code": "WHILETRUEalpha#802b29", "code": "while True:\n get_prog_eng().check_end()\n get_cam().set_text(get_cam().find_text(accept=\"alpha\", back_color='#802b29'))\n", "name": "find_text"}
\ No newline at end of file
diff --git a/data/program_hear_test.data b/data/program_hear_test.data
deleted file mode 100644
index 31ff1247..00000000
--- a/data/program_hear_test.data
+++ /dev/null
@@ -1 +0,0 @@
-{"dom_code": "WHILETRUE1001.0", "code": "while True:\n get_prog_eng().check_end()\n get_cam().set_text(get_audio().hear(level=100, elapse=1))\n", "name": "hear_test"}
\ No newline at end of file
diff --git a/data/program_img_average_test.data b/data/program_img_average_test.data
deleted file mode 100644
index 90bacb94..00000000
--- a/data/program_img_average_test.data
+++ /dev/null
@@ -1 +0,0 @@
-{"dom_code": "WHILETRUEV", "code": "while True:\n get_prog_eng().check_end()\n get_cam().set_text(get_cam().get_average()[2])\n", "name": "img_average_test"}
\ No newline at end of file
diff --git a/data/program_obstacle_avoidance.data b/data/program_obstacle_avoidance.data
index 86bc1547..cb276b87 100644
--- a/data/program_obstacle_avoidance.data
+++ b/data/program_obstacle_avoidance.data
@@ -1 +1 @@
-{"dom_code": "WHILETRUELT10RIGHT1000.5FORWARD100-1", "code": "while True:\n get_prog_eng().check_end()\n if get_bot().get_sonar_distance() < 10:\n get_bot().right(speed=100, elapse=0.5)\n else:\n get_bot().forward(speed=100, elapse=-1)\nget_bot().stop()\n", "name": "obstacle_avoidance"}
\ No newline at end of file
+{"dom_code": "WHILETRUELT10RIGHT1000.5FORWARD100-1", "code": "while True:\n get_prog_eng().check_end()\n if get_bot().get_sonar_distance() < 10:\n get_bot().right(speed=100, elapse=0.5)\n else:\n get_bot().forward(speed=100, elapse=-1)\nget_bot().stop()\n", "name": "obstacle_avoidance"}
diff --git a/data/program_path_ahead.data b/data/program_path_ahead.data
deleted file mode 100644
index a6519297..00000000
--- a/data/program_path_ahead.data
+++ /dev/null
@@ -1 +0,0 @@
-{"dom_code": "WHILETRUE", "code": "while True:\n get_prog_eng().check_end()\n get_cam().set_text(get_cam().path_ahead())\n", "name": "path_ahead"}
\ No newline at end of file
diff --git a/data/program_sound_rec_test.data b/data/program_sound_rec_test.data
deleted file mode 100644
index 9360e9c1..00000000
--- a/data/program_sound_rec_test.data
+++ /dev/null
@@ -1 +0,0 @@
-{"dom_code": "test01.wav5", "code": "get_audio().record_to_file(filename='test01.wav', elapse=5)\n", "name": "sound_rec_test"}
\ No newline at end of file
diff --git a/data/program_test_sound.data b/data/program_test_sound.data
deleted file mode 100644
index d4949f55..00000000
--- a/data/program_test_sound.data
+++ /dev/null
@@ -1 +0,0 @@
-{"dom_code": "test.wav10test.wav", "code": "get_audio().record_to_file(filename='test.wav', elapse=10)get_audio().play('test.wav')\n", "name": "test_sound"}
\ No newline at end of file
diff --git a/data/program_test_speech_recog.data b/data/program_test_speech_recog.data
deleted file mode 100644
index fc86fbd8..00000000
--- a/data/program_test_speech_recog.data
+++ /dev/null
@@ -1 +0,0 @@
-{"dom_code": "WHILETRUEListening...model_simple1", "code": "while True:\n get_prog_eng().check_end()\n get_cam().set_text('Listening...')\n get_cam().set_text(get_audio().speech_recog(model=\"model_simple\"))\n get_cam().sleep(1)\n", "name": "test_speech_recog"}
\ No newline at end of file
diff --git a/infrared.py b/infrared.py
new file mode 100644
index 00000000..17d8f9a7
--- /dev/null
+++ b/infrared.py
@@ -0,0 +1,29 @@
+import time
+import pigpio
+import logging
+
+#
+# Infrared Sensor from CamJam Edukit3
+#
+# Pin 1 - 5V
+# Pin 2 - Ground
+# Pin 3 - gpio (here P1-8, gpio 14, TXD is used)
+#
+# The internal gpio pull-up is enabled so that the sensor
+# normally reads high. It reads low when a magnet is close.
+#
+
+INFRARED=14
+
+pi = pigpio.pi() # connect to local Pi
+
+pi.set_mode(HALL, pigpio.INPUT)
+pi.set_pull_up_down(HALL, pigpio.PUD_UP)
+
+start = time.time()
+
+while (time.time() - start) < 60:
+ print("Hall = {}".format(pi.read(HALL)))
+ time.sleep(0.2)
+
+pi.stop()
diff --git a/main.py b/main.py
index da7026dc..786f0f40 100644
--- a/main.py
+++ b/main.py
@@ -23,12 +23,12 @@
import time
import logging.handlers
import subprocess
-import picamera
+#import picamera
from coderbot import CoderBot, PIN_PUSHBUTTON
-from camera import Camera
-from motion import Motion
-from audio import Audio
+#from camera import Camera
+#from motion import Motion
+#from audio import Audio
from program import ProgramEngine, Program
from config import Config
@@ -38,7 +38,7 @@
logger = logging.getLogger()
logger.setLevel(logging.INFO)
-
+
# add a rotating handler
handler = logging.handlers.RotatingFileHandler('logs/coderbot.log', maxBytes=1000000, backupCount=5)
logger.addHandler(handler)
@@ -69,7 +69,7 @@ def get_locale():
@app.route("/")
def handle_home():
- stream_port = cam.stream_port if cam else ""
+ stream_port = cam.stream_port if cam else ""
return render_template('main.html', host=request.host[:request.host.find(':')], stream_port=stream_port, locale = get_locale(), config=app.bot_config, program_level=app.bot_config.get("prog_level", "std"), cam=cam!=None)
@app.route("/config", methods=["POST"])
@@ -159,10 +159,10 @@ def handle_bot():
@app.route("/bot/status", methods=["GET"])
def handle_bot_status():
logging.info( "bot_status" )
- return json.dumps({'status': 'ok'})
+ return json.dumps({'status': 'ok'})
def video_stream(cam):
- refresh_timeout = float(app.bot_config.get("camera_refresh_timeout", "0.1"))
+ refresh_timeout = float(app.bot_config.get("camera_refresh_timeout", "0.1"))
while not app.shutdown_requested:
last_refresh_time = time.time()
frame = cam.get_image_jpeg()
@@ -222,7 +222,7 @@ def handle_photo_cmd(filename):
def handle_photo_thumb(filename):
logging.debug("photo_thumb")
return send_file(cam.get_photo_thumb_file(filename))
-
+
@app.route("/program/list", methods=["GET"])
def handle_program_list():
logging.debug("program_list")
@@ -265,7 +265,7 @@ def handle_program_end():
logging.debug("program_end")
if app.prog:
app.prog.end()
- app.prog = None
+ app.prog = None
return "ok"
@app.route("/program/status", methods=["GET"])
@@ -274,7 +274,7 @@ def handle_program_status():
prog = Program("")
if app.prog:
prog = app.prog
- return json.dumps({'name': prog.name, "running": prog.is_running()})
+ return json.dumps({'name': prog.name, "running": prog.is_running()})
@app.route("/tutorial")
def handle_tutorial():
@@ -307,14 +307,10 @@ def run_server():
try:
app.bot_config = Config.read()
bot = CoderBot.get_instance(servo=(app.bot_config.get("move_motor_mode")=="servo"), motor_trim_factor=float(app.bot_config.get('move_motor_trim', 1.0)))
- audio = Audio.get_instance()
- audio.say(app.bot_config.get("sound_start"))
- try:
- cam = Camera.get_instance()
- #motion = Motion.get_instance()
- except picamera.exc.PiCameraError:
- logging.error("Camera not present")
-
+# audio = Audio.get_instance()
+# audio.say(app.bot_config.get("sound_start"))
+
+
if app.bot_config.get('load_at_start') and len(app.bot_config.get('load_at_start')):
app.prog = app.prog_engine.load(app.bot_config.get('load_at_start'))
app.prog.execute()
@@ -323,7 +319,7 @@ def run_server():
logging.error(e)
bot.set_callback(PIN_PUSHBUTTON, button_pushed, 100)
- app.run(host="0.0.0.0", port=8080, debug=True, use_reloader=False, threaded=True)
+ app.run(host="roverbot.local", port=8080, debug=True, use_reloader=False, threaded=True)
finally:
if cam:
cam.exit()
diff --git a/program.py b/program.py
index ea2b8534..c1c6267f 100644
--- a/program.py
+++ b/program.py
@@ -24,26 +24,22 @@
import logging
import coderbot
-import camera
-import motion
+#import camera
+#import motion
import config
-import audio
+#import audio
+
PROGRAM_PATH = "./data/"
PROGRAM_PREFIX = "program_"
PROGRAM_SUFFIX = ".data"
-def get_cam():
- return camera.Camera.get_instance()
def get_bot():
return coderbot.CoderBot.get_instance()
-def get_motion():
- return motion.Motion.get_instance()
-
-def get_audio():
- return audio.Audio.get_instance()
+#def get_motion():
+# return motion.Motion.get_instance()
def get_prog_eng():
return ProgramEngine.get_instance()
@@ -58,9 +54,9 @@ def __init__(self):
for dirname, dirnames, filenames, in os.walk("./data"):
for filename in filenames:
if PROGRAM_PREFIX in filename:
- program_name = filename[len(PROGRAM_PREFIX):-len(PROGRAM_SUFFIX)]
+ program_name = filename[len(PROGRAM_PREFIX):-len(PROGRAM_SUFFIX)]
self._repository[program_name] = filename
-
+
@classmethod
def get_instance(cls):
if not cls._instance:
@@ -69,13 +65,13 @@ def get_instance(cls):
def list(self):
return self._repository.keys()
-
+
def save(self, program):
self._program = self._repository[program.name] = program
f = open(PROGRAM_PATH + PROGRAM_PREFIX + program.name + PROGRAM_SUFFIX, 'w')
json.dump(program.as_json(), f)
f.close()
-
+
def load(self, name):
#return self._repository[name]
f = open(PROGRAM_PATH + PROGRAM_PREFIX + name + PROGRAM_SUFFIX, 'r')
@@ -109,7 +105,7 @@ def __init__(self, name, code=None, dom_code=None):
self._thread = None
self.name = name
self._dom_code = dom_code
- self._code = code
+ self._code = code
def execute(self):
if self._running:
@@ -142,24 +138,13 @@ def run(self):
#print "run.1"
bot = coderbot.CoderBot.get_instance()
program = self
- try:
- cam = camera.Camera.get_instance()
- if config.Config.get().get("prog_video_rec") == "true":
- get_cam().video_rec(program.name)
- logging.debug("starting video")
- except:
- logging.error("Camera not available")
-
+
exec(self._code)
#print "run.2"
except RuntimeError as re:
logging.info("quit: " + str(re))
finally:
- try:
- get_cam().video_stop() #if video is running, stop it
- get_motion().stop()
- except:
- logging.error("Camera not available")
+
self._running = False
def as_json(self):
@@ -170,4 +155,3 @@ def as_json(self):
@classmethod
def from_json(cls, map):
return Program(name=map['name'], dom_code=map['dom_code'], code=map['code'])
-
diff --git a/static/.DS_Store b/static/.DS_Store
deleted file mode 100644
index eb3d484a..00000000
Binary files a/static/.DS_Store and /dev/null differ
diff --git a/static/css/.DS_Store b/static/css/.DS_Store
deleted file mode 100644
index 5008ddfc..00000000
Binary files a/static/css/.DS_Store and /dev/null differ
diff --git a/static/js/.DS_Store b/static/js/.DS_Store
deleted file mode 100644
index 5008ddfc..00000000
Binary files a/static/js/.DS_Store and /dev/null differ
diff --git a/static/js/blockly/blocks.js b/static/js/blockly/blocks.js
index fb42b1df..df5d04e5 100644
--- a/static/js/blockly/blocks.js
+++ b/static/js/blockly/blocks.js
@@ -35,7 +35,7 @@ Blockly.Blocks['coderbot_repeat'] = {
di.appendField(new Blockly.FieldImage('/images/blocks/loop_repeat.png', 32, 32, '*'));
} else {
di.appendField(Blockly.Msg.CONTROLS_REPEAT_TITLE_REPEAT)
- }
+ }
di.appendField(new Blockly.FieldTextInput('10',
Blockly.FieldTextInput.nonnegativeIntegerValidator), 'TIMES');
if(CODERBOT_PROG_LEVEL.indexOf("basic")<0) {
@@ -63,13 +63,6 @@ Blockly.Python['coderbot_repeat'] = function(block) {
return code;
};
-Blockly.Python['text_print'] = function(block) {
- // Print statement.
- var argument0 = Blockly.Python.valueToCode(block, 'TEXT',
- Blockly.Python.ORDER_NONE) || '\'\'';
- return 'get_cam().set_text(' + argument0 + ')\n';
-};
-
Blockly.Blocks['coderbot_moveForward'] = {
// Block for moving forward.
@@ -118,9 +111,9 @@ Blockly.Blocks['coderbot_moveBackward'] = {
Blockly.Python['coderbot_moveBackward'] = function(block) {
// Generate Python for moving forward.
- if(CODERBOT_PROG_MOVE_MOTION) {
+ if(CODERBOT_PROG_MOVE_MOTION) {
return 'get_motion().move(dist=' + (-CODERBOT_MOV_FW_DEF_ELAPSE) + ')\n';
-
+
} else {
return 'get_bot().backward(speed=' + CODERBOT_MOV_FW_DEF_SPEED + ', elapse=' + CODERBOT_MOV_FW_DEF_ELAPSE + ')\n';
}
@@ -177,7 +170,7 @@ Blockly.Python['coderbot_turnRight'] = function(block) {
} else {
return 'get_bot().right(speed=' + CODERBOT_MOV_TR_DEF_SPEED + ', elapse=' + CODERBOT_MOV_TR_DEF_ELAPSE + ')\n';
- }
+ }
};
Blockly.Blocks['coderbot_audio_say'] = {
@@ -242,7 +235,7 @@ Blockly.Blocks['coderbot_adv_move'] = {
[Blockly.Msg.CODERBOT_MOVE_ADV_TIP_RIGHT, 'RIGHT']]
this.setHelpUrl('http://code.google.com/p/blockly/wiki/Move');
this.setColour(40);
-
+
this.appendDummyInput("ACTION")
.appendField(Blockly.Msg.CODERBOT_MOVE_ADV_MOVE)
.appendField(new Blockly.FieldDropdown(ACTIONS), 'ACTION');
@@ -345,7 +338,7 @@ Blockly.Blocks['coderbot_adv_motor'] = {
init: function() {
this.setHelpUrl('http://code.google.com/p/blockly/wiki/Motor');
this.setColour(40);
-
+
this.appendValueInput('SPEED_LEFT')
.setCheck('Number')
.appendField(Blockly.Msg.CODERBOT_MOVE_ADV_MOTOR + " " + Blockly.Msg.CODERBOT_MOVE_ADV_MOTOR_SPEED_LEFT);
@@ -590,7 +583,7 @@ Blockly.Blocks['coderbot_cam_average'] = {
this.setColour(250);
this.appendDummyInput()
.appendField(Blockly.Msg.CODERBOT_SENSOR_AVERAGE)
- .appendField(new Blockly.FieldDropdown([[Blockly.Msg.CODERBOT_SENSOR_AVERAGE_HUE, 'H'],
+ .appendField(new Blockly.FieldDropdown([[Blockly.Msg.CODERBOT_SENSOR_AVERAGE_HUE, 'H'],
[Blockly.Msg.CODERBOT_SENSOR_AVERAGE_SATURATION, 'S'],
[Blockly.Msg.CODERBOT_SENSOR_AVERAGE_VALUE, 'V'],
[Blockly.Msg.CODERBOT_SENSOR_AVERAGE_ALL,'ALL']]), 'RETVAL')
@@ -618,7 +611,7 @@ Blockly.Blocks['coderbot_adv_findText'] = {
this.setColour(250);
this.appendDummyInput()
.appendField(Blockly.Msg.CODERBOT_SENSOR_FINDTEXT_FIND)
- .appendField(new Blockly.FieldDropdown([[Blockly.Msg.CODERBOT_SENSOR_FINDTEXT_ACCEPT_ALPHA, 'alpha'],
+ .appendField(new Blockly.FieldDropdown([[Blockly.Msg.CODERBOT_SENSOR_FINDTEXT_ACCEPT_ALPHA, 'alpha'],
[Blockly.Msg.CODERBOT_SENSOR_FINDTEXT_ACCEPT_NUM, 'num'],
[Blockly.Msg.CODERBOT_SENSOR_FINDTEXT_ACCEPT_ALPHANUM,'alphanum'],
[Blockly.Msg.CODERBOT_SENSOR_FINDTEXT_ACCEPT_UNSPEC,'unspec']]), 'ACCEPT')
@@ -631,13 +624,6 @@ Blockly.Blocks['coderbot_adv_findText'] = {
}
};
-Blockly.Python['coderbot_adv_findText'] = function(block) {
- // Boolean values true and false.
- var accept = block.getFieldValue('ACCEPT');
- var color = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_NONE);
- var code = 'get_cam().find_text(accept="' + accept + '", back_color=' + color + ')';
- return [code, Blockly.Python.ORDER_ATOMIC];
-};
Blockly.Blocks['coderbot_adv_findCode'] = {
/**
@@ -802,9 +788,7 @@ Blockly.Blocks['coderbot_sonar_get_distance'] = {
this.setColour(250);
this.appendDummyInput()
.appendField(Blockly.Msg.CODERBOT_SONAR_GET_DISTANCE)
- .appendField(new Blockly.FieldDropdown([[Blockly.Msg.CODERBOT_SONAR_SENSOR_1, "0"],
- [Blockly.Msg.CODERBOT_SONAR_SENSOR_2, "1"],
- [Blockly.Msg.CODERBOT_SONAR_SENSOR_3, "2"]]), 'SONAR');
+ .appendField(new Blockly.FieldDropdown([[Blockly.Msg.CODERBOT_SONAR_SENSOR_1, "0"]]), 'SONAR');
this.setOutput(true, 'Number');
this.setTooltip(Blockly.Msg.LOGIC_BOOLEAN_TOOLTIP);
}
@@ -817,3 +801,60 @@ Blockly.Python['coderbot_sonar_get_distance'] = function(block) {
return [code, Blockly.Python.ORDER_ATOMIC];
};
+Blockly.Blocks['awesome_led'] = {
+ init: function() {
+ this.appendDummyInput()
+ .appendField("LED connected to Pin")
+ .appendField(new Blockly.FieldDropdown([["04","4"], ["22","22"], ["23","23"], ["24","24"], ["27","27"]]), "GPIO")
+ .appendField("is")
+ .appendField(new Blockly.FieldDropdown([["ON","1"], ["OFF","0"]]), "LED_State");
+// this.setOutput(true, 'Number');
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setColour(230);
+ this.setTooltip('');
+ this.setHelpUrl('');
+ }
+};
+
+Blockly.Python['awesome_led'] = function(block) {
+ var dropdown_gpio = block.getFieldValue('GPIO');
+ var dropdown_led_state = block.getFieldValue('LED_State');
+ var code = 'get_bot().ledOutput(' + dropdown_gpio + ', ' + dropdown_led_state + ' )\n';
+ return code;
+};
+
+Blockly.Blocks['awesome_button'] = {
+ init: function() {
+ this.appendDummyInput()
+ .appendField("Button connected to Pin")
+ .appendField(new Blockly.FieldDropdown([["04","4"], ["22","22"], ["23","23"], ["24","24"], ["27","27"]]), "GPIO")
+ .appendField("is pressed")
+ this.setOutput(true, 'Boolean')
+ this.setColour(230);
+ this.setTooltip('');
+ this.setHelpUrl('');
+ }
+};
+
+Blockly.Python['awesome_button'] = function(block) {
+ var dropdown_gpio = block.getFieldValue('GPIO');
+ var code = 'get_bot().buttonInput(' + dropdown_gpio + ')';
+ return [code, Blockly.Python.ORDER_NONE];
+};
+
+Blockly.Blocks['awesome_line_sensor'] = {
+ init: function() {
+ this.appendDummyInput()
+ .appendField("Detect Line")
+ this.setOutput(true, 'Boolean')
+ this.setColour(230);
+ this.setTooltip('');
+ this.setHelpUrl('');
+ }
+};
+
+Blockly.Python['awesome_line_sensor'] = function(block) {
+ var code = 'get_bot().lineSensor()';
+ return [code, Blockly.Python.ORDER_NONE];
+};
diff --git a/static/js/control.js b/static/js/control.js
index 772a3906..cdb3ea29 100644
--- a/static/js/control.js
+++ b/static/js/control.js
@@ -2,7 +2,7 @@ var bot = new CoderBot('#b_counter');
$(document).on( "pagecontainershow", function(){
ScaleContentToDevice();
-
+
$(window).on("resize orientationchange", function(){
ScaleContentToDevice();
})
@@ -12,20 +12,20 @@ function ScaleContentToDevice(){
scroll(0, 0);
var w = $( window ).width();
var h = $( window ).height();
-
+
var width = w;
var height = h - $(".ui-header").outerHeight() - $(".ui-footer").outerHeight();
var contentHeight = height - $(".ui-content").outerHeight() + $(".ui-content").height();
var contentWidth = (contentHeight * 4) / 3;
if (width - contentWidth > 384) {
- $("#ui_control_left").width((width - contentWidth)/2);
- $("#ui_control_center").width(contentWidth);
- $("#ui_control_right").width((width - contentWidth)/2);
+ $("#ui_control_left").width(contentWidth);
+ $("#ui_control_center").width((width - contentWidth)/2);
+ $("#ui_control_right").width((width - contentWidth)/2);
} else {
- $("#ui_control_left").width((width)/2);
- $("#ui_control_center").width(0);
- $("#ui_control_right").width((width)/2);
+ $("#ui_control_left").width(0);
+ $("#ui_control_center").width((width)/2);
+ $("#ui_control_right").width((width)/2);
}
$(".ui-content-stream").height(contentHeight);
@@ -40,7 +40,7 @@ $(document).on( "pageshow", '#page-control', function( event, ui ) {
$(document).on( "pagecreate", '#page-control', function( event ) {
if(Modernizr.touch){
- /* browser with either Touch Events of Pointer Events running on touch-capable device */
+ /* browser with either Touch Events of Pointer Events running on touch-capable device */
$('#b_forward')
.on("touchstart", function (){bot.move(CODERBOT_CTRL_FW_SPEED,CODERBOT_CTRL_FW_ELAPSE);})
.on("touchend", function (){bot.stop();});
@@ -98,7 +98,7 @@ $(document).on( "pagecreate", '#page-control', function( event ) {
canvas.getContext('2d').drawImage(img.get(0), 0, 0, img.width(), img.height());
var pixelData = canvas.getContext('2d').getImageData(x, y, 1, 1).data;
var colorHex = "#" + paddedHexString(pixelData[0]) + paddedHexString(pixelData[1]) + paddedHexString(pixelData[2]);
- alert("Color at point: " + colorHex);
+ alert("Color at point: " + colorHex);
});
$( ".photopopup" ).on({
popupbeforeposition: function() {
@@ -111,7 +111,7 @@ $(document).on( "pagecreate", '#page-control', function( event ) {
function paddedHexString(n) {
var ns = n.toString(16);
- return ("00" + ns).substring(ns.length);
+ return ("00" + ns).substring(ns.length);
}
@@ -128,7 +128,7 @@ function findPos(obj) {
}
$(document).on( "pagecreate", '#page-preferences', function( event ) {
- $('#f_config').on("submit", function (){
+ $('#f_config').on("submit", function (){
var form_data = $(this).serialize();
$.post(url='/config', form_data, success=function(){
alert(BotMessages.Saved);
@@ -164,7 +164,7 @@ $(document).on( "pagecreate", '#page-preferences', function( event ) {
});
$('#b_update').on("click", function (){
if(confirm(BotMessages.UpdateSystem)){
- $('#popup-update-system').popup('open');
+ $('#popup-update-system').popup('open');
$.get(url='/update', success=function (data) {
$('#i_update_system_log').text(data);
$('#b_update_system_close').removeClass('ui-disabled');
@@ -191,7 +191,7 @@ $('li.ui-li-has-thumb').hover( function( event ) {
$('video').on('loadeddata', function( event, ui ) {
$( '#popup-video' ).popup( 'reposition', 'positionTo: window' );
});
- }, dataType="json");
+ }, dataType="json");
});
$(document).on( "click", 'a[data-rel="popup"]', function( event ) {
@@ -223,7 +223,7 @@ Mousetrap.bind(['command+alt+h', 'ctrl+alt+h'], function(e) {
bot.halt();
}
});
-
+
botStatus();
function botStatus() {
diff --git a/static/js/program.js b/static/js/program.js
index e4621188..e1134aa1 100644
--- a/static/js/program.js
+++ b/static/js/program.js
@@ -47,7 +47,7 @@ $(document).on( "pagecreate", '#page-program', function( event ) {
}});
} catch (e) {
alert(e);
- }
+ }
}
function newProg() {
@@ -73,7 +73,7 @@ $(document).on( "pagecreate", '#page-program', function( event ) {
var name = progList[i];
$('#i_prog_list').append('
'+name+'
Delete program');
}
- $('#i_prog_list').listview('refresh');
+ $('#i_prog_list').listview('refresh');
$('.c_load_prog').on('click', loadProgPost);
$('.c_delete_prog').on('click', deleteProg);
$("#dialogLoadProg").popup("open", {transition: "pop"});
@@ -132,7 +132,7 @@ $(document).on( "pagecreate", '#page-program', function( event ) {
}
function deleteProg() {
- var prog_element = $(this).parent('li');
+ var prog_element = $(this).parent('li');
var name=prog_element.attr('data-prog-name');
if(confirm("Delete program " + name + "?")) {
var data = {'name': name};
@@ -155,7 +155,7 @@ $(document).on( "pagecreate", '#page-program', function( event ) {
var bot = new CoderBot();
// Generate Python code and run it.
- window.LoopTrap = 1000;
+ window.LoopTrap = 1000;
Blockly.Python.INFINITE_LOOP_TRAP = ' get_prog_eng().check_end()\n';
var code = Blockly.Python.workspaceToCode();
@@ -193,11 +193,11 @@ $(document).on( "pagecreate", '#page-program', function( event ) {
console.log(data.running);
if(!data.running) {
$('#b_end_prog_d').text(BotMessages.ProgramDialogClose);
- $('#i_dialog_running_title').text('CoderBot ' + BotMessages.ProgramStatusStop);
+ $('#i_dialog_running_title').text('RoverBot ' + BotMessages.ProgramStatusStop);
} else {
$('#b_end_prog_d').text(BotMessages.ProgramDialogStop);
- $('#i_dialog_running_title').text('CoderBot ' + BotMessages.ProgramStatusRunning);
+ $('#i_dialog_running_title').text('RoverBot ' + BotMessages.ProgramStatusRunning);
setTimeout(statusProg, 1000);
- }
+ }
}});
}
diff --git a/templates/blocks_adv.xml b/templates/blocks_adv.xml
index 1cd7b61b..455dce76 100644
--- a/templates/blocks_adv.xml
+++ b/templates/blocks_adv.xml
@@ -34,7 +34,6 @@
-
@@ -82,112 +81,13 @@
-
-
-
-
-
-
-
-
-
-
-
-
- {% trans %}text{% endtrans %}
-
-
-
-
-
-
- {% trans %}text{% endtrans %}
-
-
-
-
-
-
- {% trans %}text{% endtrans %}
-
-
-
-
-
-
-
-
-
-
-
-
-
- 5
-
-
-
-
-
-
-
-
- {% trans %}list{% endtrans %}
-
-
-
-
-
-
- {% trans %}list{% endtrans %}
-
-
-
-
-
-
- {% trans %}list{% endtrans %}
-
-
-
-
-
-
- {% trans %}list{% endtrans %}
-
-
-
-
-
-
-
-
-
-
-
-
-
- 10
-
-
-
-
-
-
- 90
-
-
-
@@ -225,49 +125,27 @@
- {%if cam%}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ 1.0
-
+
+
- {%endif%}
-
-
-
-
-
-
-
- 100
-
-
+
+
+
1.0
-
-
+
diff --git a/templates/config.html b/templates/config.html
index 7545f00c..8b96751e 100644
--- a/templates/config.html
+++ b/templates/config.html
@@ -1,7 +1,7 @@
-
+
+
-
diff --git a/templates/control.html b/templates/control.html
index 06862131..79b130e7 100644
--- a/templates/control.html
+++ b/templates/control.html
@@ -2,7 +2,6 @@
-
- {%if config.ctrl_counter%}
-
-
{%endif%}
-
+
+
- {% if config.show_control_move_commands%}
-
-
- {% endif %}
+
-
+
+
+
+
-
-
-
{%if stream_port%}
- {%endif%}
-
-
-
-
{%if stream_port%}
-
- {%endif%}
-
-
{%if stream_port%}
- {%endif%}
-
-
+
-
diff --git a/templates/index.html b/templates/index.html
index 993c37f8..8ff1967e 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -3,7 +3,7 @@
-
CoderBot
+
RoverBot