Lukas4186

Swarm Robot Test

Apr 10th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.48 KB | None | 0 0
  1. //Lukas Klett © 10.04.2016
  2. //Swarm Robot Network
  3.  
  4. #include <NewPing.h>
  5. #include <SPI.h>
  6. #include "RF24Network.h"
  7. #include "RF24.h"
  8. #include "RF24Mesh.h"
  9.  
  10.  
  11. //Maximale Distanz in cm Festlegen, alles was weiter entfernt ist ergibt den Wert 0
  12. #define Max_Distance 50
  13.  
  14. //Ping Pin für Ultraschall (Ping und Echo sind kurzgeschlossen)
  15. #define Ping_Pin 11
  16.  
  17. //Motor Pins
  18. #define Motor_Right A1
  19. #define Motor_Left A2
  20.  
  21. //Photo Dioden zum suchen von Lichtquellen
  22. #define Led_Input_Left 7 //Analog Input
  23. #define Led_Input_Right 8 //Analog Input
  24.  
  25. //Photo Dioden zum suchen von anderen Robotern
  26. #define Led_Input_Left2 4
  27. #define Led_Input_Right2 5
  28.  
  29. //Kommunikations LEDS
  30. #define No_Connection_LED 2
  31. #define Connection_LED 3
  32.  
  33. //Festlegen das beim Ultraschall Sensor der Ping und Echo Pin kurzgeschlossen sind
  34. NewPing sonar(Ping_Pin, Ping_Pin, Max_Distance);
  35.  
  36. //Festlegen des CE und CS Pins
  37. RF24 radio(7,8);
  38. RF24Network network(radio);
  39. RF24Mesh mesh(radio,network);
  40.  
  41. //Festlegen der Identifikations Namen
  42. #define nodeID 1
  43. #define otherNodeID 2
  44. #define otherNodeID 3  
  45. #define otherNodeID 4  
  46. #define otherNodeID 5    
  47.  
  48. struct payload_t {
  49.   unsigned long ms;
  50.   unsigned long counter;
  51. };
  52.  
  53. uint32_t ctr=0;
  54. uint32_t millisTimer=0;
  55.  
  56. //Variablen
  57. int distance = 0;
  58. int timer = 0; // Zähler damit der Robo abwechseln links und rechts herum fährt
  59. int led_right_value = 0;
  60. int led_left_value = 0;
  61. int led_right_value2;
  62. int led_left_value2;
  63. int LD = 0; //Gesendete Licht Stärke
  64. int LD1 = 0; //Empfangene Licht Stärke
  65.  
  66. void setup(){
  67.   //LEDs zur Navigation
  68.   pinMode(Led_Input_Left, INPUT);
  69.   pinMode(Led_Input_Right, INPUT);
  70.   pinMode(Led_Input_Left2, INPUT);
  71.   pinMode(Led_Input_Right2, INPUT);
  72.  
  73.  
  74.   //Kommunikations LEDS
  75.   pinMode(No_Connection_LED, OUTPUT);
  76.   pinMode(Connection_LED, OUTPUT);
  77.  
  78.   //Festlegen der Node IDs
  79.   mesh.setNodeID(nodeID);
  80.   mesh.begin();
  81. }
  82.  
  83. void loop(){
  84.   //Berechnen Ultraschall Sensor und Festlegen der Photo Dioden Inputs
  85.   {
  86.   unsigned int uS = sonar.ping(); //Sende Ping, bekomme ping Zeit in Microsekunden
  87.   distance =(uS / US_ROUNDTRIP_CM); //Kovertiere Zeit zu Distanz, Achtung wenn Distanz == 0 dann Ziel außerhalb der Reichweite  
  88.   delay(50);
  89.   }
  90.  
  91.  
  92.   //Netzwerk Zeug
  93.   mesh.update();
  94.   mesh.DHCP();
  95.   if(network.available()){
  96.     RF24NetworkHeader header;
  97.     network.peek(header);
  98.     uint32_t LD=0;
  99.     network.read(header,&LD,sizeof(LD));
  100.     int _ID = mesh.getNodeID(header.from_node);
  101.    
  102.     if(LD = 1){
  103.       LD1 = 1;
  104.     }
  105.     else{
  106.       LD1 = 0;
  107.     }    
  108.     }
  109.  
  110.  
  111.   //Ausweich Funktion
  112.   if (distance > 0 && distance < 5){ //Ausweich Funktion  
  113.     if (timer == 0){ // nach Links ausweichen
  114.     analogWrite(Motor_Left, 0);
  115.     analogWrite(Motor_Right, 100);
  116.     }
  117.     if (timer == 1){ // nach Rechts ausweichen
  118.     analogWrite(Motor_Left, 100);
  119.     analogWrite(Motor_Right, 0);
  120.     }
  121.   }
  122.   else{
  123.   //Wenn ein Signal von den anderen Robotern empfangen wurde das sie eine Lichtquelle empfangen haben dann fahr zu dieser, wenn nicht dann suche nach hellster Stelle
  124.   if(LD1 == 1){
  125.     led_left_value2 = analogRead(Led_Input_Left2);
  126.     led_right_value2 = analogRead(Led_Input_Right2);
  127.     if(led_left_value2 > led_right_value2){
  128.        analogWrite(Motor_Left, 0);
  129.        analogWrite(Motor_Right, 100);
  130.     }
  131.     if(led_left_value2 < led_right_value2){
  132.       analogWrite(Motor_Left, 100);
  133.       analogWrite(Motor_Right, 0);
  134.     }
  135.     }
  136.    
  137.     else{
  138.       led_left_value = analogRead(Led_Input_Left);
  139.       led_right_value = analogRead(Led_Input_Right);
  140.      
  141.     if(led_left_value > led_right_value){
  142.        analogWrite(Motor_Left, 0);
  143.        analogWrite(Motor_Right, 100);
  144.     }
  145.  
  146.     if(led_left_value < led_right_value){
  147.       analogWrite(Motor_Left, 100);
  148.       analogWrite(Motor_Right, 0);
  149.     }
  150.    
  151.     }
  152.   }
  153.    
  154.  
  155.   //Datenübertragung zu anderen Robotern
  156.   if((millis() - millisTimer >= 1000) && LD1 == 0){
  157.     millisTimer = millis();
  158.    
  159.     if(!mesh.write(&LD, 'LightDensity', sizeof(LD), otherNodeID)){
  160.        
  161.         if(!mesh.checkConnection()){
  162.             mesh.renewAddress();
  163.             {
  164.             digitalWrite(No_Connection_LED, HIGH);
  165.             digitalWrite(Connection_LED, LOW);
  166.             delay(100);
  167.             }
  168.            }
  169.        
  170.         else{
  171.             digitalWrite(No_Connection_LED, LOW);
  172.             digitalWrite(Connection_LED, HIGH);
  173.              }
  174.            }
  175.          }
  176.          
  177.          delay(1000);
  178.        }
Advertisement
Add Comment
Please, Sign In to add comment