Tournament
Pilota
Buonasera a tutti.
Si anche io. Sto provando a fare un UFC per il mio amato A-10C.
Stuzzicato dal progetto di Tellurico prima, Harley e Thunder poi, ho già provveduto a comprare la prima attrezzatura e il materiale per imbattermi in questo progetto.
Ho scelto di utilizzare, come ha fatto Harley, arduino micro.
Nel video tutorial che anche lui ha seguito, vengono fornite già molte informazioni sul progetto, MA, io vorrei personalizzarmelo. Come? Innanzitutto dargli una forma un pò più realistica, come il progetto di tellu, ma con l'agiunta dei rotativi per regolare il volume delle tre radio di simple radio, dove nei momenti più concitati sarebbe molto utile gestire i vari volumi da manopole fisiche anchè cercare il comando con il mouse.
I materiali:
Software Arduino
Arduino micro
Potenziometri
Basetta millefori
Fili elettrici colorati
Pulsanti led arancio
Pulsanti led verde
Resistenze da 680 Ohm per i led dei pulsanti.
Per il box che dovrà contenere il tutto ci sto lavorando.
Per il pannello frontale, ho deciso che non lo farò con i pulsanti sporgenti, dove verrebbe fuori il problema come scrivere le funzioni frontalmente e retro illuminarli contemporaneamente, ma coprirò il tutto con un foglio in PVC stampato.
Capisco che cosi non è chiaro ma cercherò di spiegare meglio più avanti.
In allegato trovate:
un file word dove ho ripreso (come il buon Harley) gli schemi mostrati sul video. Ho fatto gli screen e li ho impaginati in modo di non dover fare avanti e indietro con il video.
Lo sketch da inserire sull'arduino micro.
Le librerie utilizzate.
Attenzione, manca la libreria "keypad", io ci ho perso mezz'ora per capire. Con l'aiuto di harley sono riuscito a scaricarla direttamente dal software di arduino.
Essendo la prima volta che faccio un lavoro del genere, ho dovuto acquistare anche dell'attrezzatura:
Calibro digitale
Supporto per saldature
Saldatore stagno
Si anche io. Sto provando a fare un UFC per il mio amato A-10C.
Stuzzicato dal progetto di Tellurico prima, Harley e Thunder poi, ho già provveduto a comprare la prima attrezzatura e il materiale per imbattermi in questo progetto.
Ho scelto di utilizzare, come ha fatto Harley, arduino micro.
Nel video tutorial che anche lui ha seguito, vengono fornite già molte informazioni sul progetto, MA, io vorrei personalizzarmelo. Come? Innanzitutto dargli una forma un pò più realistica, come il progetto di tellu, ma con l'agiunta dei rotativi per regolare il volume delle tre radio di simple radio, dove nei momenti più concitati sarebbe molto utile gestire i vari volumi da manopole fisiche anchè cercare il comando con il mouse.
I materiali:
Software Arduino
Arduino micro
Potenziometri
Basetta millefori
Fili elettrici colorati
Pulsanti led arancio
Pulsanti led verde
Resistenze da 680 Ohm per i led dei pulsanti.
Per il box che dovrà contenere il tutto ci sto lavorando.
Per il pannello frontale, ho deciso che non lo farò con i pulsanti sporgenti, dove verrebbe fuori il problema come scrivere le funzioni frontalmente e retro illuminarli contemporaneamente, ma coprirò il tutto con un foglio in PVC stampato.
Capisco che cosi non è chiaro ma cercherò di spiegare meglio più avanti.
In allegato trovate:
un file word dove ho ripreso (come il buon Harley) gli schemi mostrati sul video. Ho fatto gli screen e li ho impaginati in modo di non dover fare avanti e indietro con il video.
Lo sketch da inserire sull'arduino micro.
Codice:
//BUTTON BOX
//USE w ProMicro
//Tested in WIN10 + Assetto Corsa
//AMSTUDIO
//20.8.17
#include <Keypad.h>
#include <Joystick.h>
#define ENABLE_PULLUPS
#define NUMROTARIES 4
#define NUMBUTTONS 24
#define NUMROWS 5
#define NUMCOLS 5
byte buttons[NUMROWS][NUMCOLS] = {
{0,1,2,3,4},
{5,6,7,8,9},
{10,11,12,13,14},
{15,16,17,18,19},
{20,21,22,23},
};
struct rotariesdef {
byte pin1;
byte pin2;
int ccwchar;
int cwchar;
volatile unsigned char state;
};
rotariesdef rotaries[NUMROTARIES] {
{0,1,24,25,0},
{2,3,26,27,0},
{4,5,28,29,0},
{6,7,30,31,0},
};
#define DIR_CCW 0x10
#define DIR_CW 0x20
#define R_START 0x0
#ifdef HALF_STEP
#define R_CCW_BEGIN 0x1
#define R_CW_BEGIN 0x2
#define R_START_M 0x3
#define R_CW_BEGIN_M 0x4
#define R_CCW_BEGIN_M 0x5
const unsigned char ttable[6][4] = {
// R_START (00)
{R_START_M, R_CW_BEGIN, R_CCW_BEGIN, R_START},
// R_CCW_BEGIN
{R_START_M | DIR_CCW, R_START, R_CCW_BEGIN, R_START},
// R_CW_BEGIN
{R_START_M | DIR_CW, R_CW_BEGIN, R_START, R_START},
// R_START_M (11)
{R_START_M, R_CCW_BEGIN_M, R_CW_BEGIN_M, R_START},
// R_CW_BEGIN_M
{R_START_M, R_START_M, R_CW_BEGIN_M, R_START | DIR_CW},
// R_CCW_BEGIN_M
{R_START_M, R_CCW_BEGIN_M, R_START_M, R_START | DIR_CCW},
};
#else
#define R_CW_FINAL 0x1
#define R_CW_BEGIN 0x2
#define R_CW_NEXT 0x3
#define R_CCW_BEGIN 0x4
#define R_CCW_FINAL 0x5
#define R_CCW_NEXT 0x6
const unsigned char ttable[7][4] = {
// R_START
{R_START, R_CW_BEGIN, R_CCW_BEGIN, R_START},
// R_CW_FINAL
{R_CW_NEXT, R_START, R_CW_FINAL, R_START | DIR_CW},
// R_CW_BEGIN
{R_CW_NEXT, R_CW_BEGIN, R_START, R_START},
// R_CW_NEXT
{R_CW_NEXT, R_CW_BEGIN, R_CW_FINAL, R_START},
// R_CCW_BEGIN
{R_CCW_NEXT, R_START, R_CCW_BEGIN, R_START},
// R_CCW_FINAL
{R_CCW_NEXT, R_CCW_FINAL, R_START, R_START | DIR_CCW},
// R_CCW_NEXT
{R_CCW_NEXT, R_CCW_FINAL, R_CCW_BEGIN, R_START},
};
#endif
byte rowPins[NUMROWS] = {21,20,19,18,15};
byte colPins[NUMCOLS] = {14,16,10,9,8};
Keypad buttbx = Keypad( makeKeymap(buttons), rowPins, colPins, NUMROWS, NUMCOLS);
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,
JOYSTICK_TYPE_JOYSTICK, 32, 0,
false, false, false, false, false, false,
false, false, false, false, false);
void setup() {
Joystick.begin();
rotary_init();}
void loop() {
CheckAllEncoders();
CheckAllButtons();
}
void CheckAllButtons(void) {
if (buttbx.getKeys())
{
for (int i=0; i<LIST_MAX; i++)
{
if ( buttbx.key[i].stateChanged )
{
switch (buttbx.key[i].kstate) {
case PRESSED:
case HOLD:
Joystick.setButton(buttbx.key[i].kchar, 1);
break;
case RELEASED:
case IDLE:
Joystick.setButton(buttbx.key[i].kchar, 0);
break;
}
}
}
}
}
void rotary_init() {
for (int i=0;i<NUMROTARIES;i++) {
pinMode(rotaries[i].pin1, INPUT);
pinMode(rotaries[i].pin2, INPUT);
#ifdef ENABLE_PULLUPS
digitalWrite(rotaries[i].pin1, HIGH);
digitalWrite(rotaries[i].pin2, HIGH);
#endif
}
}
unsigned char rotary_process(int _i) {
unsigned char pinstate = (digitalRead(rotaries[_i].pin2) << 1) | digitalRead(rotaries[_i].pin1);
rotaries[_i].state = ttable[rotaries[_i].state & 0xf][pinstate];
return (rotaries[_i].state & 0x30);
}
void CheckAllEncoders(void) {
for (int i=0;i<NUMROTARIES;i++) {
unsigned char result = rotary_process(i);
if (result == DIR_CCW) {
Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);
};
if (result == DIR_CW) {
Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);
};
}
}
Le librerie utilizzate.
Attenzione, manca la libreria "keypad", io ci ho perso mezz'ora per capire. Con l'aiuto di harley sono riuscito a scaricarla direttamente dal software di arduino.
Essendo la prima volta che faccio un lavoro del genere, ho dovuto acquistare anche dell'attrezzatura:
Calibro digitale
Supporto per saldature
Saldatore stagno