Add ESP32 Serial support to SwiftyCar
This commit is contained in:
@@ -8,16 +8,31 @@
|
||||
import Foundation
|
||||
import SwiftyGPIO
|
||||
import Swift2dCar
|
||||
import SwiftSerial
|
||||
|
||||
func getVehicle2D() throws -> Vehicle2D {
|
||||
func getVehicle2D() throws -> Vehicle2D? {
|
||||
// TODO: Clean up this factory, or see if we can get dependency injection working.
|
||||
if let value = ProcessInfo.processInfo.environment["CAR_VEHICLE"] {
|
||||
switch value{
|
||||
case "CAR_2D":
|
||||
case "VEHICLE_2D":
|
||||
// Get car for rpi.
|
||||
let pwms = SwiftyGPIO.hardwarePWMs(for:.RaspberryPi3)!
|
||||
|
||||
// Read the feature database.
|
||||
return try RPiVehicle2D(withThrottlePin: PWMHardwareServo(forPin: (pwms[0]?[.P18])!)!, withSteeringPin:PWMHardwareServo(forPin: (pwms[1]?[.P19])!)!)
|
||||
case "VEHICLE_SERIAL":
|
||||
// TODO: Get from environment variable. tty won't work in macos anyway.
|
||||
// We share the serialport object, as cu will block on macOS (required by SwiftSerial), so can't open 2 of the same port.
|
||||
let serialPort = SerialPort(path: "/dev/ttyUSB0")
|
||||
guard let throttlePin = Esp32ServoOutput(forChannel: 1, forPin: 14, onPort: serialPort) else {
|
||||
print("Failed to create throttle pin.")
|
||||
return nil
|
||||
}
|
||||
|
||||
guard let steeringPin = Esp32ServoOutput(forChannel: 2, forPin: 12, onPort: serialPort) else {
|
||||
print("Failed to create steering pin.")
|
||||
return nil
|
||||
}
|
||||
|
||||
return try RPiVehicle2D(withThrottlePin: PWMHardwareServo(forPin: throttlePin)!, withSteeringPin: PWMHardwareServo(forPin: steeringPin)!)
|
||||
default:
|
||||
return MockVehicle()
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ func doServer() throws {
|
||||
return false
|
||||
}
|
||||
// Create a provider using the features we read.
|
||||
let provider = try MotorProvider(vehicle: getVehicle2D())
|
||||
let provider = try MotorProvider(vehicle: getVehicle2D()!)
|
||||
let trackingProvider = LidarProvider(lidar: lidar)
|
||||
|
||||
// Start the server and print its address once it has started.
|
||||
|
||||
Reference in New Issue
Block a user