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 {
|
object Control {
|
||||||
val BLINK_DURATION = 1000
|
val BLINK_DURATION = 1000
|
||||||
|
|
||||||
@@ -51,15 +44,10 @@ object Control {
|
|||||||
val time = times[i]
|
val time = times[i]
|
||||||
val direction = directions[i]
|
val direction = directions[i]
|
||||||
|
|
||||||
when (direction) {
|
Engine.drive(direction)
|
||||||
RouteType.FORWARD.id -> Engine.forward()
|
|
||||||
RouteType.BACKWARD.id -> Engine.backward()
|
|
||||||
RouteType.LEFT.id -> Engine.left()
|
|
||||||
RouteType.RIGHT.id -> Engine.right()
|
|
||||||
}
|
|
||||||
|
|
||||||
Time.wait(time)
|
Time.wait(time)
|
||||||
Engine.stop()
|
Engine.stop()
|
||||||
|
|
||||||
i++
|
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_left()
|
||||||
external fun car_engine_turn_right()
|
external fun car_engine_turn_right()
|
||||||
|
|
||||||
|
enum class RouteType(val id: Int) {
|
||||||
|
FORWARD(0),
|
||||||
|
BACKWARD(1),
|
||||||
|
LEFT(2),
|
||||||
|
RIGHT(3);
|
||||||
|
}
|
||||||
|
|
||||||
object Engine {
|
object Engine {
|
||||||
fun init() {
|
fun init() {
|
||||||
car_engine_init()
|
car_engine_init()
|
||||||
@@ -30,4 +37,13 @@ object Engine {
|
|||||||
fun right() {
|
fun right() {
|
||||||
car_engine_turn_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 */
|
/* car task */
|
||||||
Control.run()
|
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)
|
static uint8_t sonar_degree(uint8_t degree)
|
||||||
{
|
{
|
||||||
if (degree > MAX_DEGREE)
|
if (degree > MAX_DEGREE)
|
||||||
degree = MAX_DEGREE;
|
degree = MAX_DEGREE;
|
||||||
|
|
||||||
|
degree = MAX_DEGREE - degree;
|
||||||
|
|
||||||
float factor = 1.0 * (BACK_ANGLE - FRONT_ANGLE) / MAX_DEGREE;
|
float factor = 1.0 * (BACK_ANGLE - FRONT_ANGLE) / MAX_DEGREE;
|
||||||
return factor * degree + FRONT_ANGLE;
|
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