Advertisement
Guest User

Pedometer_Final

a guest
Feb 24th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.10 KB | None | 0 0
  1. #include<Wire.h>
  2. #include <LiquidCrystal_PCF8574.h>
  3. LiquidCrystal_PCF8574 lcd(0x27); // set the LCD address to 0x27 for a 16 chars and 2 line display
  4. const int MPU_addr=0x68 , arraySize = 4; // I2C address of the MPU-6050
  5. int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ,count = 0;
  6. int averagex[arraySize] , averagey[arraySize] , averagez[arraySize];
  7. int avgZ ,steps = 0, higherthan = 0;
  8. int threshold = 2300;
  9. double time_1,time_2;
  10. float distance ;
  11. double Cal = 0;
  12. int cnt = 0;
  13. int arr[300];
  14. void setup(){
  15. Wire.begin();
  16. Wire.beginTransmission(MPU_addr);
  17. Wire.write(0x6B); // PWR_MGMT_1 register
  18. Wire.write(0); // set to zero (wakes up the MPU-6050)
  19. Wire.endTransmission(true);
  20. Wire.begin();
  21. Wire.beginTransmission(0x27); //LCD
  22. Wire.endTransmission();
  23. Serial.begin(9600);
  24. lcd.begin(16, 2); // initialize the lcd
  25.  
  26. }
  27. void loop(){
  28. Wire.beginTransmission(MPU_addr);
  29. Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
  30. Wire.endTransmission(false);
  31. Wire.requestFrom(MPU_addr,14,true); // request a total of 14 registers
  32. AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
  33. AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  34. AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  35. Tmp=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  36. GyX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  37. GyY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  38. GyZ=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
  39. averagex[count % arraySize] = AcX;
  40. averagey[count % arraySize] = AcY;
  41. averagez[count % arraySize] = AcZ;
  42. count++;
  43. if(count >= 4){
  44. //Serial.print((averagex[0]+averagex[1]+averagex[2]+averagex[3]) / arraySize); Serial.print(" ");
  45. //Serial.print((averagey[0]+averagey[1]+averagey[2]+averagey[3]) / arraySize); Serial.print(" ");
  46. avgZ = (averagez[0]+averagez[1]+averagez[2]+averagez[3]) / arraySize ;
  47. //Serial.print(avgZ); Serial.print(" ");
  48. //Serial.print("\n");
  49. }
  50. if (avgZ > threshold && higherthan == 0){
  51. higherthan = 1 ;
  52. } else if (avgZ < threshold && higherthan == 1){
  53. if(check_time_condition() == 1)
  54. {
  55. double startingTime;
  56. if(steps == 0)
  57. {
  58. startingTime = millis()/1000 - 1;
  59. Cal = 0;
  60. }
  61. steps++;
  62. distance = steps * 0.45;
  63. print_first_line(steps,distance);
  64. if(steps < 2)
  65. {
  66. print_second_line(0,0);
  67. }else
  68. {
  69. double velocity = distance / (millis()/1000 - startingTime);
  70. Cal = Cal + velocity * 4.5;
  71. print_second_line(velocity,Cal);
  72. }
  73. }
  74. higherthan = 0;
  75. }
  76.  
  77. /*Serial.print("AcX = ");*/ //Serial.print(AcX); Serial.print(" ");
  78. /*Serial.print(" | AcY = ");*/ //Serial.print(AcY); Serial.print(" ");
  79. /*Serial.print(" | AcZ = ");*/ //Serial.print(AcZ); Serial.print(" ");
  80. //Serial.print("\n");
  81. delay(50);
  82. }
  83.  
  84. int check_time_condition()
  85. {
  86. if(cnt %2 == 0)
  87. {
  88. time_1 = millis() / 100;
  89. }else if(cnt % 2 == 1)
  90. {
  91. time_2 = millis() / 100;
  92. }
  93. cnt++;
  94. if(cnt == 1)
  95. return 1 ;
  96. else
  97. {
  98. double diff =time_1 - time_2;
  99. if((time_1 - time_2 > 0 && time_1 - time_2 < 4) || (time_2 - time_1 > 0 &&time_2 - time_1 < 4) )
  100. {
  101. return 0; //don't count
  102. }else if( time_1 - time_2 > 20 ||time_2 - time_1 > 20)
  103. {
  104. return 0; //count normally
  105. }else
  106. return 1;
  107. }
  108.  
  109. }
  110.  
  111. void print_first_line(int steps , double distance)
  112. {
  113. lcd.setBacklight(255);
  114. lcd.home();
  115. lcd.clear();
  116. lcd.setCursor(0, 0);
  117. lcd.print("steps:");
  118. lcd.setCursor(6, 0);
  119. lcd.print(steps);
  120. lcd.setCursor(8, 0);
  121. lcd.print("dis:");
  122. lcd.setCursor(12, 0);
  123. lcd.print(distance);
  124. }
  125.  
  126. void print_second_line(double velocity,double Cal)
  127. {
  128. lcd.setCursor(0, 1);
  129. lcd.print("vel:");
  130. lcd.setCursor(4, 1);
  131. lcd.print(velocity);
  132. lcd.setCursor(8, 1);
  133. lcd.print("Cal:");
  134. lcd.setCursor(12, 1);
  135. lcd.print(Cal);
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement