Mach 3 Tangentbordsemulator

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
TobiasEinarsson
Inlägg: 58
Blev medlem: 6 september 2012, 11:15:33
Ort: Göteborg

Re: Mach 3 Tangentbordsemulator

Inlägg 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..
Senast redigerad av TobiasEinarsson 14 mars 2013, 12:11:25, redigerad totalt 1 gång.
H.O
Inlägg: 5917
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Mach 3 Tangentbordsemulator

Inlägg 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....
Castor
Inlägg: 2143
Blev medlem: 24 mars 2012, 13:03:49

Re: Mach 3 Tangentbordsemulator

Inlägg 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
Senast redigerad av Castor 14 mars 2013, 12:20:38, redigerad totalt 1 gång.
hato
Inlägg: 140
Blev medlem: 1 februari 2007, 20:22:36
Ort: Alingsås

Re: Mach 3 Tangentbordsemulator

Inlägg 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
TobiasEinarsson
Inlägg: 58
Blev medlem: 6 september 2012, 11:15:33
Ort: Göteborg

Re: Mach 3 Tangentbordsemulator

Inlägg 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å.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Mach 3 Tangentbordsemulator

Inlägg 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
Senast redigerad av sodjan 14 mars 2013, 12:31:38, redigerad totalt 1 gång.
hato
Inlägg: 140
Blev medlem: 1 februari 2007, 20:22:36
Ort: Alingsås

Re: Mach 3 Tangentbordsemulator

Inlägg 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
Castor
Inlägg: 2143
Blev medlem: 24 mars 2012, 13:03:49

Re: Mach 3 Tangentbordsemulator

Inlägg 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.
TobiasEinarsson
Inlägg: 58
Blev medlem: 6 september 2012, 11:15:33
Ort: Göteborg

Re: Mach 3 Tangentbordsemulator

Inlägg 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...
hato
Inlägg: 140
Blev medlem: 1 februari 2007, 20:22:36
Ort: Alingsås

Re: Mach 3 Tangentbordsemulator

Inlägg 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.
:bravo:
hato
Inlägg: 140
Blev medlem: 1 februari 2007, 20:22:36
Ort: Alingsås

Re: Mach 3 Tangentbordsemulator

Inlägg 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);
      }
    }  

 
} 
Skriv svar