Wonseok Kwak

update alpha 1.1

1 #include <CoDrone.h> // 코드론 라이브러리 1 #include <CoDrone.h> // 코드론 라이브러리
2 2
3 #define ShockLed 12 // 충격 상태 확인을 위한 LED 핀번호 3 #define ShockLed 12 // 충격 상태 확인을 위한 LED 핀번호
4 +#define buzzer 7 // 피에조 버저 핀번호
4 #define LeftVib 27 // 왼쪽 진동자 핀번호 5 #define LeftVib 27 // 왼쪽 진동자 핀번호
5 #define RightVib 28 // 오른쪽 진동자 핀번호 6 #define RightVib 28 // 오른쪽 진동자 핀번호
6 7
...@@ -55,9 +56,9 @@ void accel_calculate() ...@@ -55,9 +56,9 @@ void accel_calculate()
55 */ 56 */
56 57
57 // Data SHIFT From CoDrone Accelerometer 58 // Data SHIFT From CoDrone Accelerometer
58 - ac_x = CoDrone.getAccelerometer().x; 59 + ac_x = CoDrone.ImuAccX / 2;
59 - ac_y = CoDrone.getAccelerometer().y; 60 + ac_y = CoDrone.ImuAccY / 2;
60 - ac_z = CoDrone.getAccelerometer().z; 61 + ac_z = CoDrone.ImuAccZ / 2;
61 62
62 //맵핑화 시킨 것 - 즉 10000으로 맵핑시킴 63 //맵핑화 시킨 것 - 즉 10000으로 맵핑시킴
63 normal_x = map(int(ac_x), -16384, 16384, -5000, mapping_value); 64 normal_x = map(int(ac_x), -16384, 16384, -5000, mapping_value);
...@@ -76,17 +77,6 @@ void accel_calculate() ...@@ -76,17 +77,6 @@ void accel_calculate()
76 void Emergency_state_() 77 void Emergency_state_()
77 { 78 {
78 digitalWrite(ShockLed , HIGH); // 릴레이핀을 True값으로 바꿔 13번 핀의 LED를 ON시킨다. 79 digitalWrite(ShockLed , HIGH); // 릴레이핀을 True값으로 바꿔 13번 핀의 LED를 ON시킨다.
79 - Serial.print("SHOCK level : ");
80 - Serial.println(shock_level); // Serial 모니터로 확인
81 - Serial.print(" x: ");
82 - Serial.print(deltha_x[0]);
83 - Serial.print(" y: ");
84 - Serial.print(deltha_y[0]);
85 - Serial.print(" z: ");
86 - Serial.println(deltha_z[0]);
87 -
88 - /*Serial.print(" deltha_1 : "); Serial.print(deltha_x[1]);
89 - Serial.print(" deltha_2 : "); Serial.println(deltha_x[2]);*/
90 } 80 }
91 81
92 // 충격 감지함수 82 // 충격 감지함수
...@@ -168,6 +158,9 @@ void Shock_Sensing() ...@@ -168,6 +158,9 @@ void Shock_Sensing()
168 // 진동함수 158 // 진동함수
169 void vibrate() 159 void vibrate()
170 { 160 {
161 + // if 충격값이 왼쪽인지 오른쪽인지 대소비교로 판단
162 + // 판단되면 그위치에 나눈것만큼의 진동을 나눠서 크기별로 부여
163 + // analogWrite();
171 164
172 } 165 }
173 166
...@@ -176,10 +169,15 @@ void vibrate() ...@@ -176,10 +169,15 @@ void vibrate()
176 // Main 함수부 169 // Main 함수부
177 void setup() 170 void setup()
178 { 171 {
172 + // 부속 하드웨어 제어
179 pinMode(LeftVib,OUTPUT); 173 pinMode(LeftVib,OUTPUT);
180 pinMode(RightVib,OUTPUT); 174 pinMode(RightVib,OUTPUT);
181 pinMode(ShockLed,OUTPUT); // 핀모드사용, led로 육안확인 가능하게끔 175 pinMode(ShockLed,OUTPUT); // 핀모드사용, led로 육안확인 가능하게끔
176 + pinMode(buzzer,OUTPUT);
177 +
182 digitalWrite(ShockLed,LOW); // HIGH - LED on, LOW - LED off (DEFAULT : OFF) 178 digitalWrite(ShockLed,LOW); // HIGH - LED on, LOW - LED off (DEFAULT : OFF)
179 + digitalWrite(buzzer,LOW);
180 +
183 CoDrone.begin(115200); // 드론 플러그의 통신 개시 (115200bps) 181 CoDrone.begin(115200); // 드론 플러그의 통신 개시 (115200bps)
184 CoDrone.AutoConnect(NearbyDrone); // 가장 가까운 위치의 드론과 연결 182 CoDrone.AutoConnect(NearbyDrone); // 가장 가까운 위치의 드론과 연결
185 CoDrone.DroneModeChange(Flight); // 드론을 플라이트 모드로 설정 183 CoDrone.DroneModeChange(Flight); // 드론을 플라이트 모드로 설정
...@@ -192,47 +190,35 @@ void loop() ...@@ -192,47 +190,35 @@ void loop()
192 byte bt1 = digitalRead(11); // ■ □ □ □ □ □ □ 밑면 적외선 센서를 입력으로 사용 190 byte bt1 = digitalRead(11); // ■ □ □ □ □ □ □ 밑면 적외선 센서를 입력으로 사용
193 byte bt4 = digitalRead(14); // □ □ □ ■ □ □ □ 밑면 적외선 센서를 입력으로 사용 191 byte bt4 = digitalRead(14); // □ □ □ ■ □ □ □ 밑면 적외선 센서를 입력으로 사용
194 byte bt8 = digitalRead(18); // □ □ □ □ □ □ ■ 밑면 적외선 센서를 입력으로 사용 192 byte bt8 = digitalRead(18); // □ □ □ □ □ □ ■ 밑면 적외선 센서를 입력으로 사용
195 -
196 if (bt1 && !bt4 && !bt8) // 밑면 센서 가장 끝 11번 센서에 손을 대면 실행합니다. 193 if (bt1 && !bt4 && !bt8) // 밑면 센서 가장 끝 11번 센서에 손을 대면 실행합니다.
197 { 194 {
198 - CoDrone.FlightEvent(Stop); // 드론을 정지시킵니다. 195 + CoDrone.FlightEvent(Stop); // 드론을 정지시킵니다.
199 } 196 }
200 - 197 + if (!bt1 && !bt4 && bt8) // 밑면 센서 가장 끝 18번 센서에 손을 대면 실행합니다.
201 - if (!bt1 && !bt4 && bt8) // 밑면 센서 가장 끝 18번 센서에 손을 대면 실행합니다.
202 { 198 {
203 - CoDrone.FlightEvent(Landing); // 드론을 착륙시킵니다. 199 + CoDrone.FlightEvent(Landing); // 드론을 착륙시킵니다.
204 } 200 }
205 201
206 Shock_Sensing(); 202 Shock_Sensing();
207 - if(State_Parameter == true){ 203 + if(State_Parameter == true)
208 - shock_sum += deltha; 204 + {
209 - //currentMillis = millis(); 205 + shock_sum += deltha;
210 - } 206 + //currentMillis = millis();
207 + }
211 208
212 - if(State_Parameter == false && shock_sum != 0){ 209 + if(State_Parameter == false && shock_sum != 0)
210 + {
213 //bluetooth.write(char_maker(shock_sum)); // 블루투스로 충격정도 전송 (shock_maker 라는 char 리턴함수를 통해 진동강도 전송) 211 //bluetooth.write(char_maker(shock_sum)); // 블루투스로 충격정도 전송 (shock_maker 라는 char 리턴함수를 통해 진동강도 전송)
214 - Serial.print("누적 충격값 : ");
215 - Serial.println(shock_sum); // 충격 누적값 전송
216 shock_sum = 0; // 충격의 지속이 끝났으니 원래값인 0으로 초기화 212 shock_sum = 0; // 충격의 지속이 끝났으니 원래값인 0으로 초기화
217 } 213 }
218 214
219 - // 연결(페어링)이 성공한 경우에만 실행 215 +
220 - if(PAIRING == true) 216 + if(PAIRING == true) // 연결(페어링)이 성공한 경우에만 실행
221 { 217 {
222 - 218 + YAW = -1 * CoDrone.AnalogScaleChange(analogRead(A3)); // 아날로그 3번 핀의 값을 YAW 값으로 사용합니다. - 좌우회전
223 - YAW = -1 * CoDrone.AnalogScaleChange(analogRead(A3)); 219 + THROTTLE = CoDrone.AnalogScaleChange(analogRead(A4)); // 아날로그 4번 핀의 값을 THROTTLE 값으로 사용합니다. - 승하강
224 - // 아날로그 3번 핀의 값을 YAW 값으로 사용합니다. - 좌우회전 220 + ROLL = -1 * CoDrone.AnalogScaleChange(analogRead(A5)); // 아날로그 5번 핀의 값을 ROLL 값으로 사용합니다. - 좌우이동
225 - 221 + PITCH = CoDrone.AnalogScaleChange(analogRead(A6)); // 아날로그 6번 핀의 값을 PITCH 값으로 사용합니다. - 전후진
226 - THROTTLE = CoDrone.AnalogScaleChange(analogRead(A4)); 222 + CoDrone.Control(SEND_INTERVAL); // 제어 신호를 보냅니다. 통신이 안정하게 가도록 시간을 두고 보냄 (최소 50ms)
227 - // 아날로그 4번 핀의 값을 THROTTLE 값으로 사용합니다. - 승하강
228 -
229 - ROLL = -1 * CoDrone.AnalogScaleChange(analogRead(A5));
230 - // 아날로그 5번 핀의 값을 ROLL 값으로 사용합니다. - 좌우이동
231 -
232 - PITCH = CoDrone.AnalogScaleChange(analogRead(A6));
233 - // 아날로그 6번 핀의 값을 PITCH 값으로 사용합니다. - 전후진
234 -
235 - CoDrone.Control(SEND_INTERVAL);
236 - // 제어 신호를 보냅니다. 통신이 안정하게 가도록 시간을 두고 보냄 (최소 50ms)
237 } 223 }
238 } 224 }
......