SHOW:
|
|
- or go back to the newest paste.
| 1 | # w/ help from #beagle on Freenode | |
| 2 | # and w/ help from Prabakar on his book "BeagleBone by Example." | |
| 3 | ||
| 4 | from flask import Flask, render_template | |
| 5 | import Adafruit_BBIO.GPIO as GPIO | |
| 6 | import Adafruit_BBIO.PWM as PWM | |
| 7 | import time | |
| 8 | from rangeI import Range | |
| 9 | import serial | |
| 10 | ||
| 11 | sonar = Range("/dev/ttyS2")
| |
| 12 | ||
| 13 | class Motor: | |
| 14 | def __init__(self, dir_pin, pwm_pin, pwm_freq): | |
| 15 | self.dir_pin = dir_pin | |
| 16 | self.pwm_pin = pwm_pin | |
| 17 | self.value = 0 | |
| 18 | ||
| 19 | PWM.start(pwm_pin, 0, pwm_freq) | |
| 20 | GPIO.setup(dir_pin, GPIO.OUT) | |
| 21 | ||
| 22 | def set(self, value): | |
| 23 | assert -100 <= value <= 100 | |
| 24 | if (value < 0) != (self.value < 0): | |
| 25 | ||
| 26 | # changing direction | |
| 27 | PWM.set_duty_cycle(self.pwm_pin, 0) | |
| 28 | GPIO.output(self.dir_pin, value < 0) | |
| 29 | ||
| 30 | PWM.set_duty_cycle(self.pwm_pin, abs(value)) | |
| 31 | self.value = value | |
| 32 | ||
| 33 | motor1 = Motor(dir_pin="P8_18", pwm_pin="P9_16", pwm_freq=2000) | |
| 34 | motor2 = Motor(dir_pin="P8_16", pwm_pin="P9_14", pwm_freq=2000) | |
| 35 | motor3 = Motor(dir_pin="P8_14", pwm_pin="P8_13", pwm_freq=2000) | |
| 36 | motor4 = Motor(dir_pin="P8_26", pwm_pin="P8_19", pwm_freq=2000) | |
| 37 | ||
| 38 | app = Flask(__name__) | |
| 39 | @app.route("/")
| |
| 40 | # @app.route("/<state>")
| |
| 41 | @app.route("/<take>")
| |
| 42 | ||
| 43 | def Distance(take=None): | |
| 44 | ||
| 45 | distance = sonar.measure() | |
| 46 | print("distance =", distance, "inch")
| |
| 47 | time.sleep(2) | |
| 48 | ||
| 49 | if take == distance >= 8: | |
| 50 | motor1.set(0) | |
| 51 | motor2.set(0) | |
| 52 | motor3.set(0) | |
| 53 | motor4.set(0) | |
| 54 | print("Stopping Motors!")
| |
| 55 | time.sleep(0.2) | |
| 56 | ||
| 57 | template_data = {
| |
| 58 | "title" : take, | |
| 59 | } | |
| 60 | return render_template("Boot.html", **template_data)
| |
| 61 | ||
| 62 | @app.route("/<state>")
| |
| 63 | ||
| 64 | def updates(state=None): | |
| 65 | ||
| 66 | if state == "F": | |
| 67 | motor1.set(100) | |
| 68 | motor2.set(100) | |
| 69 | motor3.set(100) | |
| 70 | motor4.set(100) | |
| 71 | time.sleep(0.2) | |
| 72 | ||
| 73 | if state == "L": | |
| 74 | motor1.set(15) | |
| 75 | motor2.set(85) | |
| 76 | motor3.set(15) | |
| 77 | motor4.set(85) | |
| 78 | time.sleep(0.2) | |
| 79 | ||
| 80 | if state == "R": | |
| 81 | motor1.set(85) | |
| 82 | motor2.set(15) | |
| 83 | motor3.set(85) | |
| 84 | motor4.set(15) | |
| 85 | time.sleep(0.2) | |
| 86 | ||
| 87 | if state == "S": | |
| 88 | motor1.set(0) | |
| 89 | motor2.set(0) | |
| 90 | motor3.set(0) | |
| 91 | motor4.set(0) | |
| 92 | time.sleep(0.2) | |
| 93 | ||
| 94 | if state == "REV": | |
| 95 | motor1.set(-75) | |
| 96 | motor2.set(-75) | |
| 97 | motor3.set(-75) | |
| 98 | motor4.set(-75) | |
| 99 | time.sleep(0.2) | |
| 100 | ||
| 101 | if state == "REV_L": | |
| 102 | motor1.set(-75) | |
| 103 | motor2.set(-25) | |
| 104 | motor3.set(-75) | |
| 105 | motor4.set(-25) | |
| 106 | time.sleep(0.2) | |
| 107 | ||
| 108 | if state == "REV_R": | |
| 109 | motor1.set(-25) | |
| 110 | motor2.set(-75) | |
| 111 | motor3.set(-25) | |
| 112 | motor4.set(-75) | |
| 113 | time.sleep(0.2) | |
| 114 | ||
| 115 | if state == "SPIN_LEFT": | |
| 116 | motor1.set(100) | |
| 117 | motor2.set(-100) | |
| 118 | motor3.set(100) | |
| 119 | motor4.set(-100) | |
| 120 | time.sleep(0.2) | |
| 121 | ||
| 122 | if state == "SPIN_RIGHT": | |
| 123 | motor1.set(-100) | |
| 124 | motor2.set(100) | |
| 125 | motor3.set(-100) | |
| 126 | motor4.set(100) | |
| 127 | time.sleep(0.2) | |
| 128 | ||
| 129 | template_data = {
| |
| 130 | "title" : state, | |
| 131 | } | |
| 132 | return render_template("Boot.html", **template_data)
| |
| 133 | ||
| 134 | if __name__ == "__main__": | |
| 135 | app.run(host="0.0.0.0", port=5000, debug=False) |