fstange 6 年之前
父节点
当前提交
90fa4f7a08
共有 1 个文件被更改,包括 38 次插入21 次删除
  1. 38 21
      Zumo32U4/Hauptprojekt/Hauptprojekt.ino

+ 38 - 21
Zumo32U4/Hauptprojekt/Hauptprojekt.ino

1
 //Verfassser: Felix Stange 4056379 MET2016
1
 //Verfassser: Felix Stange 4056379 MET2016
2
-//Datum: 19.07.2017 erstellt, 25.10.2017 zuletzt geändert
2
+//Datum: 19.07.2017 erstellt, 08.12.2017 zuletzt geändert
3
 //Projekt: Der Zumo fährt automatisch zwischen 2 Linien ohne diese zu überfahren mithilfe der 
3
 //Projekt: Der Zumo fährt automatisch zwischen 2 Linien ohne diese zu überfahren mithilfe der 
4
 //Liniensensoren (3), ähnlich einer Spurhalteautomatik (dunkler Belag und helle Streifen). 
4
 //Liniensensoren (3), ähnlich einer Spurhalteautomatik (dunkler Belag und helle Streifen). 
5
 //Außerdem werden Kollisionen verhindert durch Nutzung der vorderen Abstandssensoren. Kommt es 
5
 //Außerdem werden Kollisionen verhindert durch Nutzung der vorderen Abstandssensoren. Kommt es 
42
 int16_t   compassOffset;                
42
 int16_t   compassOffset;                
43
 uint16_t  compassLastUpdate;
43
 uint16_t  compassLastUpdate;
44
 
44
 
45
+uint16_t  LastUpdate;
45
 int       maxSpeed = 200;               //Maximale Geschwindigkeit (möglich 400)
46
 int       maxSpeed = 200;               //Maximale Geschwindigkeit (möglich 400)
46
-char      dir = "0";                    //Fahrtrichtung, Ereignis
47
-char      report[200];                  //Ausgabe
48
-char      attention;                    //zeigt Überhol-/Abbiegevorgang an
47
+char      dir = 'O';                    //Fahrtrichtung, Ereignis
48
+char      report[250];                  //Ausgabe
49
+int       warning = 0;                  //1 zeigt Überhol-/Abbiegevorgang an
49
 
50
 
50
 /*-----------------------------------------------------------------*/
51
 /*-----------------------------------------------------------------*/
51
 
52
 
130
 {
131
 {
131
   //Initialisierung der Bluetoothverbindung
132
   //Initialisierung der Bluetoothverbindung
132
   Serial1.begin(9600);                                              
133
   Serial1.begin(9600);                                              
133
-  if(Serial1.available()) Serial1.println("Bluetooth verfügbar");  
134
+  if(Serial1.available()) Serial1.println("Verbindung hergestellt");  
134
 
135
 
135
   //Initialisierung und Kalibrierung der Sensoren
136
   //Initialisierung und Kalibrierung der Sensoren
136
   Serial1.println("Sensorkalibrierung");   
137
   Serial1.println("Sensorkalibrierung");   
137
   Wire.begin();                       
138
   Wire.begin();                       
138
   delay(500);
139
   delay(500);
140
+  LastUpdate = micros();
139
   ProxSetup();
141
   ProxSetup();
140
   LineSetup();                                                
142
   LineSetup();                                                
141
   GyroSetup();
143
   GyroSetup();
151
 
153
 
152
 /*-----------------------------------------------------------------*/
154
 /*-----------------------------------------------------------------*/
153
 
155
 
156
+//Update Durchlaufzeit
157
+void TimeUpdate()
158
+{
159
+  uint16_t m = micros();
160
+  uint16_t dt = m - LastUpdate;
161
+  LastUpdate = m;
162
+}
163
+
154
 //Update Abstandssensoren
164
 //Update Abstandssensoren
155
 void ProxUpdate()
165
 void ProxUpdate()
156
 {
166
 {
210
  //Funktion Kollisionserkennung
220
  //Funktion Kollisionserkennung
211
 void CollisionDetection()                                            
221
 void CollisionDetection()                                            
212
 {
222
 {
213
-  dir = "X";
223
+  dir = 'X';
214
   Serial1.println("Aufprall erkannt");
224
   Serial1.println("Aufprall erkannt");
215
   ledRed(1);
225
   ledRed(1);
216
 
226
 
223
 //Funktion Hindernisumfahrung
233
 //Funktion Hindernisumfahrung
224
 void ObstacleAvoidance()                                              
234
 void ObstacleAvoidance()                                              
225
 {
235
 {
226
-  dir = "U";
227
-  Serial1.println("Überholen");  
236
+  dir = 'U';
237
+  Serial1.println("Überholen"); 
238
+  Serial1.println("1"); 
228
   ledYellow(1);
239
   ledYellow(1);
229
 
240
 
230
   //Schritt 1: Spurwechsel links   
241
   //Schritt 1: Spurwechsel links   
311
     motors.setSpeeds(maxSpeed, maxSpeed/2);
322
     motors.setSpeeds(maxSpeed, maxSpeed/2);
312
     ledYellow(1);
323
     ledYellow(1);
313
     delay(100);    
324
     delay(100);    
314
-    dir = "R";
325
+    dir = 'R';
315
   }
326
   }
316
 
327
 
317
   //rechte Linie erreicht, nach links fahren
328
   //rechte Linie erreicht, nach links fahren
320
     motors.setSpeeds(maxSpeed/2, maxSpeed);  
331
     motors.setSpeeds(maxSpeed/2, maxSpeed);  
321
     ledYellow(1); 
332
     ledYellow(1); 
322
     delay(100); 
333
     delay(100); 
323
-    dir = "L";     
334
+    dir = 'L';     
324
   }
335
   }
325
 
336
 
326
   //Linie überfahren, zurücksetzen
337
   //Linie überfahren, zurücksetzen
332
       motors.setSpeeds(-maxSpeed/2, -maxSpeed/2);
343
       motors.setSpeeds(-maxSpeed/2, -maxSpeed/2);
333
     }
344
     }
334
     delay(500); 
345
     delay(500); 
335
-    dir = "B";     
346
+    dir = 'B';     
336
   }  
347
   }  
337
 
348
 
338
   //normale Fahrt
349
   //normale Fahrt
340
   {
351
   {
341
     motors.setSpeeds(maxSpeed, maxSpeed);    
352
     motors.setSpeeds(maxSpeed, maxSpeed);    
342
     ledGreen(1); 
353
     ledGreen(1); 
343
-    dir = "F";     
354
+    dir = 'F';     
344
   }
355
   }
345
 }
356
 }
346
 
357
 
348
 void Crossroad()
359
 void Crossroad()
349
 {
360
 {
350
   ledYellow(1); 
361
   ledYellow(1); 
351
-  dir = "A";
362
+  dir = 'A';
352
   Serial1.println("Abbiegen");  
363
   Serial1.println("Abbiegen");  
364
+  Serial1.println("1"); 
353
 
365
 
354
   //Kodierung analysieren
366
   //Kodierung analysieren
355
   bool  leftCode;                                                         //links => 1
367
   bool  leftCode;                                                         //links => 1
386
     while(rotationAngle != 90)
398
     while(rotationAngle != 90)
387
     {
399
     {
388
       GyroUpdate();
400
       GyroUpdate();
389
-      motors.setSpeeds(0, maxSpeed/2);  
401
+      if(lineValue[0] < 1000) motors.setSpeeds(maxSpeed/2, maxSpeed/2);
402
+      else if(lineValue[2] < 1000) motors.setSpeeds(0, maxSpeed/2);
403
+      else motors.setSpeeds(maxSpeed/4, maxSpeed/2);  
390
     }
404
     }
391
     //geradeaus fahren
405
     //geradeaus fahren
392
     motors.setSpeeds(maxSpeed/2, maxSpeed/2); 
406
     motors.setSpeeds(maxSpeed/2, maxSpeed/2); 
401
     while(rotationAngle != -90)
415
     while(rotationAngle != -90)
402
     {
416
     {
403
       GyroUpdate();
417
       GyroUpdate();
404
-      motors.setSpeeds(maxSpeed/2, 0);  
418
+      if(lineValue[0] < 1000) motors.setSpeeds(maxSpeed/2, 0);
419
+      else if(lineValue[2] < 1000) motors.setSpeeds(maxSpeed/2, maxSpeed/2);
420
+      else motors.setSpeeds(maxSpeed/2, maxSpeed/4);  
405
     }
421
     }
406
     //geradeaus fahren
422
     //geradeaus fahren
407
     motors.setSpeeds(maxSpeed/2, maxSpeed/2); 
423
     motors.setSpeeds(maxSpeed/2, maxSpeed/2); 
417
 void SerialOutput()                                                     
433
 void SerialOutput()                                                     
418
 {
434
 {
419
   snprintf_P(report, sizeof(report),
435
   snprintf_P(report, sizeof(report),
420
-    PSTR("Abstand: %3d %3d %3d %3d   Linie: %6d %6d %6d   Richtung: %3c   Weg: %6d %6d   Winkel: %6d"),
436
+    PSTR("Abstand: %3d %3d %3d %3d   Linie: %6d %6d %6d   Weg: %3d %3d   Winkel: %3d   Ereignis: %3c   Zeit: %3d"),
421
     proxValue[0], proxValue[1], proxValue[2], proxValue[3], 
437
     proxValue[0], proxValue[1], proxValue[2], proxValue[3], 
422
     lineValue[0], lineValue[1], lineValue[2],
438
     lineValue[0], lineValue[1], lineValue[2],
423
-    dir, driveRotation[0], driveRotation[1], rotationAngle);
424
-  Serial1.println(report);
439
+    driveRotation[0], driveRotation[1], rotationAngle, dir, LastUpdate);
440
+  Serial.println(report);
425
 }
441
 }
426
 
442
 
427
 /*-----------------------------------------------------------------*/
443
 /*-----------------------------------------------------------------*/
433
   ledRed(0);
449
   ledRed(0);
434
 
450
 
435
   //Abfragen der Sensordaten
451
   //Abfragen der Sensordaten
452
+  TimeUpdate();
436
   LineUpdate();                                         
453
   LineUpdate();                                         
437
   ProxUpdate();
454
   ProxUpdate();
438
   GyroUpdate();
455
   GyroUpdate();
440
   EncoderUpdate();
457
   EncoderUpdate();
441
 
458
 
442
   //Funktionsauswahl
459
   //Funktionsauswahl
443
-  attention = Serial1.read();
444
-  if(attention == "Überholen" || "Abbiegen") 
460
+  warning = Serial1.read();
461
+  if(warning == 1) 
445
   {
462
   {
446
     maxSpeed = 100;
463
     maxSpeed = 100;
447
-    if(moveRate > 1000 || proxValue[0] > 4 || proxValue[1] > 4 || lineValue[0] > 500 && lineValue[0] < 1500) || 
464
+    if(moveRate > 1000 || proxValue[0] > 4 || proxValue[1] > 4 || lineValue[0] > 500 && lineValue[0] < 1500 || 
448
     lineValue[2] > 500 && lineValue[2] < 1500) motors.setSpeeds(0, 0);  
465
     lineValue[2] > 500 && lineValue[2] < 1500) motors.setSpeeds(0, 0);  
449
     else TrackKeeper();
466
     else TrackKeeper();
450
   }
467
   }