Beduino vm16 微控制器

截屏

Beduino 是一个 16 位微控制器和开发环境,具有基于 mod vm16 的编辑器、文件系统、编译器、汇编器和调试器。控制器可以用类似 C 的语言进行编程。

除了 vm16,mod 没有依赖项。但是,它带有一个用于 techpack 和 techage 的 I/O 模块。

支持其他技术相关的游戏或模组是可能的。

开源世界:Bedouino 电梯

该视频展示了如何使用 Beduino 控制器作为 techage 的电梯/电梯控制器。

文件linit.c

// I/O ports
const LIFT   = 0;
const TOWER  = 1;
const DOORS  = 8;  // base address
const INPUT  = 24;

const NUM_FLOORS = 3;

var heights[] = {4, 5};

文件lift.c

import "ta_cmnd.c"
import "ta_iom.c"
import "stdlib.asm"
import "stdio.asm"
import "math.asm"
import "linit.c"

var route[] = {0,0,0};
var last_floor = 0;
var timeout = 0;
var NUM_FLOOR_CTLR = NUM_FLOORS * 2;

func init() {
  var i;
  var port;

  output(TOWER, IO_AMBER);
  // reset input latch
  input(INPUT);

  // close all doors
  for(i = 0; i < NUM_FLOOR_CTLR; i++) {
    port = DOORS + i;
    send_cmnd(port, 11, "\002");
  }

  // reset lift
  send_cmnd(LIFT, 19, "");
  sleep(30);
  output(TOWER, IO_GREEN);
}

func calc_height(dest_floor) {
  var i;
  var sum = 0;

  if(dest_floor > last_floor) {
    for(i = last_floor; i < dest_floor; i++) {
      sum = sum + heights[i];
    }
    return sum;
  } else {
    for(i = last_floor; i > dest_floor; i--) {
      sum = sum + heights[i - 1];
    }
    return -sum;
  }
}

func open_doors(floor) {
  var port;

  output(TOWER, IO_RED);
  port = DOORS + floor * 2;
  send_cmnd(port + 0, 11, "\001");
  send_cmnd(port + 1, 11, "\001");
  sleep(10);
  output(TOWER, IO_GREEN);
  last_floor = floor;
  timeout = 30;
}

func close_doors(floor) {
  var port;

  output(TOWER, IO_RED);
  port = DOORS + floor * 2;
  send_cmnd(port + 0, 11, "\002");
  send_cmnd(port + 1, 11, "\002");
  sleep(10);
  output(TOWER, IO_GREEN);
}

func move_lift(floor) {
  var h;

  output(TOWER, IO_RED);
  h = calc_height(floor);
  route[1] = h;
  send_cmnd(LIFT, 18, route);
  sleep(20 + abs(h));
  last_floor = floor;
  output(TOWER, IO_GREEN);
}

func loop() {
  var val;

  if(event()) {
    val = input(INPUT);
    if(val < 10) {
      if(val != last_floor) {
        move_lift(val);
      }
      open_doors(val);
    } else if(val < 20) {
      close_doors(last_floor);
      move_lift(val - 10);
      open_doors(val - 10);
    }
  }
  if(timeout > 0) {
    timeout--;
    if(timeout == 0) {
      close_doors(last_floor);
    }
  }
}

秒表示例

开源世界:Beduino 秒表、模组Techage_网络游戏热门视频?
显示最后 5 个结果和前 5 个结果的秒表示例。
https://forum.minetest.net/download/file.php?id=26154.png

1 个赞