Sida 2 av 2
Re: Mach 3 Tangentbordsemulator
Postat: 14 mars 2013, 12:03:13
av TobiasEinarsson
Två frågor:
Har du provat nedanstående för att skicka ALT+R?
Kod: Markera allt
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('r');
delay(100);
Keyboard.releaseAll();
Fungerade det?
EDIT: Ändrade i koden lite..
Re: Mach 3 Tangentbordsemulator
Postat: 14 mars 2013, 12:06:14
av H.O
Eftersom det fungerar med ett riktigt tangentbord men inte med din hårdvara och kod så är det såklart så att du gör nånting fel.
Utan att veta exakt hur KeyBoard.Write() fungerar (om det nu är den funktionen du använder) och exakt vad den faktisk skickar så är det svårt att säga VAD som är fel.
Som jag skrev innan, vid en första titt verkade KeyBoard.Press() ett bättre alternativ men det funkade tydligen inte heller....
Re: Mach 3 Tangentbordsemulator
Postat: 14 mars 2013, 12:12:10
av Castor
Om man kollar denna länk
http://arduino.cc/en/Reference/KeyboardModifiers som visats ovan så stämmer inte koderna och tangent släppt indikeras
inte av att bit 7 sätts
utan av en kod "keyboard.release.All". OBS också att man måste använda keyboard.begin innan keyboard.press
Edit: bit 7 skulle de va förstås
Re: Mach 3 Tangentbordsemulator
Postat: 14 mars 2013, 12:13:50
av hato
Tobias, visst jag har provat detta
H.O. Självklart så förstår jag att jag gör något fel, försöker ta reda på vad.
Blir nog till att börja mäta på USB-signalen, borde kunna se hur många tecken som sänds och med lite knåpande kanske också
dekoda signalen
Re: Mach 3 Tangentbordsemulator
Postat: 14 mars 2013, 12:21:44
av TobiasEinarsson
Du skulle kunna prova med ett kort delay efter att du kört Keyboard.press(KEY_LEFT_ALT); också.
Det kan ju hända att det mottagade systemet inte hinner uppfatta att ALT-tangenten är nedtryckt innan 'R' skickas annars.
Kan du inte visa din kod? Det blir lite enklare att hjälpa till då.
Re: Mach 3 Tangentbordsemulator
Postat: 14 mars 2013, 12:27:59
av sodjan
> OK,om jag förstått det hela rätt så scancode och ascii är helt skilda saker.
Ja.
> Fungerar ej, gör jag fel?
Ja, det verkar ju ganska sannolikt.
Det är inte helt säkert (även om det är sannolikt) att ett HID
interface i USB använder samma scan-codes som ett PS/2 interface.
> indikeras inte av att bit 8 sätts utan av en kod "keyboard.release.All".
Är det Keyboard.releaseAll() du menar !?
Men är det inte just det som Keyboard.releaseAll() gör ?
Jag kan inte se att det står något om vad den funktionen faktiskt gör...
Min *gissning* är att Keyboard.press() håller reda på vilka tangenter som
är "nertryckta" och sedan skickar Keyboard.releaseAll() en "release" scan-code
för varje nertryckt tangent.
> Blir nog till att börja mäta på USB-signalen,
Jag vet inte vad du menar med att "mäta", men en voltmeter lär
inte räcka och ett oscilloskop lär inte heller ge något vettigt.
Den här sidan har lite länkar till programvaru och hårdvaru-loggers:
http://www.lvr.com/development_tools.htm#analyzers
Re: Mach 3 Tangentbordsemulator
Postat: 14 mars 2013, 12:31:02
av hato
Hurra!!!!!
Så här skall det vara:
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('r');
delay(100);
Keyboard.releaseAll();
Felet var att jag hade skrivit:
Keyboard.press('
R')
Lurade mig på att det stod
Cycle Start <Alt-R>
på panelen i Mach 3.
Nu gäller det att få de två Joystickarna att fungera för X, Y, Z
Re: Mach 3 Tangentbordsemulator
Postat: 14 mars 2013, 12:47:02
av Castor
Det finns ett antal olika program som kollar vad som avkodats i PC:n o skickas vidare till applikationen, funkar åtminstone när man kollar vad som sänds från vanligt PC-bord. Har inte kollat om de funkar med USB-bord. Har tyvärr ingen länk tillgänglig men går att Googla förstås.
Re: Mach 3 Tangentbordsemulator
Postat: 14 mars 2013, 13:16:25
av TobiasEinarsson
hato skrev:Hurra!!!!!
Så här skall det vara:
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('r');
delay(100);
Keyboard.releaseAll();
Det var ju exakt så jag skrev...
Re: Mach 3 Tangentbordsemulator
Postat: 14 mars 2013, 13:26:50
av hato
Tobias, ibland är man för fokuserad på sina egna tankar så man läser inte vad det verkligen står.
tack alla för all hjälp. Kanske måste jag återkomma med Joystickproblemet.

Re: Mach 3 Tangentbordsemulator
Postat: 14 mars 2013, 18:21:06
av hato
Äntligen funkar allt
Så här ser programmet ut:
Kod: Markera allt
/* This software is used to control the frontpanel for MACH 3
using a Arduino Micro
Joystick 1: X++, X--, Y++, Y--
Joystick 2: Z++, Z--
Button Red: Stop
Button Yellow: Hold
Button Green: Start
Switch X-Y-Z, Jog X, Y Z. Only 2 swiches X and Z.Use software to make Y.
*/
#define SPACE 0x20
#define SETMPGX 0x31 //dummy walues for test
#define SETMPGY 0x32 //dummy walues for test
#define SETMPGZ 0x33 //dummy walues for test
#define X 0
#define Y 1
#define Z 2
// define input pins
const int IN_XPLUS = 2;
const int IN_XMINUS = 3;
const int IN_YPLUS = 0;
const int IN_YMINUS = 1;
const int IN_ZPLUS = 4;
const int IN_ZMINUS = 5;
const int START = 6;
const int HOLD = 7;
const int STOP = 8;
const int MPG_X = 9;
const int MPG_Z = 10;
const int LED = 13; // for test
int mpg;
int keyra = LOW;
int keyla = LOW;
int keyua = LOW;
int keyda = LOW;
int keypu = LOW;
int keypd = LOW;
void setup(){
pinMode(IN_XPLUS,INPUT_PULLUP);
pinMode(IN_XMINUS,INPUT_PULLUP);
pinMode(IN_YPLUS,INPUT_PULLUP);
pinMode(IN_YMINUS,INPUT_PULLUP);
pinMode(IN_ZPLUS,INPUT_PULLUP);
pinMode(IN_ZMINUS,INPUT_PULLUP);
pinMode(START,INPUT_PULLUP);
pinMode(HOLD,INPUT_PULLUP);
pinMode(STOP,INPUT_PULLUP);
pinMode(MPG_X,INPUT_PULLUP);
pinMode(MPG_Z,INPUT_PULLUP);
Keyboard.begin();
// delay(120000); // Wait for 2 minutes untill PC software started
if(digitalRead(MPG_X) == LOW){
Keyboard.write(SETMPGX);
mpg = X;
} else if (digitalRead(MPG_Z) == LOW){
Keyboard.write(SETMPGZ);
mpg = Z;
} else {
Keyboard.write(SETMPGY);
mpg = Y;
}
}
void loop(){
if(digitalRead(IN_XPLUS) == LOW && !keyra) {
Keyboard.press(KEY_RIGHT_ARROW);
keyra = HIGH;
delay(100);
} else if(keyra && digitalRead(IN_XPLUS)){
Keyboard.release(KEY_RIGHT_ARROW);
keyra = LOW;
}
if(digitalRead(IN_XMINUS) == LOW && !keyla) {
Keyboard.press(KEY_LEFT_ARROW);
keyla = HIGH;
delay(100);
}else if(keyla && digitalRead(IN_XMINUS)){
Keyboard.release(KEY_LEFT_ARROW);
keyla = LOW;
}
if(digitalRead(IN_YPLUS) == LOW && !keyua) {
Keyboard.press(KEY_UP_ARROW);
keyua = HIGH;
delay(100);
} else if(keyua && digitalRead(IN_YPLUS)){
Keyboard.release(KEY_UP_ARROW);
keyua = LOW;
}
if(digitalRead(IN_YMINUS) == LOW && !keyda) {
Keyboard.press(KEY_DOWN_ARROW);
keyda = HIGH;
delay(100);
} else if(keyda && digitalRead(IN_YMINUS)){
Keyboard.release(KEY_DOWN_ARROW);
keyda = LOW;
}
if(digitalRead(IN_ZPLUS) == LOW && !keypu) {
Keyboard.press(KEY_PAGE_UP);
keypu = HIGH;
delay(100);
} else if(keypu && digitalRead(IN_ZPLUS)){
Keyboard.release(KEY_PAGE_UP);
keypu = LOW;
}
if(digitalRead(IN_ZMINUS) == LOW && !keypd) {
Keyboard.press(KEY_PAGE_DOWN);
keypd = HIGH;
delay(100);
} else if(keypd && digitalRead(IN_ZMINUS)){
Keyboard.release(KEY_PAGE_DOWN);
keypd = LOW;
}
if(digitalRead(START) == LOW) {
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('r');
delay(200);
Keyboard.releaseAll();
}
if(digitalRead(HOLD) == LOW) {
Keyboard.write(SPACE);
delay(200);
}
if(digitalRead(STOP) == LOW) {
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('s');
delay(200);
Keyboard.releaseAll();
}
if(digitalRead(MPG_X) == LOW && digitalRead(MPG_Z) != LOW){
if(mpg != X){
Keyboard.write(SETMPGX);
mpg = X;
delay(200);
}
} else if(digitalRead(MPG_Z) == LOW && digitalRead(MPG_X) != LOW){
if(mpg != Z){
Keyboard.write(SETMPGZ);
mpg = Z;
}
delay(200);
} else {
if (mpg != Y){
Keyboard.write(SETMPGY);
mpg = Y;
delay(200);
}
}
}