Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // bật nguồn = đèn đỏ sáng).
- // 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ũ.
- // có cồn <60 thì đèn đỏ tắt, A2 sáng.
- // đọc gyro, xe nghiêng đèn đỏ sáng, xe không nghiêng chỉ A2 sáng.
- // 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)
- #include <RF24Network.h>
- #include <RF24.h>
- #include <SPI.h>
- #include "SIM900.h"
- #include <SoftwareSerial.h>
- #include "gps.h"
- #include "sms.h"
- #include <Wire.h>
- #include "I2Cdev.h"
- #include "MPU6050_6Axis_MotionApps20.h"
- #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
- #include "Wire.h"
- #endif
- #define OUTPUT_READABLE_YAWPITCHROLL
- SMSGSM sms;
- GPSGSM gps;
- MPU6050 mpu;
- //=============
- #define INTERRUPT_PIN 2 // use pin 2 on Arduino Uno & most boards
- #define LED_PIN 13 // (Arduino is 13, Teensy is 11, Teensy++ is 6)
- bool blinkState = false;
- bool dmpReady = false; // set true if DMP init was successful
- uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU
- uint8_t devStatus; // return status after each device operation (0 = success, !0 = error)
- uint16_t packetSize; // expected DMP packet size (default is 42 bytes)
- uint16_t fifoCount; // count of all bytes currently in FIFO
- uint8_t fifoBuffer[64]; // FIFO storage buffer
- Quaternion q; // [w, x, y, z] quaternion container
- VectorInt16 aa; // [x, y, z] accel sensor measurements
- VectorInt16 aaReal; // [x, y, z] gravity-free accel sensor measurements
- VectorInt16 aaWorld; // [x, y, z] world-frame accel sensor measurements
- VectorFloat gravity; // [x, y, z] gravity vector
- float euler[3]; // [psi, theta, phi] Euler angle container
- float ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector
- //==================
- unsigned char dulieu[120];
- char lon[10];
- char lat[10];
- char alt[15];
- char timen[15];
- char vel[10];
- int i=0;
- char den=0;
- char ruou=0;
- unsigned int demn=0;
- int numdata;
- boolean started=false;
- char smstext[160];
- char number[15]="+84987531185";
- unsigned long time;
- //==========================================================
- char ss1,ss2, p;
- RF24 radio(9,10);
- RF24Network network(radio);
- const uint16_t thisNode = 00;
- struct Payload
- {
- int data_1;
- };
- void setup(void)
- {
- Serial.begin(57600);
- pinMode(A0, OUTPUT);
- pinMode(A2, OUTPUT);
- pinMode(A1, OUTPUT);
- digitalWrite(A0, HIGH); // LOW = bật
- digitalWrite(A1, LOW); //đỏ HIGH = tắt
- digitalWrite(A2, HIGH);
- SPI.begin();
- radio.begin();
- network.begin(90, thisNode);
- Serial.println("Setup nrf done.....");
- sim_init();
- //nrf_init();
- check_con();
- setup_mpu_6050_registers();
- }
- void loop(void)
- {
- if(den==1)
- {
- digitalWrite(A1, LOW);
- digitalWrite(A2, HIGH);
- }
- //==============================gyro==============
- //================================================
- ss1=abs(angle_pitch_output);
- if(ss1>50)
- {
- p++;
- digitalWrite(A0, HIGH);
- digitalWrite(A1, LOW);
- digitalWrite(A2, HIGH);
- }
- if(p==10)
- {
- sms.SendSMS(number, "Xe bi do hoac tai nan");
- }
- else if (p>=20)
- {p=20;}
- if(ss1<40)
- {p=0; digitalWrite(A1, HIGH);
- if(den==0)
- digitalWrite(A0, LOW); }
- if((unsigned long) (millis() - time ) > 10000)
- {
- if(started){
- int pos;
- pos = sms.IsSMSPresent(SMS_UNREAD);
- if(pos){
- if(sms.GetSMS(pos, number, smstext, 160)){
- if(strcmp(smstext,"*info#")==0)
- {gps.getPar(lon,lat,alt,timen,vel);
- sprintf(dulieu,"https://www.google.com/maps/place/%s,%s",alt,timen);
- sms.SendSMS(number,dulieu);
- p=0;}
- if(strcmp(smstext,"*start#")==0)
- {
- Serial.print("LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL");
- digitalWrite(A1, HIGH);
- digitalWrite(A2, HIGH);
- digitalWrite(A0, HIGH);
- den=0;
- }
- }
- sms.DeleteSMS(pos); }
- }
- time = millis();
- }
- //================================================
- }
- void setup_mpu_6050_registers(){
- Wire.beginTransmission(0x68);
- Wire.write(0x6B);
- Wire.write(0x00);
- Wire.endTransmission();
- Wire.beginTransmission(0x68);
- Wire.write(0x1C);
- Wire.write(0x10);
- Wire.endTransmission();
- Wire.beginTransmission(0x68);
- Wire.write(0x1B);
- Wire.write(0x08);
- Wire.endTransmission();
- for (int cal_int = 0; cal_int < 1500 ; cal_int ++)
- {
- if(cal_int % 125 == 0)Serial.print(".");
- read_mpu_6050_data();
- gyro_x_cal += gyro_x;
- gyro_y_cal += gyro_y;
- gyro_z_cal += gyro_z;
- delay(3);
- }
- gyro_x_cal /= 2000;
- gyro_y_cal /= 2000;
- gyro_z_cal /= 2000;
- }
- void read_mpu_6050_data(){
- Wire.beginTransmission(0x68);
- Wire.write(0x3B);
- Wire.endTransmission();
- Wire.requestFrom(0x68,14);
- while(Wire.available() < 14);
- acc_x = Wire.read()<<8|Wire.read();
- acc_y = Wire.read()<<8|Wire.read();
- acc_z = Wire.read()<<8|Wire.read();
- temperature = Wire.read()<<8|Wire.read();
- gyro_x = Wire.read()<<8|Wire.read();
- gyro_y = Wire.read()<<8|Wire.read();
- gyro_z = Wire.read()<<8|Wire.read();
- }
- void nrf_init(){
- SPI.begin();
- radio.begin();
- network.begin(90, thisNode);
- Serial.println("Setup nrf done.....");
- }
- void sim_init(){
- if (gsm.begin(2400)){
- gsm.forceON();
- started=true;
- } else
- gsm.SimpleWriteln("AT+CGNSPWR=1");
- delay(2000);
- gps.getPar(lon,lat,alt,timen,vel);
- Serial.println(alt);
- }
- void check_con(){
- digitalWrite(A1, HIGH);
- digitalWrite(A0, LOW); //xanh
- delay(1000);
- digitalWrite(A0, HIGH);
- delay(1000);
- digitalWrite(A0, LOW);
- delay(1000);
- digitalWrite(A0, HIGH);
- while(demn<9000)
- {
- demn++;
- network.update();
- RF24NetworkHeader header;
- Payload payload;
- while ( network.available() )
- {
- network.read(header,&payload,sizeof(payload));
- Serial.print("Nong do con: ");
- ruou=payload.data_1;
- Serial.print(payload.data_1); break;
- }
- if(ruou>60){
- digitalWrite(A1, LOW);
- den=1;
- sms.SendSMS(number, "Nong do con vuot muc cho phep,bam *info# de toa do");
- break;}
- if((ruou<60)&&(ruou>1)){
- Serial.print("OKOKOKOKO");
- digitalWrite(A0, HIGH);
- digitalWrite(A2, LOW);
- break;}
- Serial.println(demn);
- if(demn==9000){
- digitalWrite(A1, LOW);
- delay(1000);
- digitalWrite(A1, HIGH);
- delay(1000);
- digitalWrite(A1, LOW);
- den=1;
- sms.SendSMS(number, "Khong doi mu hoac bi mat xe,bam *info# de toa do");
- break;}
- }
- }
- //=====================
Add Comment
Please, Sign In to add comment