Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SparkFun_ADXL345.h>
- #include <Wire.h>
- #include <Servo.h>
- #include <BMP180.h>
- #include <SPI.h>
- #include <SD.h>
- #include <SoftwareSerial.h>
- #define LED 7
- #define BUZZER 8
- #define SERVO 9
- #define VOL A2
- #define LDR A3
- #define offsetX -123 //numbers for calibration
- #define offsetY -16
- #define offsetZ -10
- #define gainX 133
- #define gainY 261
- #define gainZ 248
- ADXL345 adxl = ADXL345();
- File data;
- Servo servo;
- BMP180 bmp;
- float alt[2],pres,temp,volt;
- double a;
- int x,y,z;
- int condition;
- int ldr;
- unsigned long stagetime[3];
- int cond[4];
- int rescSys = 0;
- double accX = 0;
- double accY = 0;
- double accZ = 0;
- void setup() {
- Serial.begin(9600);
- Serial1.begin(9600);
- Serial1.setTimeout(200);
- pinMode(LDR, INPUT);
- pinMode(LED,OUTPUT);
- pinMode(BUZZER,OUTPUT);
- pinMode(SERVO,OUTPUT);
- adxl.powerOn();
- adxl.setRangeSetting(4);
- adxl.setActivityXYZ(1, 1, 1);
- bmp.begin();
- servo.attach(SERVO);
- servo.write(100);
- data = SD.open("data.txt", FILE_WRITE);
- cond[0] = 0;
- cond[1] = 0;
- cond[2] = 0;
- cond[3] = 0;
- alt[0] = 0;
- alt[1] = 0;
- delay(15000);
- tone(BUZZER,3000,2000);
- ldr = analogRead(LDR);
- /*for(int i=0;i<3;i++) {
- digitalWrite(LED,HIGH);
- tone(BUZZER,1000);
- delay(1000);
- digitalWrite(LED,LOW);
- noTone(BUZZER);
- delay(1000);
- }*/
- //LDRtest();
- //digitalWrite(LED,LOW);
- }
- void loop() {
- condition = checkCondition();
- //Serial.println((String)"CONDITION: "+condition);
- if(condition == 0) cond[0] = 1;
- else if(condition == 1) cond[1] = 1;
- else if(condition == 2 && rescSys == 0) {
- enableRescsys();
- cond[2] = 1;
- }
- else if(condition == 3) {
- cond[3] = 1;
- while(1) {
- //Serial.println("HELLO");
- tone(BUZZER,3000,250);
- dataGet();
- dataWrite();
- delay(500);
- }
- }
- dataGet();
- dataWrite();
- //bmpDisp();
- Serial.println(analogRead(LDR));
- alt[1] = alt[0];
- delay(500);
- }
- void dataGet() {
- bmp.read(3);
- alt[0] = bmp.alti;
- temp = bmp.temp;
- pres = bmp.pres;
- adxl.readAccel(&x, &y, &z);
- accX = ((double)x - offsetX)/gainX;
- accY = ((double)y - offsetY)/gainY;
- accZ = ((double)z - offsetZ)/gainZ;
- a = sqrt(accX*accX + accY*accY + accZ*accZ);
- }
- void dataWriteSD() {
- if(data) {
- Serial.print("Writing to data.txt...");
- data.println((String)"03"+';'+millis()+';'+alt[0]+';'+a+';'+volt+';'+cond[0]+';'+cond[1]+';'+cond[2]+';'); //cond[3]
- Serial.println("Done.");
- }
- else Serial.println("Error opening data.txt");
- }
- void dataWrite() {
- Serial1.println((String)"03"+';'+millis()+';'+alt[0]+';'+a+';'+volt+';'+cond[0]+';'+cond[1]+';'+cond[2]+';'+cond[3]);
- Serial.println((String)"03"+';'+millis()+';'+alt[0]+';'+a+';'+volt+';'+cond[0]+';'+cond[1]+';'+cond[2]+';'+cond[3]);
- }
- void bmpDisp() {
- Serial.println((String)"P="+pres+" MM.PT.CT | T="+temp+" *C | B="+alt[0]+" M. | A="+a+"M/C^2");
- }
- void enableRescsys() {
- servo.write(10);
- Serial.println("ENABLED");
- rescSys = 1;
- }
- int checkCondition() {
- if((alt[0] - alt[1] > 3.5 || alt[0] > 7) && cond[0] == 0) return 0;
- if((analogRead(LDR)>(ldr+100) || analogRead(LDR)>1000) && cond[1] == 0) return 1;
- if((cond[1] == 1) && (alt[0] >= 40)) return 2;
- if((cond[2] == 1) && (alt[0] <= 3)) return 3;
- return -1;
- }
- void LDRtest() {
- unsigned long tmp;
- unsigned int val;
- tmp = millis();
- while(millis() - tmp < 10000) { //10seс
- val = analogRead(LDR);
- if(val>900) {
- digitalWrite(LED,HIGH);
- tone(BUZZER,3000,10);
- }
- else digitalWrite(LED,LOW);
- }
- return;
- }
- //VOLTAGE MEASURE!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement