Add ESP32 Serial support to SwiftyCar

This commit is contained in:
Piv
2020-09-12 22:08:03 +09:30
parent cbe2a48f0c
commit 3894e04876
4 changed files with 38 additions and 9 deletions

View File

@@ -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()
}

View File

@@ -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.