/
main.swift
111 lines (86 loc) · 2.8 KB
/
main.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//
// main.swift
// BuddyBot
//
// Created by Jon Hoffman on 5/7/16.
//
#if arch(arm) && os(Linux)
import Glibc
#else
import Darwin
#endif
print("Starting BuddyBot")
enum BuddyState {
case STOPPED
case FORWARD
case REVERSE
case TURNINGLEFT
case TURNINGRIGHT
}
func setLeds(state: BuddyState, buddy: BuddyBot) {
switch state {
case .STOPPED:
buddy.setStopLeds()
case .FORWARD:
buddy.setForwardLeds()
case .REVERSE:
buddy.setReverseLeds()
case .TURNINGLEFT:
buddy.setLeftLeds()
case .TURNINGRIGHT:
buddy.setRightLeds()
}
}
private let RANGECHECK = 18.0
var buttonPressed = false
var buddyState = BuddyState.STOPPED
if let buddy = BuddyBot() {
buddy.initBuddy()
while (true) {
setLeds(buddyState, buddy: buddy)
while !buttonPressed {
buttonPressed = buddy.checkStartButtonPressed()
}
var buttonStillPressed = true
var running = true
while(running) {
let leftRangeToCheck = (buddyState == .TURNINGLEFT) ? RANGECHECK * 1.7 : RANGECHECK
let rightRangeToCheck = (buddyState == .TURNINGRIGHT) ? RANGECHECK * 1.7 : RANGECHECK
if buddy.checkLeftRangeFinder(leftRangeToCheck) || buddy.checkRightRangeFinder(rightRangeToCheck) || buddy.checkLeftIRSensor() || buddy.checkRightIRSensor() {
let rightRange = buddy.getRightRange()
let leftRange = buddy.getLeftRange()
if (leftRange < rightRange || buddy.checkLeftIRSensor()) && buddyState != .TURNINGLEFT {
buddy.turnRight()
buddyState = .TURNINGRIGHT
} else if (leftRange > rightRange || buddy.checkRightIRSensor()) && buddyState != .TURNINGRIGHT {
buddy.turnLeft()
buddyState = .TURNINGLEFT
} else if leftRange == rightRange {
buddy.turnRight()
buddyState = .TURNINGRIGHT
}
} else if buddyState != .FORWARD {
buddy.goForward()
buddyState = .FORWARD
}
setLeds(buddyState, buddy: buddy)
if buddyState == .FORWARD {
usleep(25000)
} else {
usleep(50000)
}
if (!buddy.checkStartButtonPressed()) {
buttonStillPressed = false
} else if !buttonStillPressed {
running = false
}
if buddy.checkTiltSensor() {
running = false
}
}
buddy.stopBuddy()
while(buddy.checkStartButtonPressed()) {}
}
} else {
print("could not start BuddyBot")
}