技术名称 | Beduino |
中文名称 | |
作者 | joe7575 (Joachim Stolberg) · GitHub |
语言 | 英语 |
版本 | 5.5.0或更高版本 |
依赖Mode或插件 | Vm16 是一个 16 位虚拟机,用于在 开源世界 中实现真正的工作计算机 |
Mode类型 | |
开源协议 | AGPL-3.0 许可证 |
视频 | |
百科 | Home · joe7575/beduino Wiki · GitHub |
Wiki | Home · joe7575/beduino Wiki · GitHub |
代码仓库 | GitHub - joe7575/beduino: A microcontroller for Minetest, based on the mod vm16 |
下载地址 | GitHub - joe7575/beduino: A microcontroller for Minetest, based on the mod 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