translator: Voyager firmware
This commit is contained in:
+2
-14
@@ -1,11 +1,4 @@
|
||||
|
||||
enum class RouteType(val id: Int) {
|
||||
FORWARD(0),
|
||||
BACKWARD(1),
|
||||
LEFT(2),
|
||||
RIGHT(3);
|
||||
}
|
||||
|
||||
object Control {
|
||||
val BLINK_DURATION = 1000
|
||||
|
||||
@@ -51,15 +44,10 @@ object Control {
|
||||
val time = times[i]
|
||||
val direction = directions[i]
|
||||
|
||||
when (direction) {
|
||||
RouteType.FORWARD.id -> Engine.forward()
|
||||
RouteType.BACKWARD.id -> Engine.backward()
|
||||
RouteType.LEFT.id -> Engine.left()
|
||||
RouteType.RIGHT.id -> Engine.right()
|
||||
}
|
||||
|
||||
Engine.drive(direction)
|
||||
Time.wait(time)
|
||||
Engine.stop()
|
||||
|
||||
i++
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
|
||||
object Voyager {
|
||||
val VELOCITY_DRIVE: Double = 0.03 // centimeter in millisecond
|
||||
val VEL0CITY_ROUTATE: Double = 0.001 // degree in millisecond
|
||||
val SEGMENT_SIZE: Int = 30 // centimeter
|
||||
|
||||
fun run() {
|
||||
while (true) {
|
||||
var distance = Sonar.getDistance(0)
|
||||
while (distance == -1 || distance > SEGMENT_SIZE) {
|
||||
drive(RouteType.FORWARD, SEGMENT_SIZE)
|
||||
distance = Sonar.getDistance(0)
|
||||
}
|
||||
|
||||
rotate(Random.getInt())
|
||||
}
|
||||
}
|
||||
|
||||
private fun rotate(degree: Int) {
|
||||
val time = (degree / VELOCITY_DRIVE).toInt()
|
||||
Engine.left()
|
||||
Time.wait(time)
|
||||
}
|
||||
|
||||
private fun drive(direction: RouteType, distance: Int) {
|
||||
val time = (distance / VELOCITY_DRIVE).toInt()
|
||||
Engine.drive(direction.id)
|
||||
Time.wait(time)
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,13 @@ external fun car_engine_backward()
|
||||
external fun car_engine_turn_left()
|
||||
external fun car_engine_turn_right()
|
||||
|
||||
enum class RouteType(val id: Int) {
|
||||
FORWARD(0),
|
||||
BACKWARD(1),
|
||||
LEFT(2),
|
||||
RIGHT(3);
|
||||
}
|
||||
|
||||
object Engine {
|
||||
fun init() {
|
||||
car_engine_init()
|
||||
@@ -30,4 +37,13 @@ object Engine {
|
||||
fun right() {
|
||||
car_engine_turn_right()
|
||||
}
|
||||
|
||||
fun drive(direction: Int) {
|
||||
when (direction) {
|
||||
RouteType.FORWARD.id -> forward()
|
||||
RouteType.BACKWARD.id -> backward()
|
||||
RouteType.LEFT.id -> left()
|
||||
RouteType.RIGHT.id -> right()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
external fun car_random_int(): Int
|
||||
|
||||
object Random {
|
||||
fun getInt(): Int = car_random_int()
|
||||
}
|
||||
@@ -11,4 +11,7 @@ fun main() {
|
||||
|
||||
/* car task */
|
||||
Control.run()
|
||||
|
||||
/* Voyager */
|
||||
Voyager.run()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
uint32_t prev_number = 0;
|
||||
|
||||
#define MULTIPLIER 1664525
|
||||
#define INCREMENT 1013904223
|
||||
#define MODULE UINT32_MAX
|
||||
|
||||
uint32_t car_random_get_int(void)
|
||||
{
|
||||
prev_number = (prev_number * MULTIPLIER + INCREMENT) % MODULE;
|
||||
return prev_number;
|
||||
}
|
||||
@@ -13,9 +13,11 @@
|
||||
|
||||
static uint8_t sonar_degree(uint8_t degree)
|
||||
{
|
||||
if (degree > MAX_DEGREE)
|
||||
if (degree > MAX_DEGREE)
|
||||
degree = MAX_DEGREE;
|
||||
|
||||
degree = MAX_DEGREE - degree;
|
||||
|
||||
float factor = 1.0 * (BACK_ANGLE - FRONT_ANGLE) / MAX_DEGREE;
|
||||
return factor * degree + FRONT_ANGLE;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
uint32_t car_random_get_int(void);
|
||||
Reference in New Issue
Block a user