Advertisement
ZulRocky

MODUL 10

Mar 3rd, 2020
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.44 KB | None | 0 0
  1. #include <Wire.h>
  2. //--- Gyro Register Addresses
  3. #define Gyro_gX0 0x28
  4. #define Gyro_gX1 0x29
  5. #define Gyro_gY0 0x2A
  6. #define Gyro_gY1 0x2B
  7. #define Gyro_gZ0 0x2C
  8. #define Gyro_gZ1 0x2D
  9.  
  10. #include <LiquidCrystal_SR_LCD3.h>
  11. const int PIN_LCD_STROBE = 2;
  12. const int PIN_LCD_DATA = 3;
  13. const int PIN_LCD_CLOCK = 4;
  14. LiquidCrystal_SR_LCD3 lcd(PIN_LCD_DATA, PIN_LCD_CLOCK, PIN_LCD_STROBE);
  15.  
  16. int button=7, led=9;
  17. int ok=0;
  18. int no=0;
  19. int Buzzer = A1;
  20. int last=0;
  21.  
  22.  
  23. int Gyro = 0x69; //Device address in which is also included the 8th bit for selecting the mode, read in this case.
  24. int gX0, gX1, gX_out;
  25. int gY0, gY1, gY_out;
  26. int gZ0, gZ1, gZ_out;
  27. float Xg,Yg,Zg;
  28. float angleX,angleY,angleZ,angleXc,angleYc,angleZc;
  29. unsigned long start, finished, elapsed;
  30. float dt=0.015;
  31. void setup()
  32. {
  33. Wire.begin();
  34. Serial.begin(9600);
  35. pinMode(Buzzer, OUTPUT);
  36. pinMode(button, INPUT);
  37. pinMode(led, OUTPUT);
  38. lcd.begin(16,2);
  39. lcd.home();
  40. delay(100);
  41.  
  42. Wire.beginTransmission(Gyro);
  43. Wire.write(0x20); // CTRL_REG1 - Power Mode
  44. Wire.write(15); // Normal mode: 15d - 00001111b
  45. Wire.endTransmission();
  46.  
  47. Wire.beginTransmission(Gyro);
  48. Wire.write(0x23); // CTRL_REG4 - Sensitivity, Scale Selection
  49. Wire.write(48); // 2000dps: 48d - 00110000b
  50. Wire.endTransmission();
  51. }
  52. void loop()
  53. {
  54. ok=digitalRead(button);
  55.  
  56. if(ok==LOW){
  57. goto menu1;
  58. }
  59.  
  60. menu0:
  61. no=0;
  62. lcd.print("HELLO");
  63. digitalWrite(led, LOW);
  64. while(1){
  65. ok=digitalRead(button);
  66. if(ok==LOW){
  67. delay(300);
  68. goto menu1;
  69. }
  70. }
  71.  
  72. menu1:
  73. while(1){
  74. start=millis();
  75. //---- X-Axis
  76. Wire.beginTransmission(Gyro); // transmit to device
  77. Wire.write(Gyro_gX0);
  78. Wire.endTransmission();
  79. Wire.requestFrom(Gyro,1);
  80. if(Wire.available()<=1)
  81. {
  82. gX0 = Wire.read();
  83. }
  84. Wire.beginTransmission(Gyro); // transmit to device
  85. Wire.write(Gyro_gX1);
  86. Wire.endTransmission();
  87. Wire.requestFrom(Gyro,1);
  88. if(Wire.available()<=1)
  89. {
  90. gX1 = Wire.read();
  91. }
  92. //---- Y-Axis
  93. Wire.beginTransmission(Gyro); // transmit to device
  94. Wire.write(Gyro_gY0);
  95. Wire.endTransmission();
  96. Wire.requestFrom(Gyro,1);
  97. if(Wire.available()<=1)
  98. {
  99. gY0 = Wire.read();
  100. }
  101. Wire.beginTransmission(Gyro); // transmit to device
  102. Wire.write(Gyro_gY1);
  103. Wire.endTransmission();
  104. Wire.requestFrom(Gyro,1);
  105. if(Wire.available()<=1)
  106. {
  107. gY1 = Wire.read();
  108. }
  109.  
  110. //---- Z-Axis
  111. Wire.beginTransmission(Gyro); // transmit to device
  112. Wire.write(Gyro_gZ0);
  113. Wire.endTransmission();
  114. Wire.requestFrom(Gyro,1);
  115. if(Wire.available()<=1)
  116. {
  117. gZ0 = Wire.read();
  118. }
  119. Wire.beginTransmission(Gyro); // transmit to device
  120. Wire.write(Gyro_gZ1);
  121. Wire.endTransmission();
  122. Wire.requestFrom(Gyro,1);
  123. if(Wire.available()<=1)
  124. {
  125. gZ1 = Wire.read();
  126. }
  127.  
  128. //---------- X - Axis
  129.  
  130. // Raw Data
  131. gX1=gX1<<8;
  132. gX_out =gX0+gX1;
  133.  
  134. // From the datasheet: 70 mdps/digit
  135. Xg=gX_out*0.07; // Angular rate
  136. // Angular_rate * dt = angle
  137. angleXc = Xg*dt;
  138. angleX = angleX + angleXc;
  139. //---------- Y - Axis
  140. gY1=gY1<<8;
  141. gY_out =gY0+gY1;
  142. Yg=gY_out*0.07;
  143. angleYc = Yg*dt;
  144. angleY = angleY + angleYc;
  145.  
  146. //---------- Z - Axis
  147. gZ1=gZ1<<8;
  148. gZ_out =gZ0+gZ1;
  149. Zg=gZ_out*0.07;
  150. angleZc = Zg*dt;
  151. angleZ = angleZ + angleZc;
  152.  
  153. // Prints the data on the Serial Monitor
  154. if(no==1){
  155. lcd.setCursor(10,1);
  156. lcd.print("BUZ");
  157. lcd.setCursor(0,0);
  158. if(angleX > 20){
  159. digitalWrite(Buzzer, HIGH);
  160. }else{
  161. digitalWrite(Buzzer, LOW);
  162. }
  163. }else{
  164. digitalWrite(Buzzer, LOW);
  165. }
  166.  
  167. if(no==2){
  168. analogWrite(led, angleX);
  169. lcd.setCursor(10,1);
  170. lcd.print("LED");
  171. lcd.setCursor(0,0);
  172. }else{
  173. analogWrite(led, 0);
  174. }
  175. Serial.print("angleX= ");
  176. Serial.print(angleX);
  177. lcd.setCursor(0,0);
  178. lcd.print("X:");
  179. lcd.print(angleX);
  180.  
  181. Serial.print(" angleY= ");
  182. Serial.print(angleY);
  183. lcd.print("Y:");
  184. lcd.print(angleY);
  185.  
  186. Serial.print(" angleZ= ");
  187. Serial.println(angleZ);
  188. lcd.setCursor(0,1);
  189. lcd.print("Z:");
  190. lcd.print(angleZ);
  191.  
  192. delay(100);
  193. // Calculating dt
  194. finished=millis();
  195. elapsed=finished-start;
  196. dt=elapsed/1000.0;
  197. start = elapsed = 0;
  198. delay(50);
  199.  
  200. ok=digitalRead(button);
  201. if(ok==LOW){
  202. delay(300);
  203. no++;
  204. if(no==3){
  205. lcd.clear();
  206. goto menu0;
  207. }else{
  208. goto menu1;
  209. }
  210. }
  211. }
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement