总结
搭建这个装置需要一定的编程经验。我会公开我的代码,但实际上它不太可能在其他设备上完美运行,因为它需要根据所使用的齿轮数量和电位计类型进行校准。
编程过程中,我使用了 Pro Trinket 5V 开发板。
我的代码会将齿轮1至6转换为二进制数,并将键盘上的1至3号按键对应的二进制数输出到控制台。
如果你使用的不是6速变速箱,而是其他型号的变速箱,那么代码需要进行一些修改。如果你不知道如何操作,可以在评论区提问,我会尽快回复你的。
以下是我在其上运行的代码:
(此处应补充标签符号)包含 "ProTrinketKeyboard.h" 文件
void setup() {
pinMode(A2, INPUT);
pinMode(A4, INPUT);
TrinketKeyboard.begin();
』
整型变量 T1 的值为 640。
整数 T2 = 480;
整数 T3 = 300;
整数型变量 `track`;
整数变量 updown,用于记录用户对当前页面的操作
变速箱挡位;
精度值设为50;
整数 down 的值为 350;
整数 up 的值为 650;
整数 updownR;
整数型变量 `trackR`;
void loop() {
获取阅读记录;
获取跟踪信息;
执行 getUpDown() 方法;
获取装备;
翻转垃圾桶;
』
void getReading(){
updownR = 模拟读取(A4);
跟踪值 = 模拟读取(A2)的值;
』
void getTrack(){
若(跟踪半径小于等于T1+精度且大于等于T1-精度):
音轨=1;
否则,如果跟踪半径小于T2+精度且大于T2-精度的话:
音轨=2;
否则,如果跟踪半径小于T3+精度且大于T3 - 精度的话:
音轨=3;
否则:
轨道编号 = 0;
』
』
void getUpDown() {
若(上行
上下移动距离 = 1;
否则,如果上行和下行波动幅度均在下行价位±精度范围之内(即 updownR <= down + accuracy 且 updownR >= down - accuracy),则执行以下操作:
上下浮动幅度=2;
否则:
上下移动距离 = 0;
』
』
void getGear(){
若(track == 1 且 updown == 1):
齿轮=1;
否则,如果音轨编号为1,且播放方向为向上(updown=2)的话:
齿轮比=2;
否则,如果音轨编号为2,且播放方向为向上(即播放顺序为从左到右),则执行以下代码:
齿轮比=3;
否则,如果音轨编号为2,且播放方向为向上或向下(即按下或松开播放按钮),则执行以下代码:
齿轮比=4;
否则,如果音轨编号为3,且播放方向为向上(即播放顺序为从左到右),则执行以下代码:
齿轮比=5;
否则,如果音轨编号为3,且上下移动键的状态为2的话:
齿轮比=6;
否则:
齿轮:0;
』
』
//允许使用Trinket进行串行打印。定义1-3对应打印的内容(0表示不打印),4是延迟时间
提示:运行此代码后,您需要尽快打开一个写作程序进行操作。
void numprint(int p1034,int p2034,int p3034,int d034, int enter034){
if(p1034 != 0){
TrinketKeyboard.print(p1034);
TrinketKeyboard.pressKey(0, KEYCODE_ENTER);
TrinketKeyboard.pressKey(0,0);
』
若(p2034不等于0):
TrinketKeyboard.print(p2034);
TrinketKeyboard.pressKey(0, KEYCODE_ENTER);
TrinketKeyboard.pressKey(0,0);
』
若 p3034 不等于 0,则执行以下操作:
TrinketKeyboard.print(p3034);
TrinketKeyboard.pressKey(0, KEYCODE_ENTER);
TrinketKeyboard.pressKey(0,0);
』
for(int wait034=0; wait034<d034; wait034++){
TrinketKeyboard.poll();
延迟5秒;
』
for(int wait034=0; wait034<enter034; wait034++){
TrinketKeyboard.pressKey(0, KEYCODE_ENTER);
TrinketKeyboard.pressKey(0,0);
』
TrinketKeyboard.poll();
』
void TurnBin() {
若(gear == 0):
TrinketKeyboard.pressKey(0, 0);
』
if(gear == 1){
TrinketKeyboard.pressKey(0, KEYCODE_1);
』
if(gear == 2){
TrinketKeyboard.pressKey(0, 2);
』
若(gear == 3):
TrinketKeyboard.pressKey(0, KEYCODE_1, KEYCODE_2);
』
if(档位 == 4){
TrinketKeyboard.pressKey(0, 键码 3);
』
if(档位 == 5){
TrinketKeyboard.pressKey(0, KEYCODE_1, KEYCODE_3);
』
若(gear == 6):
TrinketKeyboard.pressKey(0, KEYCODE_2, KEYCODE_3);
』
』
モデルソース
