Sie sind hier: Startseite / Das IPN / Ausbildung / enm / NM_Final.txt

NM_Final.txt

Plain Text icon NM_Final.txt — Plain Text, 13 KB (13367 bytes)

Dateiinhalt

#include <Servo.h>
Servo servoV;                                       //Vertikalen Servo anlegen
Servo servoH;                                       //Horizontalen Servo anlegen
int recieved_data=0;                                //Eingelesene Daten von der App
int mode_data = 0;                                  //Daten zum Umschalten zwischen den Modis
int control_data = 0;                               //Daten für den vertikalen Servo
int puls_data = 0;                                  //Daten zum Umschalten zwischen Puls - Modis
int langsam = 2;                                    //Pins für Ansteuerung der Puls-Frequenz
int mittel = 3;                                     
int schnell = 4;                                    
int konst = 5;                                      
int analog_pin[5]={A0, A1, A2, A3, A4};             //Pins zum auslesen von den Schaltern
int schalter[5]={0, 0, 0, 0, 0};                    //Schalter-Werte
int servoH_pos[5]={1, 43, 83, 120, 160};            //Positionen von horizontalen Servo
int zaehler0 = 0;                                  
int zaehler1 = 0;                                                        

int z=0;



void setup() {
 for(int i=0; i<5; i++){
 pinMode(analog_pin[i],INPUT);}                     //A0-A4 als Input deklarieren
 Serial.begin(9600);
 servoV.attach(9);
 servoH.attach(10);
 servoV.write(150);                                 //Beide Servos in Startposition bringen
 servoH.write(1);
 schlafend_puls();                                  //Mit "Schlafend"-Modus anfangen
 delay(1000);
 }

void loop() {
    recieved_data=Serial.read();                    //Eventuelle Bluetooth-Daten auslesen
if (recieved_data > 0){                             //Sind Daten verfügbar :
Serial.println(recieved_data);
   if(recieved_data==200){                          //Daten für die Umschaltung auf den Manuellen Modus (200=Verbindung zu Bluetooth-Modul wurde hergestellt)
     mode_data=1;}
   if(recieved_data==250){                          //Daten für die Umschaltung auf den Automatischen Modus (250=Verbindung zu Bluetooth-Modul wurde getrennt)                          
      mode_data=0;}
   if(recieved_data>0 && recieved_data<170){        //Steuerungsdaten für "Puls" und horizontalen Servo in automatischen Modus
    control_data=recieved_data;} 
  }
  modus();                                          
}
void modus(){                                       //Umschaltung zwischen dem Manuellen Modus und dem Automatischen Modus
  if(mode_data==1){
    manuell();}
   else if(mode_data==0){
      automatisch();}
  }
void manuell(){                                     //Funktion für Steuerung den Servos und der Pulsfrequenz
  switch (control_data) {                           //Pulsfrequenz und Position des horizontalen Servos
    case 1 :
       schlafend_puls();
    break;
     case 2 :
     skeptisch_puls();
    break;
     case 3 :
     veraergert_puls();
    break;
     case 4 :
      tot_puls();
    break;
     case 5 :
     servoH.write(0);
    break;
     case 6 :
      servoH.write(39.5);
    break;
     case 7 :
     servoH.write(79);
    break;
     case 8 :
      servoH.write(118.5);
    break;
     case 9:
     servoH.write(158);
    break;}
    if(control_data > 29){      
      servoV.write(control_data);}                 //Position des vertikalen Servos 
  }

void automatisch(){
  musterAuswahl();
  }
void switch_puls(){                                 //Funktion für Umschalten zwischen Pulsfrequenzen und Modis (Automatischer Modus)
if (puls_data==0){
     schlafend_puls();
      }
if (puls_data==1){
        skeptisch_puls();
        }
    
if(puls_data==2){
        veraergert_puls();}
        
if(puls_data==3){
        tot_puls();
        delay(5000);
        puls_data=0;
        zaehler0=0;                                  //Alle Zähler zurücksetzen
        zaehler1=0;}
        delay(1);} 
void abfrage(){                                     //Abfrage der Analogschalter
  for (int i=0; i<5; i++){                            
    schalter[i]=analogRead(analog_pin[i]);
    Serial.println(schalter[i]);
    }

  }
void tot_puls(){                                    //Einschalten der "konstanten" Pulsfrequenz
      digitalWrite(konst, HIGH);          
      digitalWrite(mittel, LOW);
      digitalWrite(schnell, LOW);
      digitalWrite(langsam, LOW);}
void schlafend_puls(){                              //Einschalten der "langsamen" Pulsfrequenz
      digitalWrite(konst, LOW);
      digitalWrite(mittel, LOW);
      digitalWrite(schnell, LOW);
      digitalWrite(langsam, HIGH);
      }
void skeptisch_puls(){                              //Einschalten der "skeptischen" Pulsfrequenz 
      digitalWrite(konst, LOW);
      digitalWrite(mittel, HIGH);
      digitalWrite(schnell, LOW);
      digitalWrite(langsam, LOW);}
void veraergert_puls(){                             //Einschalten der "veraergeten" Pulsfrequenz
      digitalWrite(konst, LOW);
      digitalWrite(mittel, LOW);
      digitalWrite(schnell, HIGH);
      digitalWrite(langsam, LOW);}
void musterAuswahl(){                              //Zufällige Auswahl des Bewegungsmusters
  abfrage();
  if ((schalter[0]>1000||schalter[1]>1000||schalter[2]>1000||schalter[3]>1000||schalter[4]>1000) && (zaehler0<3) ){
    if(puls_data ==0){
       puls_data=1;
       switch_puls();}
    int randNumber = random(1,6);                  //Generieren einer zufälligen Zahl zwischen 1...6
      Serial.println("z");
    Serial.println(zaehler0);
     Serial.println("n");
    Serial.println(randNumber);
    switch(randNumber){                            //Die zufällige Zahl wird für Auswahl des Bewegungsmusters eingesetzt
      case 1:
      case 4:zaehler1 = 0;
             muster1();
             
      break;
      
      case 2:
      case 5: zaehler1 = 0;
              muster2();
      break;
      
      case 6:
      case 3: zaehler1 = 0;
              muster3();
      break;
      }
            zaehler0++;}
  if ((schalter[0]>1000||schalter[1]>1000||schalter[2]>1000||schalter[3]>1000||schalter[4]>1000) && (zaehler0<8 && zaehler0>=3)){
      if(puls_data ==1){
       puls_data=2;
       switch_puls();}
    int randNumber = random(7,12);                //Generieren einer zufälligen Zahl zwischen 7...12
     Serial.println("z");
    Serial.println(zaehler0);
    Serial.println("n");
        Serial.println(randNumber);
    switch(randNumber){                            //Die zufällige Zahl wird für Auswahl des Bewegungsmusters eingesetzt
      case 10:
      case 7: zaehler1 = 0;
              muster4();
      break;
      
      case 11:
      case 8: zaehler1 = 0;
              muster5();
      break;
      
      case 12:
      case 9: zaehler1 = 0;
              muster6();
      break;
      }
            zaehler0++;}
  if(zaehler0==8){
    puls_data=3;
    switch_puls();
    delay(10000);
    zaehler0=0;
    puls_data=0;
    }
  }

void muster1(){
 for(int j=79; j<99 ; j++){
              servoH.write(j);
              delay(30);
              }
 for(int i=150; i>45; i--){
              servoV.write(i);
              delay(80);
              }
              delay(500);
 for(int i=45; i<50; i++){
              servoV.write(i);
              delay(80);
              }
 for(int i=50; i>45; i--){
              servoV.write(i);
              delay(80);
              }
              delay(500);
 for(int i=50; i<150; i++){
              servoV.write(i);
              delay(80);
              }
do
{
  abfrage();
  for(int s=0; s<5; s++){
   if(schalter[s]>900){
        servoH.write(servoH_pos[s]);
                  delay(1000);
                  servoV.write(40);
                  delay(1000);
                  servoV.write(150);
                  delay(1000);}
  }
zaehler1++;
} while ((schalter[0]>1000||schalter[1]>1000||schalter[2]>1000||schalter[3]>1000||schalter[4]>1000)&& zaehler1<3 );

  }
void muster2(){
  for(int i=150; i>65; i--){
              servoV.write(i);
              delay(80);
              }
for(int j=79; j<118 ; j++){
              servoH.write(j);
              delay(30);
              }
for(int j=118; j>39 ; j--){
              servoH.write(j);
              delay(30);
              }
for(int i=65; i<=150; i++){
              servoV.write(i);
              delay(80);
              }
do
{
  abfrage();
  for(int s=0; s<5; s++){
   
      if(schalter[s]>900){
        servoH.write(servoH_pos[s]);
                  delay(1000);
                  servoV.write(40);
                  delay(1000);
                  servoV.write(150);
                  delay(1000);
                  }
  }
zaehler1++;
} while ((schalter[0]>1000||schalter[1]>1000||schalter[2]>1000||schalter[3]>1000||schalter[4]>1000)&& zaehler1<3 );


  }
void muster3(){
  for(int i=150; i>65; i--){
              servoV.write(i);
              delay(40);
              }
for(int j=79; j<118 ; j++){
              servoH.write(j);
              delay(20);
              }
for(int j=118; j>39 ; j--){
              servoH.write(j);
              delay(20);
              }

do{
  abfrage();
  for(int s=0; s<5; s++){
 
      if(schalter[s]>900){
         servoH.write(servoH_pos[s]);
                  delay(1000);
                  servoV.write(40);
                  delay(1000);
                  servoV.write(65);
                  delay(1000);
                  }
  }
zaehler1++;
} while ((schalter[0]>1000||schalter[1]>1000||schalter[2]>1000||schalter[3]>1000||schalter[4]>1000)&& zaehler1<3 );

for(int i=65; i<150; i++){
  
              servoV.write(i);
              delay(10);
              }
  }
void muster4(){
   for(int i=150; i>65; i--){
              servoV.write(i);
              delay(5);
              }
for(int j=79; j<118 ; j++){
              servoH.write(j);
              delay(5);
              }
for(int j=118; j>39 ; j--){
              servoH.write(j);
              delay(5);
              }

do{
  abfrage();
  for(int s=0; s<5; s++){
    
      if(schalter[s]>900){
          servoH.write(servoH_pos[s]);
                  delay(1000);
                  servoV.write(40);
                  delay(500);
                  servoV.write(65);
                  delay(500);
                  }
  }
zaehler1++;
} while ((schalter[0]>1000||schalter[1]>1000||schalter[2]>1000||schalter[3]>1000||schalter[4]>1000)&& zaehler1<3 );

for(int j=39; j<118 ; j++){
              servoH.write(j);
              delay(10);
              }
for(int j=118; j>39 ; j--){
              servoH.write(j);
              delay(10);
              }
for(int j=39; j<79 ; j++){
              servoH.write(j);
              delay(10);
              }
delay(500);
for(int i=65; i<150; i++){
  
              servoV.write(i);
              delay(10);
              }         
  }
void muster5(){
   for(int i=0; i<6; i++){
              servoV.write(70);
              delay(300);
               servoV.write(150);
              delay(300);
              }

do{
  abfrage();
  for(int s=0; s<5; s++){
   
      if(schalter[s]>900){
          servoH.write(servoH_pos[s]);
                  delay(1000);
                  servoV.write(40);
                  delay(400);
                  servoV.write(80);
                  delay(400);
                   servoV.write(40);
                  delay(400);
                  servoV.write(80);
                  delay(1000);
                  }
               
                  }
                  zaehler1++;
} while ((schalter[0]>1000||schalter[1]>1000||schalter[2]>1000||schalter[3]>1000||schalter[4]>1000)&& zaehler1<3 );

                  delay(5000);
                  servoV.write(150);
                  delay(400);
}
void muster6(){
  for(int i=0; i<6; i++){
              
              servoV.write(70);
              delay(300);
              servoH.write(z);
              delay(80);
               servoV.write(150);
              delay(300);
              z+=35;
              }
for(int s=0; s<5; s++){
if(schalter[s]>900){
                  servoH.write(servoH_pos[s]);
                  delay(600);
                  servoV.write(60);
                  delay(600);
                  servoV.write(80);
                  delay(600);
                  }}
                  servoH.write(79);
                  delay(2500);

do{
  abfrage();
  for(int s=0; s<5; s++){
   
      if(schalter[s]>900){
         servoH.write(servoH_pos[s]);
                  delay(1000);
                  servoV.write(40);
                  delay(500);
                  servoV.write(80);
                  delay(500);
                  }}
                 zaehler1++;
                  }while ((schalter[0]>1000||schalter[1]>1000||schalter[2]>1000||schalter[3]>1000||schalter[4]>1000)&& zaehler1<3 );
                  
                  
                  
                  delay(5000);
                  servoV.write(150);
                  delay(400);}