translator: Voyager firmware

This commit is contained in:
e5l
2016-08-24 09:44:16 +03:00
parent e24419fb0f
commit c9a071f5ce
8 changed files with 80 additions and 15 deletions
+2 -14
View File
@@ -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++
}
+30
View File
@@ -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)
}
}
+16
View File
@@ -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()
}
}
}
+6
View File
@@ -0,0 +1,6 @@
external fun car_random_int(): Int
object Random {
fun getInt(): Int = car_random_int()
}
+3
View File
@@ -11,4 +11,7 @@ fun main() {
/* car task */
Control.run()
/* Voyager */
Voyager.run()
}
+15
View File
@@ -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;
}
+3 -1
View File
@@ -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;
}
+5
View File
@@ -0,0 +1,5 @@
#pragma once
#include <stdint.h>
uint32_t car_random_get_int(void);