klavesnice pro unikovku
[mirrors/Programs.git] / arduino / ps2_keyboard_test / ps2_keyboard_test.ino
diff --git a/arduino/ps2_keyboard_test/ps2_keyboard_test.ino b/arduino/ps2_keyboard_test/ps2_keyboard_test.ino
new file mode 100644 (file)
index 0000000..88bd283
--- /dev/null
@@ -0,0 +1,108 @@
+//Source: http://dduino.blogspot.com/2011/11/arduino-ps2-emulator-computer-control.html
+
+//KBD stuff
+#include "ps2dev.h"  // to emulate a PS/2 device
+PS2dev keyboard(19,18);  // PS2dev object (2:data, 3:clock)
+int enabled = 0;  // pseudo variable for state of "keyboard"
+unsigned char c;  //char stores data recieved from computer for KBD
+
+//Sonar stuff
+
+void ack()
+{
+  //acknowledge commands
+  while(keyboard.write(0xFA));
+}
+
+int keyboardcommand(int command)
+{
+  unsigned char val;
+  switch (command)
+  {
+  case 0xFF: //reset
+    ack();
+    //the while loop lets us wait for the host to be ready
+    while(keyboard.write(0xAA)!=0);
+    break;
+  case 0xFE: //resend
+    ack();
+    break;
+  case 0xF6: //set defaults
+    //enter stream mode
+    ack();
+    break;
+  case 0xF5: //disable data reporting
+    //FM
+    enabled = 0;
+    ack();
+    break;
+  case 0xF4: //enable data reporting
+    //FM
+    enabled = 1;
+    ack();
+    break;
+  case 0xF3: //set typematic rate
+    ack();
+    keyboard.read(&val); //do nothing with the rate
+    ack();
+    break;
+  case 0xF2: //get device id
+    ack();
+    keyboard.write(0xAB);
+    keyboard.write(0x83);
+    break;
+  case 0xF0: //set scan code set
+    ack();
+    keyboard.read(&val); //do nothing with the rate
+    ack();
+    break;
+  case 0xEE: //echo
+    //ack();
+    keyboard.write(0xEE);
+    break;
+  case 0xED: //set/reset LEDs
+    ack();
+    keyboard.read(&val); //do nothing with the rate
+    Serial.print("LEDs: ");
+    Serial.println(val, HEX);
+    digitalWrite(LED_BUILTIN, val);
+    ack();
+    break;
+  }
+  return 0;
+}
+
+void setup()
+{
+  // send the keyboard start up
+  while(keyboard.write(0xAA)!=0);
+  delay(10);
+  // initialize the serial port:
+  Serial.begin(9600);
+  pinMode(LED_BUILTIN, OUTPUT);
+}
+
+void loop()
+{
+  //if host device wants to send a command:
+  if(keyboard.available())
+  {
+    while(keyboard.read(&c));
+    //delay(100);
+    keyboardcommand(c);
+    //delay(100);
+    //c = 0;
+  }
+  
+
+    delay(1000);
+
+    keyboard.write(0x16);
+    keyboard.write(0xF0);
+    keyboard.write(0x16);
+    Serial.print('.');
+  
+    //delay(1000);
+  
+  
+}
This page took 0.133386 seconds and 4 git commands to generate.