Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.68 KB | None | 0 0
  1. #include <Wire.h>
  2. const int MPU_addr = 0x68;
  3. int16_t AcX,AcY,AcZ;
  4. int counter;
  5. int16_t all_axis[3][100];
  6. int16_t axis_select;
  7. int16_t minX, maxX, minY, maxY, minZ, maxZ;
  8. int steps;
  9. bool flag;
  10. unsigned long Time;
  11. int avx;
  12. void setup() {
  13. Wire.begin();
  14. Wire.beginTransmission(MPU_addr);
  15. Wire.write(0x6B); // PWR_MGMT_1 register
  16. Wire.write(0); // set to zero (wakes up the MPU-6050)
  17. axis_select = 2;
  18. flag = false;
  19. Time = millis();
  20. minX = 32000; maxX = -32000; minY = 32000; maxY = -32000;
  21. minZ = 32000; maxZ = -32000;
  22. Wire.endTransmission(true);
  23. Serial.begin(9600);
  24.  
  25. }
  26.  
  27.  
  28. void loop() {
  29. // put your main code here, to run repeatedly:
  30. Wire.beginTransmission(MPU_addr);
  31. Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
  32. Wire.endTransmission(false);
  33. Wire.requestFrom(MPU_addr,14,true);
  34. all_axis[0][counter%100]=AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
  35. //Serial.println(AcZ);
  36. all_axis[1][counter%100]=AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  37. all_axis[2][counter%100]=AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  38. counter++;
  39. //Serial.println(counter);
  40. if(AcX > maxX)
  41. maxX = AcX;
  42. else if(AcX < minX)
  43. minX = AcX;
  44.  
  45. if(AcY > maxY)
  46. maxY = AcY;
  47. else if(AcY < minY)
  48. minY = AcY;
  49.  
  50. if(AcZ > maxZ)
  51. maxZ = AcZ;
  52. else if(AcZ < minZ)
  53. minZ = AcZ;
  54.  
  55. avx=(maxZ+minZ)/2;
  56. /* if(counter % 20 == 0){
  57. if(maxX - minX > maxY - minY && maxX - minX > maxZ - minZ){
  58. axis_select = 0;
  59. avx=(maxX + minX)/2;}
  60. else if(maxY - minY > maxX - minX && maxY - minY > maxZ - minZ){
  61. axis_select = 1;
  62. avx=(maxY+minY)/2;}
  63. else if(maxZ - minZ > maxY - minY && maxZ - minZ > maxX - minX){
  64. axis_select = 2;
  65. avx=(maxZ+minZ)/2;}
  66. }
  67. */
  68. //Serial.println(axis_select);
  69. //Serial.println("avx");
  70. //Serial.println(avx);
  71. if(counter % 15 == 0 && counter > 22){
  72. int average1 = 0, average2 = 0;
  73. for(int i =counter; counter-i < 15; i=(i-1+100)%100){
  74. average1 += all_axis[axis_select][i];
  75. average2 += all_axis[axis_select][i-1];
  76. }
  77. Serial.println(average2/15);
  78. int diff = average2 - average1;
  79. if(diff < 0 && !flag && millis() - Time > 50&&average2/15>avx){
  80. steps++;
  81. Serial.println("steps---------------------------------");
  82.  
  83. flag = true;
  84. Time = millis();
  85. } else if(diff > 0&& average2/15<avx){
  86. flag = false;
  87. }
  88. }
  89.  
  90. //Serial.print16_t(AcX);
  91. //Serial.print16_t(',');
  92. //Serial.print16_t(AcY);
  93. //Serial.print16_t(',');
  94. //Serial.print16_tln(AcZ);
  95.  
  96. delay(10);
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement