anhhoang2703

Untitled

Dec 2nd, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.93 KB | None | 0 0
  1. // bật nguồn = đèn đỏ sáng).
  2. // khởi động xong, đợi cồn đèn đỏ tắt, đèn xanh nhấp nháy 2 phát, báo hiệu đợi đội mũ.
  3. // có cồn <60 thì đèn đỏ tắt, A2 sáng.
  4. // đọc gyro, xe nghiêng đèn đỏ sáng, xe không nghiêng chỉ A2 sáng.
  5. // không có cồn: đèn đỏ sáng => mát xe hoặc không đội mũ, đợi tin nhắn có *start* =giống như có cồn <60 (A2 sáng, đỏ tắt)
  6.  
  7. #include <RF24Network.h>
  8. #include <RF24.h>
  9. #include <SPI.h>
  10. #include "SIM900.h"
  11. #include <SoftwareSerial.h>
  12. #include "gps.h"
  13. #include "sms.h"
  14. #include <Wire.h>
  15. #include "I2Cdev.h"
  16. #include "MPU6050_6Axis_MotionApps20.h"
  17. #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
  18. #include "Wire.h"
  19. #endif
  20. #define OUTPUT_READABLE_YAWPITCHROLL
  21. SMSGSM sms;
  22. GPSGSM gps;
  23. MPU6050 mpu;
  24. //=============
  25. #define INTERRUPT_PIN 2 // use pin 2 on Arduino Uno & most boards
  26. #define LED_PIN 13 // (Arduino is 13, Teensy is 11, Teensy++ is 6)
  27. bool blinkState = false;
  28. bool dmpReady = false; // set true if DMP init was successful
  29. uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU
  30. uint8_t devStatus; // return status after each device operation (0 = success, !0 = error)
  31. uint16_t packetSize; // expected DMP packet size (default is 42 bytes)
  32. uint16_t fifoCount; // count of all bytes currently in FIFO
  33. uint8_t fifoBuffer[64]; // FIFO storage buffer
  34. Quaternion q; // [w, x, y, z] quaternion container
  35. VectorInt16 aa; // [x, y, z] accel sensor measurements
  36. VectorInt16 aaReal; // [x, y, z] gravity-free accel sensor measurements
  37. VectorInt16 aaWorld; // [x, y, z] world-frame accel sensor measurements
  38. VectorFloat gravity; // [x, y, z] gravity vector
  39. float euler[3]; // [psi, theta, phi] Euler angle container
  40. float ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector
  41. //==================
  42. unsigned char dulieu[120];
  43. char lon[10];
  44. char lat[10];
  45. char alt[15];
  46. char timen[15];
  47. char vel[10];
  48. int i=0;
  49. char den=0;
  50. char ruou=0;
  51. unsigned int demn=0;
  52. int numdata;
  53. boolean started=false;
  54. char smstext[160];
  55. char number[15]="+84987531185";
  56. unsigned long time;
  57.  
  58. //==========================================================
  59. char ss1,ss2, p;
  60. RF24 radio(9,10);
  61. RF24Network network(radio);
  62. const uint16_t thisNode = 00;
  63. struct Payload
  64. {
  65. int data_1;
  66. };
  67. void setup(void)
  68. {
  69. Serial.begin(57600);
  70. pinMode(A0, OUTPUT);
  71. pinMode(A2, OUTPUT);
  72. pinMode(A1, OUTPUT);
  73. digitalWrite(A0, HIGH); // LOW = bật
  74. digitalWrite(A1, LOW); //đỏ HIGH = tắt
  75. digitalWrite(A2, HIGH);
  76. SPI.begin();
  77. radio.begin();
  78. network.begin(90, thisNode);
  79. Serial.println("Setup nrf done.....");
  80. sim_init();
  81. //nrf_init();
  82. check_con();
  83. setup_mpu_6050_registers();
  84. }
  85. void loop(void)
  86. {
  87.  
  88. if(den==1)
  89. {
  90. digitalWrite(A1, LOW);
  91. digitalWrite(A2, HIGH);
  92. }
  93.  
  94. //==============================gyro==============
  95.  
  96. //================================================
  97.  
  98.  
  99. ss1=abs(angle_pitch_output);
  100. if(ss1>50)
  101. {
  102. p++;
  103. digitalWrite(A0, HIGH);
  104. digitalWrite(A1, LOW);
  105. digitalWrite(A2, HIGH);
  106. }
  107.  
  108. if(p==10)
  109. {
  110. sms.SendSMS(number, "Xe bi do hoac tai nan");
  111.  
  112. }
  113. else if (p>=20)
  114. {p=20;}
  115. if(ss1<40)
  116. {p=0; digitalWrite(A1, HIGH);
  117. if(den==0)
  118. digitalWrite(A0, LOW); }
  119. if((unsigned long) (millis() - time ) > 10000)
  120.  
  121. {
  122. if(started){
  123. int pos;
  124. pos = sms.IsSMSPresent(SMS_UNREAD);
  125. if(pos){
  126. if(sms.GetSMS(pos, number, smstext, 160)){
  127. if(strcmp(smstext,"*info#")==0)
  128. {gps.getPar(lon,lat,alt,timen,vel);
  129. sprintf(dulieu,"https://www.google.com/maps/place/%s,%s",alt,timen);
  130. sms.SendSMS(number,dulieu);
  131. p=0;}
  132. if(strcmp(smstext,"*start#")==0)
  133. {
  134. Serial.print("LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL");
  135. digitalWrite(A1, HIGH);
  136. digitalWrite(A2, HIGH);
  137. digitalWrite(A0, HIGH);
  138. den=0;
  139.  
  140. }
  141. }
  142. sms.DeleteSMS(pos); }
  143. }
  144. time = millis();
  145. }
  146.  
  147. //================================================
  148. }
  149. void setup_mpu_6050_registers(){
  150. Wire.beginTransmission(0x68);
  151. Wire.write(0x6B);
  152. Wire.write(0x00);
  153. Wire.endTransmission();
  154. Wire.beginTransmission(0x68);
  155. Wire.write(0x1C);
  156. Wire.write(0x10);
  157. Wire.endTransmission();
  158. Wire.beginTransmission(0x68);
  159. Wire.write(0x1B);
  160. Wire.write(0x08);
  161. Wire.endTransmission();
  162. for (int cal_int = 0; cal_int < 1500 ; cal_int ++)
  163. {
  164. if(cal_int % 125 == 0)Serial.print(".");
  165. read_mpu_6050_data();
  166. gyro_x_cal += gyro_x;
  167. gyro_y_cal += gyro_y;
  168. gyro_z_cal += gyro_z;
  169. delay(3);
  170. }
  171. gyro_x_cal /= 2000;
  172. gyro_y_cal /= 2000;
  173. gyro_z_cal /= 2000;
  174.  
  175. }
  176. void read_mpu_6050_data(){
  177. Wire.beginTransmission(0x68);
  178. Wire.write(0x3B);
  179. Wire.endTransmission();
  180. Wire.requestFrom(0x68,14);
  181. while(Wire.available() < 14);
  182. acc_x = Wire.read()<<8|Wire.read();
  183. acc_y = Wire.read()<<8|Wire.read();
  184. acc_z = Wire.read()<<8|Wire.read();
  185. temperature = Wire.read()<<8|Wire.read();
  186. gyro_x = Wire.read()<<8|Wire.read();
  187. gyro_y = Wire.read()<<8|Wire.read();
  188. gyro_z = Wire.read()<<8|Wire.read();
  189.  
  190. }
  191.  
  192. void nrf_init(){
  193. SPI.begin();
  194. radio.begin();
  195. network.begin(90, thisNode);
  196. Serial.println("Setup nrf done.....");
  197. }
  198. void sim_init(){
  199. if (gsm.begin(2400)){
  200. gsm.forceON();
  201. started=true;
  202. } else
  203. gsm.SimpleWriteln("AT+CGNSPWR=1");
  204. delay(2000);
  205. gps.getPar(lon,lat,alt,timen,vel);
  206. Serial.println(alt);
  207. }
  208. void check_con(){
  209. digitalWrite(A1, HIGH);
  210. digitalWrite(A0, LOW); //xanh
  211. delay(1000);
  212. digitalWrite(A0, HIGH);
  213. delay(1000);
  214. digitalWrite(A0, LOW);
  215. delay(1000);
  216. digitalWrite(A0, HIGH);
  217. while(demn<9000)
  218. {
  219. demn++;
  220. network.update();
  221. RF24NetworkHeader header;
  222. Payload payload;
  223. while ( network.available() )
  224. {
  225. network.read(header,&payload,sizeof(payload));
  226. Serial.print("Nong do con: ");
  227. ruou=payload.data_1;
  228. Serial.print(payload.data_1); break;
  229. }
  230. if(ruou>60){
  231. digitalWrite(A1, LOW);
  232. den=1;
  233. sms.SendSMS(number, "Nong do con vuot muc cho phep,bam *info# de toa do");
  234. break;}
  235. if((ruou<60)&&(ruou>1)){
  236. Serial.print("OKOKOKOKO");
  237. digitalWrite(A0, HIGH);
  238. digitalWrite(A2, LOW);
  239. break;}
  240. Serial.println(demn);
  241. if(demn==9000){
  242. digitalWrite(A1, LOW);
  243. delay(1000);
  244. digitalWrite(A1, HIGH);
  245. delay(1000);
  246. digitalWrite(A1, LOW);
  247. den=1;
  248. sms.SendSMS(number, "Khong doi mu hoac bi mat xe,bam *info# de toa do");
  249. break;}
  250. }
  251.  
  252. }
  253. //=====================
Add Comment
Please, Sign In to add comment