61. Akses Keyboard & Mouse
61. Akses Keyboard & Mouse

PS/2

PS2 atau Personal System/2 adalah salah satu protokol komunikasi antara komputer dan perangkat lain yang dikembangkan pada tahun 1987.

AT Bus

AT atau Advanced Technology bus dikembangkan pada tahun 1984.

USB

Saat ini keyboad dan mouse dengan interface PS2 dan terutama AT bus tidak mudah ditemukan dan digantikan dengan interface USB.

Keyboard dan mouse merupakan perangkat PC (personal computer) yang berfungsi sebagai interface atau perantara antara pengguna dan PC. Perangkat ini umumnya terhubung menggunakan interface usb, akan tetapi umumnya keyboard dan mouse juga memiliki interface PS2 dan AT Bus. Keyboard berfungsi untuk memasukkan data input berupa karakter dan sebagai kendali utama pada PC berupa tombol sedangkan Mouse berfungsi untuk mengendalikan kursor pada PC dan memasukkan perintah terhadap kursor.

Sambungan Kabel Keyboard & Mouse di Arduino

Percobaan 75: Akses Keyboard

.
  1. Hubungkan CLK dengan pin D3 ATMEGA 2560
  2. Hubungkan DATA dengan pin D2 ATMEGA 2560
  3. Hubungkan board ATMEGA 2560 dengan Komputer menggunakan kabel USB.
  4. Bukalah IDE Arduino, kemudian ketikkan kode program/sketch atau buka file KEYBOARD
  5. Compile menggunakan verify button (tanda ceklist pada IDE arduino) untuk mengecek ada atau tidaknya error/kesalahan dalam pengetikan.
  6. Upload program ke arduino dengan cara, pilih File > Upload to I/O board, atau tekan tombol tanda panah pada jendela IDE arduino.

Code Keyboard:

/*  PS2Keyboard library example
  
  PS2Keyboard now requries both pins specified for begin()

  keyboard.begin(d ata_pin, irq_pin);
  
  Valid irq pins:
     Arduino:      2, 3
     Arduino Mega: 2, 3, 18, 19, 20, 21
     Teensy 1.0:   0, 1, 2, 3, 4, 6, 7, 16
     Teensy 2.0:   5, 6, 7, 8
     Teensy++ 1.0: 0, 1, 2, 3, 18, 19, 36, 37
     Teensy++ 2.0: 0, 1, 2, 3, 18, 19, 36, 37
     Sanguino:     2, 10, 11
  
  for more information you can read the original wiki in arduino.cc
  at http://www.arduino.cc/playground/Main/PS2Keyboard
  or http://www.pjrc.com/teensy/td_libs_PS2Keyboard.html
  
  Like the Original library and example this is under LGPL license.
  
  Modified by Cuninganreset@gmail.com on 2010-03-22
  Modified by Paul Stoffregen <paul@pjrc.com> June 2010
*/
   
#include <PS2Keyboard.h>

const int DataPin = 2;
const int IRQpin =  3;

PS2Keyboard keyboard;

void setup() {
  delay(1000);
  keyboard.begin(DataPin, IRQpin);
  Serial.begin(9600);
  Serial.println("Keyboard Test:");
}

void loop() {
  if (keyboard.available()) {
    
    // read the next key
    char c = keyboard.read();
    
    // check for some of the special keys
    if (c == PS2_ENTER) {
      Serial.println();
    } else if (c == PS2_TAB) {
      Serial.print("[Tab]");
    } else if (c == PS2_ESC) {
      Serial.print("[ESC]");
    } else if (c == PS2_PAGEDOWN) {
      Serial.print("[PgDn]");
    } else if (c == PS2_PAGEUP) {
      Serial.print("[PgUp]");
    } else if (c == PS2_LEFTARROW) {
      Serial.print("[Left]");
    } else if (c == PS2_RIGHTARROW) {
      Serial.print("[Right]");
    } else if (c == PS2_UPARROW) {
      Serial.print("[Up]");
    } else if (c == PS2_DOWNARROW) {
      Serial.print("[Down]");
    } else if (c == PS2_DELETE) {
      Serial.print("[Del]");
    } else {
      
      // otherwise, just print all normal characters
      Serial.print(c);
    }
  }
}

Video Demo:

.

Percobaan 76: Akses Mouse

  1. Hubungkan CLK dengan pin D21 ATMEGA 2560
  2. Hubungkan DATA dengan pin D20 ATMEGA 2560
  3. Hubungkan board ATMEGA 2560 dengan Komputer menggunakan kabel USB.
  4. Bukalah IDE Arduino, kemudian ketikkan kode program/sketch atau buka file MOUSE
  5. Compile menggunakan verify button (tanda ceklist pada IDE arduino) untuk mengecek ada atau tidaknya error/kesalahan dalam pengetikan.
  6. Upload program ke arduino dengan cara, pilih File > Upload to I/O board, atau tekan tombol tanda panah pada jendela IDE arduino.

Code Mouse:

unsigned long millisStart;
long MouseX = 0;
long MouseY = 0;
char stat,x,y;

byte PS2ReadByte = 0;

#define PS2CLOCK  21
#define PS2DATA   20



void PS2GoHi(int pin){
  pinMode(pin, INPUT);
  digitalWrite(pin, HIGH);
}

void PS2GoLo(int pin){
  pinMode(pin, OUTPUT);
  digitalWrite(pin, LOW);
}

void PS2Write(unsigned char data){
  unsigned char parity=1;

  PS2GoHi(PS2DATA);
  PS2GoHi(PS2CLOCK);
  delayMicroseconds(300);
  PS2GoLo(PS2CLOCK);
  delayMicroseconds(300);
  PS2GoLo(PS2DATA);
  delayMicroseconds(10);
  PS2GoHi(PS2CLOCK);

  while(digitalRead(PS2CLOCK)==HIGH);

  for(int i=0; i<8; i++){
    if(data&0x01) PS2GoHi(PS2DATA);
    else PS2GoLo(PS2DATA);
    while(digitalRead(PS2CLOCK)==LOW);
    while(digitalRead(PS2CLOCK)==HIGH);
    parity^=(data&0x01);
    data=data>>1;
  }

  if(parity) PS2GoHi(PS2DATA);
  else PS2GoLo(PS2DATA);

  while(digitalRead(PS2CLOCK)==LOW);
  while(digitalRead(PS2CLOCK)==HIGH);

  PS2GoHi(PS2DATA);
  delayMicroseconds(50);

  while(digitalRead(PS2CLOCK)==HIGH);
  while((digitalRead(PS2CLOCK)==LOW)||(digitalRead(PS2DATA)==LOW));

  PS2GoLo(PS2CLOCK);
}

unsigned char PS2Read(void){
  unsigned char data=0, bit=1;

  PS2GoHi(PS2CLOCK);
  PS2GoHi(PS2DATA);
  delayMicroseconds(50);
  while(digitalRead(PS2CLOCK)==HIGH);

  delayMicroseconds(5);
  while(digitalRead(PS2CLOCK)==LOW);

  for(int i=0; i<8; i++){
    while(digitalRead(PS2CLOCK)==HIGH);
    if(digitalRead(PS2DATA)==HIGH) data|=bit;
    while(digitalRead(PS2CLOCK)==LOW);
    bit=bit<<1;
  }

  while(digitalRead(PS2CLOCK)==HIGH);
  while(digitalRead(PS2CLOCK)==LOW);
  while(digitalRead(PS2CLOCK)==HIGH);
  while(digitalRead(PS2CLOCK)==LOW);

  PS2GoLo(PS2CLOCK);

  return data;
}

void PS2MouseInit(void){
  PS2Write(0xFF);
  for(int i=0; i<3; i++) PS2Read();
  PS2Write(0xF0);
  PS2Read();
  delayMicroseconds(100);
}

void PS2MousePos(char &stat, char &x, char &y){
  PS2Write(0xEB);
  PS2Read();
  stat=PS2Read();
  x=PS2Read();
  y=PS2Read();
}


void setup(){
  PS2GoHi(PS2CLOCK);
  PS2GoHi(PS2DATA);

  Serial.begin(9600);
  while(!Serial); 
  Serial.println("Setup");
  PS2MouseInit();
  Serial.println("Mouse Ready");
  millisStart=millis();
  MouseX = 0;
  MouseY = 0;
}

void loop(){
//Serial.println("1");
  if(millis() < millisStart){
    millisStart = millis();
  }
  if(millis() - millisStart > 1000){
    //Serial.println("2");
    PS2MousePos(stat,x,y);
    Serial.print(stat, BIN);
    Serial.print("\tdelta X=");
    Serial.print(x, DEC);
    Serial.print("\tdelta Y=");
    Serial.println(y, DEC);
    millisStart = millis();
  }

  MouseX += x;
  MouseY += y;


  //  delay(1000);
}

Video Demo:

.

Hasil pada serial monitor:

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *