Резюме.
Для его создания потребуется немного опыта в программировании. Я выпущу свой код, но практически невозможно, чтобы он идеально работал на других устройствах, так как ему необходима калибровка в зависимости от того, сколько у него передач и какие потенциометры он использует.
Вот потенциометры, которые я использовал: Невероятно длинная ссылка:
https://www.ebay.com/itm/224194967103?hash=item34330fb63f:g:JosAAOSwumNfh-6a&amdata=enc%3AAQAHAAAA4BnBp3BUqOSDtgO%2BOkIjRKj0v9FFKMXXQ9uqokanQnO7wLzAVmPI4UIP5jxfqxlrH6xW4AZqCVRTBvgK8pOYLXPH1yx
Я использовал Pro Trinket 5V для кодирования.
Мой код превратит передаточное число 1-6 в двоичное и нажмёт на клавиши 1-3 на вашей клавиатуре в виде двоичных чисел.
Если вы используете другую панель, отличную от 6-ступенчатой, код потребует некоторых изменений. Просто спросите в комментариях, если вы не знаете, как это сделать, и я постараюсь ответить вам как можно быстрее.
Вот код, который я запускаю на нём:
(символ хэштега здесь) Включите "ProTrinketKeyboard.h"
void setup() {
pinMode(A2, INPUT);
pinMode(A4, INPUT);
TrinketKeyboard.begin();
)
Интегральное число T1 равно 640.
Инт T2=480;
int T3=300;
Интегральный трек;
int updown;
Передаточное число;
Точность интервала = 50;
int down=350;
Интенсивность = 650;
Интегральная переменная updownR;
Интервал между треками R;
void loop() {
getReading();
getTrack();
getUpDown();
getGear();
TurnBin();
)
void getReading(){
updownR=analogRead(A4);
trackR=analogRead(A2);
)
void getTrack(){
Если (трекR меньше или равен T1+точность и трекR больше или равен T1-точность), то
track=1;
}иначе, если расстояние до цели составляет от T2 + точность до T2 - точность, то выполняем следующие действия:
трек=2;
}иначе, если расстояние до цели составляет от T3+точность до T3–точность, то выполняем следующие действия:
трек=3;
}иначе{
track=0;
)
)
void getUpDown(){
если(updownR <= up+accuracy и updownR >= up-accuracy){
Вверх-вниз=1;
}иначе, если updownR меньше или равен down+accuracy и больше или равен down-accuracy, тогда
Вверх-вниз=2;
}иначе{
Вверх-вниз=0;
)
)
void getGear(){
Если (трек равен 1 и вверх-вниз равен 1):
gear=1;
}иначе, если трек равен 1, а значение updown равно 2, то:
шестерня=2;
}иначе, если трек равен 2, а значение updown равно 1, то:
шестерня=3;
}иначе, если трек равен 2, а значение updown равно 2, тогда:
шестерня=4;
}иначе, если трек равен 3, а значение updown равно 1, то:
шестерня=5;
}либо если (трек == 3 и updown == 2) {
шестерня=6;
}иначе{
gear=0;
)
)
//Позволяет выполнять серийную печать с помощью устройства Trinket. Определения 1-3 определяют то, что будет напечатано (0 означает, что ничего не будет напечатано), 4 - задержка в миллисекундах*5, а 5 - интервал между каждой печатью.
//Вы должны быстро открыть программу для написания после запуска этого.
void numprint(int p1034,int p2034,int p3034,int d034, int enter034){
Если (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);
)
для (int wait034=0; wait034<d034; wait034++){
TrinketKeyboard.poll();
Задержка (5);
)
для(int wait034=0; wait034<enter034; wait034++){
TrinketKeyboard.pressKey(0, KEYCODE_ENTER);
TrinketKeyboard.pressKey(0,0);
)
TrinketKeyboard.poll();
)
void TurnBin(){
Если (геар == 0):
TrinketKeyboard.pressKey(0, 0);
)
Если (геар == 1):
TrinketKeyboard.pressKey(0, KEYCODE_1);
)
Если (передача == 2):
TrinketKeyboard.pressKey(0, KEYCODE_2);
)
Если (скорость передачи равна 3):
TrinketKeyboard.pressKey(0, KEYCODE_1,KEYCODE_2);
)
Если (скорость передачи равна 4):
TrinketKeyboard.pressKey(0, KEYCODE_3);
)
Если (скорость передачи равна 5):
TrinketKeyboard.pressKey(0, KEYCODE_1,KEYCODE_3);
)
Если (скорость передачи равна 6):
TrinketKeyboard.pressKey(0, KEYCODE_2,KEYCODE_3);
)
)
모델 소스
