Guest User

Untitled

a guest
May 15th, 2021
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.31 KB | None | 0 0
  1. #include <ps2.h>
  2.  
  3. // Pin 5 il segnale DATA dal mouse, pin 6 è il clock
  4. #define MDATA 5
  5. #define MCLK 6
  6.  
  7. int distanza = 0;
  8. unsigned long time1=0, time2=0,delta=0, sp=0;
  9.  
  10. void gohi(int pin)
  11. {
  12. pinMode(pin, INPUT);
  13. digitalWrite(pin, HIGH);
  14. }
  15.  
  16. void golo(int pin)
  17. {
  18. pinMode(pin, OUTPUT);
  19. digitalWrite(pin, LOW);
  20. }
  21.  
  22. void mouse_write(char data)
  23. {
  24. char i;
  25. char parity = 1;
  26.  
  27. gohi(MDATA);
  28. gohi(MCLK);
  29. delayMicroseconds(300);
  30. golo(MCLK);
  31. delayMicroseconds(300);
  32. golo(MDATA);
  33. delayMicroseconds(10);
  34. /* inizio bit */
  35. gohi(MCLK);
  36. /* attende che il mouse controlla il CLK */
  37. while (digitalRead(MCLK) == HIGH)
  38. ;
  39. /* il CLK è LOW inizia a inviare i dati */
  40. for (i=0; i < 8; i++) {
  41. if (data & 0x01) {
  42. gohi(MDATA);
  43. }
  44. else {
  45. golo(MDATA);
  46. }
  47. /* attesa per il ciclo CLK */
  48. while (digitalRead(MCLK) == LOW)
  49. ;
  50. while (digitalRead(MCLK) == HIGH)
  51. ;
  52. parity = parity ^ (data & 0x01);
  53. data = data >> 1;
  54. }
  55. /* parity */
  56. if (parity) {
  57. gohi(MDATA);
  58. }
  59. else {
  60. golo(MDATA);
  61. }
  62. while (digitalRead(MCLK) == LOW)
  63. ;
  64. while (digitalRead(MCLK) == HIGH)
  65. ;
  66. /* stop bit */
  67. gohi(MDATA);
  68. delayMicroseconds(50);
  69. while (digitalRead(MCLK) == HIGH)
  70. ;
  71. /* attende */
  72. while ((digitalRead(MCLK) == LOW) || (digitalRead(MDATA) == LOW))
  73. ;
  74.  
  75. golo(MCLK);
  76. // Serial.print("done.\n");
  77. }
  78.  
  79. char mouse_read(void)
  80. {
  81. char data = 0x00;
  82. int i;
  83. char bit = 0x01;
  84.  
  85. // Serial.print("reading byte from mouse\n");
  86. /* clock */
  87. gohi(MCLK);
  88. gohi(MDATA);
  89. delayMicroseconds(50);
  90. while (digitalRead(MCLK) == HIGH)
  91. ;
  92. delayMicroseconds(5);
  93. while (digitalRead(MCLK) == LOW)
  94. ;
  95. for (i=0; i < 8; i++) {
  96. while (digitalRead(MCLK) == HIGH)
  97. ;
  98. if (digitalRead(MDATA) == HIGH) {
  99. data = data | bit;
  100. }
  101. while (digitalRead(MCLK) == LOW)
  102. ;
  103. bit = bit << 1;
  104. }
  105.  
  106. while (digitalRead(MCLK) == HIGH)
  107. ;
  108. while (digitalRead(MCLK) == LOW)
  109. ;
  110.  
  111. while (digitalRead(MCLK) == HIGH)
  112. ;
  113. while (digitalRead(MCLK) == LOW)
  114. ;
  115.  
  116.  
  117. golo(MCLK);
  118. // Serial.print("Recvd data ");
  119. // Serial.print(data, HEX);
  120. // Serial.print(" from mouse\n");
  121. return data;
  122. }
  123.  
  124. void mouse_init()
  125. {
  126. gohi(MCLK);
  127. gohi(MDATA);
  128. // Serial.print("Sending reset to mouse\n");
  129. mouse_write(0xff);
  130. mouse_read();
  131. // Serial.print("Read ack byte1\n");
  132. mouse_read();
  133. mouse_read();
  134. // Serial.print("Sending remote mode code\n");
  135. mouse_write(0xf0);
  136. mouse_read();
  137. // Serial.print("Read ack byte2\n");
  138. delayMicroseconds(100);
  139. }
  140.  
  141. void setup()
  142. {
  143. Serial.begin(9600);
  144. mouse_init();
  145. }
  146.  
  147.  
  148. void loop()
  149. {
  150. char mstat;
  151. char mx;
  152.  
  153.  
  154.  
  155. mouse_write(0xeb);
  156. mouse_read();
  157. mstat = mouse_read();
  158. mx = mouse_read();
  159. time2=millis();
  160. delta = time2-time1;
  161.  
  162. if (delta>0) sp = 1000*abs(mx)/delta;
  163. distanza+=mx;
  164.  
  165.  
  166.  
  167. Serial.print(delta, DEC);
  168. //Serial.print("\t");
  169. //Serial.print(time1, DEC);
  170. //Serial.print("\t");
  171. //Serial.print(time2, DEC);
  172. Serial.print("\tX=");
  173. Serial.print(mx, DEC);
  174. Serial.print("\tV=");
  175. Serial.print(sp, DEC);
  176. Serial.print("\t");
  177. Serial.print(distanza, DEC);
  178. Serial.println();
  179. delay(20);
  180. time1=time2;
  181. }
  182.  
Add Comment
Please, Sign In to add comment