Laserharfe

Der Musiker Jean-Michel Jarre ist bekannt für seine Auftritte mit einer Laserharfe. Dabei fächert ein Laser in mehrere Einzelstrahlen auf. Hält man nun seine Hand in einen der Strahlen, so spielt man damit eine bestimmte Note. Ich habe dieses Prinzip mit einem Schrittmotor und Arduino umgesetzt. Das Prinzip ist einfach: In Position 1 des Schrittmotors wird der Laser eingeschaltet. Danach wird der Lichtsensor (in meinem Fall ein LDR) abgefragt, ob eine erhöhte Helligkeit zu verzeichnen ist. Hält man nämlich seine Hand in den Laserstrahl, so wird dessen Licht verstärkt auf den Lichtsensor zurück reflektiert. Ist dies der Fall, wird diese Note gespielt. Befindet sich keine Hand im Laserstrahl, so meldet der Lichtsensor Dunkelheit und die jeweilige Note wird nicht gespielt. Danach schaltet man den Laser aus und der Schrittmotor bewegt sich um einen Schritt weiter. Nun wiederholt sich der gesamte Vorgang bzgl. Laser ein/ausschalten bzw. LDR einlesen.

Ich habe zwei Varianten umgesetzt: Die erste steuert je nach gespielter Note einen Lautsprecher an. Die zweite Variante sendet die gespielten bzw. nicht mehr gespielten Noten über MIDI an einen Computer. Dort habe ich ein Synthesizerprogramm installiert. Damit hat man bezüglich der gewünschten Klänge eine riesige Auswahl zur Verfügung.

Quelle: https://commons.wikimedia.org/wiki/File:Jean_Jarre_helsinki_2009.jpg, Creative Commons Attribution 2.0 Generic

 


Arduino-Code:

// Arduino Code

// ==========================================
// =====   NOTENAUSGABE ÜBER MIDI !!!   =====
// ==========================================

// MIDI-Anschlüsse:
// * MIDI-Pin-Buchse 5 verbunden mit Digital-In-Pin 1 (von ARDUINO)
// * MIDI-Pin-Buchse 2 verbunden mit  Ground (von ARDUINO)
// * MIDI-Pin-Buchse 4 verbunden über 220 Ohm mit +5V (von ARDUINO)

// ACHTUNG: Pin-1 für MIDI Ausgabe wird mit den serial.write-Befehl angesteuert! Siehe Unterprogramm noteOn!!!


int buttonPress[9] = {0,0,0,0,0,0,0,0,0};  // Welche Note wird gerade gespielt?
int sensor;                                // Wert zum Kalibrieren der Sensor-Empfindlichkeit
int sensor_buffer = 16;                    // Additionsbuffer für sensor
int delay_Laser_Ein = 2;                   // Einschaltzeit des Lasers; mindestens 2
int delay_Laser_Aus = 0;                   // Ausschaltzeit des Lasers; mindestens 0
int delay_Motor = 9;                       // Verzögerung zwischen den einzelnen Motorschritten
int LaserPin = 7;                          // Pin für Laseransteuerung 

/*
// Definition der Motorpins für den Arduino 
int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
*/

// Zu spielende Noten in MIDI-Sprache!!!
// =====================================

int note9 = 0x33; 
int note8 = 0x32; 
int note7 = 0x30; 
int note6 = 0x2E; 
int note5 = 0x2C; 
int note4 = 0x2B; 
int note3 = 0x29; 
int note2 = 0x26; 
int note1 = 0x24;

#include <Stepper.h>

#define STEPS 100    // change this to the number of steps on your motor for a complete round

// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to

Stepper stepper(STEPS, 8, 10, 11, 9);


// ------------------------------------------------------------------
// ---------------------------- setup -------------------------------
// ------------------------------------------------------------------

void setup()
   {

   //   stepper.setSpeed(250);
     
   // Motorpins:
   pinMode(8, OUTPUT);
   pinMode(9, OUTPUT);
   pinMode(10, OUTPUT);
   pinMode(11, OUTPUT);

   // Laserpin (= 7):
   pinMode(LaserPin, OUTPUT); 

   // LED-pin (= 13):
   pinMode(13, OUTPUT);

   // =================================
   // Aktive MIDI-Frequenz (baud-Rate):
   // =================================
   
   Serial.begin(31250);   // Wichtig, die richtige BAUD-rate einzustellen, sonst kommt über MIDI kein Ton am PC an!!!
      
   }


// =============================================================
// Unterprogramm Einschalten der Note (cmd, Tonhöhe, Lautstärke)
// =============================================================

void noteOn(int cmd, int pitch, int volume)
   {
   Serial.write(cmd);
   Serial.write(pitch);
   Serial.write(volume);
   }




//--------------------------------------------------------------------------------------
//---------------------------------- Hauptschleife -------------------------------------
//--------------------------------------------------------------------------------------

void loop()
   {
   sensor = analogRead(A0);              // Ermittlung der Einschaltwelle bei Dunkelheit
   sensor = sensor + sensor_buffer;      // Hinzufügen eines Wertebuffers
   
    
   // Note 1
   // ======

   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit

   //Serial.println(analogRead(A0));    // optionale Ausgabe des LDR-Werts im seriellen Monitor um den Schwellenwert des Sensors zu bestimmen
      
   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))
   
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!! 
   
      {
      digitalWrite(13,HIGH);              // LED eingeschaltet
      noteOn(0x90, note1, 0x7F);          // Kanal = 0x90, Note 1, Lautstärke = EIN
      buttonPress[0] = 1;                 // buttonPress = 1 um zu zeigen, dass die Note gespielt wird
      }

   else if((analogRead(A0) < sensor ) && (buttonPress[0] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13,LOW);                // LED ausgeschaltet
      noteOn(0x90, note1, 0x00);           // Kanal = 0x90, Note 1, Lautstärke = AUS
      buttonPress[0] = 0;                  // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wird
      } 
      

   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit
   
   stepper.step(1);   // Schrittmotor geht um einen Schritt weiter

   /*
   // Schrittmotor geht um einen Schritt weiter
   //------------------------------------------
   digitalWrite(motorPin1, HIGH);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, LOW); 
   */

   delay(delay_Motor);   // Verzögerungszeit des Motors 



   // Note 2
   // ======

   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit

   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))
        
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!!   
      
      {
      digitalWrite(13,HIGH);            // LED eingeschaltet
      noteOn(0x90, note2, 0x7F);        // Kanal = 0x90, Note 2, Lautstärke = EIN
      buttonPress[1] = 1;               // buttonPress = 1 um zu zeigen, dass die Note gespielt wurde
      }

   else if((analogRead(A0) < sensor) && (buttonPress[1] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13,LOW);             // LED ausgeschaltet
      noteOn(0x90, note2, 0x00);        // Kanal = 0x90, Note 2, Lautstärke = AUS
      buttonPress[1] = 0;               // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wurde
      } 


   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit

   stepper.step(1);   // Schrittmotor geht um einen Schritt weiter

   /*
   // Schrittmotor geht um einen Schritt weiter
   //------------------------------------------
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, HIGH);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, LOW); 
   */

   delay(delay_Motor);   // Verzögerungszeit des Motors 
 


   // Note 3
   // ======
   
   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit
  
   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))      
     
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!!
   
      {
      digitalWrite(13,HIGH);            // LED eingeschaltet
      noteOn(0x90, note3, 0x7F);        // Kanal = 0x90, Note 3, Lautstärke = EIN
      buttonPress[2] = 1;               // buttonPress = 1 um zu zeigen, dass die Note gespielt wurde
      }

   else if((analogRead(A0) < sensor) && (buttonPress[2] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13,LOW);             // LED ausgeschaltet
      noteOn(0x90, note3, 0x00);        // Kanal = 0x90, Note 3, Lautstärke = AUS
      buttonPress[2] = 0;               // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wurde
      } 


   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit

   stepper.step(1);   // Schrittmotor geht um einen Schritt weiter

   /*
   // Schrittmotor geht um einen Schritt weiter
   //------------------------------------------
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, HIGH);
   digitalWrite(motorPin4, LOW); 
   */

   delay(delay_Motor);   // Verzögerungszeit des Motors 



   // Note 4
   // ======

   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit

   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))
      
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!!
   
      {
      digitalWrite(13, HIGH);            // LED eingeschaltet
      noteOn(0x90, note4, 0x7F);         // Kanal = 0x90, Note 4, Lautstärke = EIN
      buttonPress[3] = 1;                // buttonPress = 1 um zu zeigen, dass die Note gespielt wurde
      }

   else if((analogRead(A0) < sensor) && (buttonPress[3] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13, LOW);             // LED ausgeschaltet
      noteOn(0x90, note4, 0x00);         // Kanal = 0x90, Note 4, Lautstärke = AUS
      buttonPress[3] = 0;                // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wurde
      } 


   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit


   stepper.step(1);    // Schrittmotor geht um einen Schritt weiter
      
   /*
   // Schrittmotor geht um einen Schritt weiter
   //------------------------------------------
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, HIGH); 
   */

   delay(delay_Motor);   // Verzögerungszeit des Motors 



   // Note 5
   // ======

   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit

   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))
      
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!!
   
      {
      digitalWrite(13, HIGH);            // LED eingeschaltet
      noteOn(0x90, note5, 0x7F);         // Kanal = 0x90, Note 5, Lautstärke = EIN
      buttonPress[4] = 1;                // buttonPress = 1 um zu zeigen, dass die Note gespielt wurde
      }

   else if((analogRead(A0) < sensor) && (buttonPress[4] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13, LOW);             // LED ausgeschaltet
      noteOn(0x90, note5, 0x00);         // Kanal = 0x90, Note 5, Lautstärke = AUS
      buttonPress[4] = 0;                // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wurde
      } 


   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit


   stepper.step(1);   // Schrittmotor geht um einen Schritt weiter
   
   /*
   // Schrittmotor geht um einen Schritt weiter
   //------------------------------------------
   digitalWrite(motorPin1, HIGH);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, LOW); 
   */

   delay(delay_Motor);   // Verzögerungszeit des Motors 



   // Note 6
   // ======

   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit

   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))
      
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!!
   
      {
      digitalWrite(13, HIGH);            // LED eingeschaltet
      noteOn(0x90, note6, 0x7F);         // Kanal = 0x90, Note 6, Lautstärke = EIN
      buttonPress[5] = 1;                // buttonPress = 1 um zu zeigen, dass die Note gespielt wurde
      }

   else if((analogRead(A0) < sensor) && (buttonPress[5] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13, LOW);             // LED ausgeschaltet
      noteOn(0x90, note6, 0x00);         // Kanal = 0x90, Note 6, Lautstärke = AUS
      buttonPress[5] = 0;                // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wurde
      } 


   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit

   stepper.step(1);    // Schrittmotor geht um einen Schritt weiter

   /*
   // Schrittmotor geht um einen Schritt weiter
   //------------------------------------------
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, HIGH);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, LOW); 
   */

   delay(delay_Motor);   // Verzögerungszeit des Motors 



   // Note 7
   // ======

   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit

   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))
      
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt
   
      {
      digitalWrite(13, HIGH);            // LED eingeschaltet. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!!
      noteOn(0x90, note7, 0x7F);         // Kanal = 0x90, Note 7, Lautstärke = EIN
      buttonPress[6] = 1;                // buttonPress = 1 um zu zeigen, dass die Note gespielt wurde
      }

   else if((analogRead(A0) < sensor) && (buttonPress[6] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13, LOW);             // LED ausgeschaltet
      noteOn(0x90, note7, 0x00);         // Kanal = 0x90, Note 7, Lautstärke = AUS
      buttonPress[6] = 0;                // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wurde
      } 


   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit

   stepper.step(1);    // Schrittmotor geht um einen Schritt weiter

   /*
   // Schrittmotor geht um einen Schritt weiter
   //------------------------------------------
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, HIGH);
   digitalWrite(motorPin4, LOW); 
   */

   delay(delay_Motor);   // Verzögerungszeit des Motors 



   // Note 8
   // ======

   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit

   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))
      
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!!
   
      {
      digitalWrite(13, HIGH);            // LED eingeschaltet
      noteOn(0x90, note8, 0x7F);         // Kanal = 0x90, Note 8, Lautstärke = EIN
      buttonPress[7] = 1;                // buttonPress = 1 um zu zeigen, dass die Note gespielt wurde
      }

   else if((analogRead(A0) < sensor) && (buttonPress[7] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13, LOW);             // LED ausgeschaltet
      noteOn(0x90, note8, 0x00);         // Kanal = 0x90, Note 8, Lautstärke = AUS
      buttonPress[7] = 0;                // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wurde
      } 


   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit

   stepper.step(1);    // Schrittmotor geht um einen Schritt weiter

   /*
   // Schrittmotor geht um einen Schritt weiter
   //------------------------------------------
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, HIGH); 
   */

   delay(delay_Motor);   // Verzögerungszeit des Motors 



   // Note 9
   // ======

   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit

   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))
      
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!!
   
      {
      digitalWrite(13, HIGH);            // LED eingeschaltet
      noteOn(0x90, note9, 0x7F);         // Kanal = 0x90, Note 9, Lautstärke = EIN
      buttonPress[8] = 1;                // buttonPress = 1 um zu zeigen, dass die Note gespielt wurde
      }

   else if((analogRead(A0) < sensor) && (buttonPress[8] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13, LOW);             // LED ausgeschaltet
      noteOn(0x90, note9, 0x00);         // Kanal = 0x90, Note 9, Lautstärke = AUS
      buttonPress[8] = 0;                // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wurde
      } 


   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit

   stepper.step(-1);    // Schrittmotor geht um einen Schritt zurück

   /*
   // Schrittmotor geht um einen Schritt zurück
   //------------------------------------------
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, HIGH);
   digitalWrite(motorPin4, LOW); 
   */

   delay(delay_Motor);   // Verzögerungszeit des Motors 



   // Note 8
   // ======

   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit

   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))
      
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!!
   
      {
      digitalWrite(13, HIGH);            // LED eingeschaltet
      noteOn(0x90, note8, 0x7F);         // Kanal = 0x90, Note 8, Lautstärke = EIN
      buttonPress[7] = 1;                // buttonPress = 1 um zu zeigen, dass die Note gespielt wurde
      }

   else if((analogRead(A0) < sensor) && (buttonPress[7] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13, LOW);             // LED ausgeschaltet
      noteOn(0x90, note8, 0x00);         // Kanal = 0x90, Note 8, Lautstärke = AUS
      buttonPress[7] = 0;                // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wurde
      } 


   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit

   stepper.step(-1);    // Schrittmotor geht um einen Schritt zurück
  
   /*
   // Schrittmotor geht um einen Schritt zurück
   //------------------------------------------
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, HIGH);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, LOW); 
   */

   delay(delay_Motor);   // Verzögerungszeit des Motors 



   // Note 7
   // ======

   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit

   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))
      
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!!
   
      {
      digitalWrite(13, HIGH);            // LED eingeschaltet
      noteOn(0x90, note7, 0x7F);         // Kanal = 0x90, Note 7, Lautstärke = EIN
      buttonPress[6] = 1;                // buttonPress = 1 um zu zeigen, dass die Note gespielt wurde
      }

   else if((analogRead(A0) < sensor) && (buttonPress[6] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13, LOW);             // LED ausgeschaltet
      noteOn(0x90, note7, 0x00);         // Kanal = 0x90, Note 7, Lautstärke = AUS
      buttonPress[6] = 0;                // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wurde
      } 


   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit

   stepper.step(-1);    // Schrittmotor geht um einen Schritt zurück
   
   /*
   // Schrittmotor geht um einen Schritt zurück
   //------------------------------------------
   digitalWrite(motorPin1, HIGH);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, LOW); 
   */

   delay(delay_Motor);   // Verzögerungszeit des Motors 



   // Note 6
   // ======

   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit

   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))
      
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!!
   
      {
      digitalWrite(13, HIGH);            // LED eingeschaltet
      noteOn(0x90, note6, 0x7F);         // Kanal = 0x90, Note 6, Lautstärke = EIN
      buttonPress[5] = 1;                // buttonPress = 1 um zu zeigen, dass die Note gespielt wurde
      }

   else if((analogRead(A0) < sensor) && (buttonPress[5] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13, LOW);             // LED ausgeschaltet
      noteOn(0x90, note6, 0x00);         // Kanal = 0x90, Note 6, Lautstärke = AUS
      buttonPress[5] = 0;                // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wurde
      } 


   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit

   stepper.step(-1);    // Schrittmotor geht um einen Schritt zurück
   
   /*
   // Schrittmotor geht um einen Schritt zurück
   //------------------------------------------
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, HIGH); 
   */

   delay(delay_Motor);   // Verzögerungszeit des Motors 



   // Note 5
   // ======
 
   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit

   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))
      
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!!
   
      {
      digitalWrite(13, HIGH);            // LED eingeschaltet
      noteOn(0x90, note5, 0x7F);         // Kanal = 0x90, Note 5, Lautstärke = EIN
      buttonPress[4] = 1;                // buttonPress = 1 um zu zeigen, dass die Note gespielt wurde
      }

   else if((analogRead(A0) < sensor) && (buttonPress[4] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13, LOW);             // LED ausgeschaltet
      noteOn(0x90, note5, 0x00);         // Kanal = 0x90, Note 5, Lautstärke = AUS
      buttonPress[4] = 0;                // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wurde
      } 


   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit

   stepper.step(-1);    // Schrittmotor geht um einen Schritt zurück

   /*
   // Schrittmotor geht um einen Schritt zurück
   //------------------------------------------
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, HIGH);
   digitalWrite(motorPin4, LOW); 
   */

   delay(delay_Motor);   // Verzögerungszeit des Motors 



   // Note 4
   // ======

   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit

   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))
      
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!!
   
      {
      digitalWrite(13, HIGH);            // LED eingeschaltet
      noteOn(0x90, note4, 0x7F);         // Kanal = 0x90, Note 4, Lautstärke = EIN
      buttonPress[3] = 1;                // buttonPress = 1 um zu zeigen, dass die Note gespielt wurde
      }

   else if((analogRead(A0) < sensor) && (buttonPress[3] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13, LOW);             // LED ausgeschaltet
      noteOn(0x90, note4, 0x00);         // Kanal = 0x90, Note 4, Lautstärke = AUS
      buttonPress[3] = 0;                // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wurde
      } 


   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit

   stepper.step(-1);    // Schrittmotor geht um einen Schritt zurück

   /*
   // Schrittmotor geht um einen Schritt zurück
   //------------------------------------------
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, HIGH);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, LOW); 
   */

   delay(delay_Motor);   // Verzögerungszeit des Motors 



   // Note 3
   // ======

   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit

   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))
      
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!!
   
      {
      digitalWrite(13, HIGH);            // LED eingeschaltet
      noteOn(0x90, note3, 0x7F);         // Kanal = 0x90, Note 3, Lautstärke = EIN
      buttonPress[2] = 1;                // buttonPress = 1 um zu zeigen, dass die Note gespielt wurde
      }

   else if((analogRead(A0) < sensor) && (buttonPress[2] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13, LOW);             // LED ausgeschaltet
      noteOn(0x90, note3, 0x00);         // Kanal = 0x90, Note 3, Lautstärke = AUS
      buttonPress[2] = 0;                // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wurde
      } 


   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit

   stepper.step(-1);    // Schrittmotor geht um einen Schritt zurück

   /*
   // Schrittmotor geht um einen Schritt zurück
   //------------------------------------------
   digitalWrite(motorPin1, HIGH);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, LOW); 
   */

   delay(delay_Motor);   // Verzögerungszeit des Motors 



   // Note 2
   // ======

   digitalWrite(LaserPin, HIGH);         // Laser wird eingeschaltet
   delay(delay_Laser_Ein);               // Verzögerungszeit

   if ((analogRead(A0) > sensor ) && (buttonPress[0] == 0) && (buttonPress[1] == 0) && (buttonPress[2] == 0) && (buttonPress[3] == 0) && (buttonPress[4] == 0) && (buttonPress[5] == 0) && (buttonPress[6] == 0) && (buttonPress[7] == 0) && (buttonPress[8] == 0))
      
      // LDR-Sensor erkennt Hand im Laserstrahl, Note wird gespielt. Bei MIDI können mehrere Noten parallel gespielt werden! Daher entfällt die Abfrage, ob eine andere Note gerade gespielt wird!!!
   
      {
      digitalWrite(13, HIGH);            // LED eingeschaltet
      noteOn(0x90, note2, 0x7F);         // Kanal = 0x90, Note 2, Lautstärke = EIN
      buttonPress[1] = 1;                // buttonPress = 1 um zu zeigen, dass die Note gespielt wurde
      }

   else if((analogRead(A0) < sensor) && (buttonPress[1] == 1))
      
      // LDR-Sensor  erkennt keine Hand im Laserstrahl

      { 
      digitalWrite(13, LOW);             // LED ausgeschaltet
      noteOn(0x90, note2, 0x00);         // Kanal = 0x90, Note 2, Lautstärke = AUS
      buttonPress[1] = 0;                // buttonPress = 0 um zu zeigen, dass die Note nicht gespielt wurde
      } 


   digitalWrite(LaserPin, LOW);         // Laser wird wieder ausgeschaltet
   delay(delay_Laser_Aus);              // Verzögerungszeit

   stepper.step(-1);    // Schrittmotor geht um einen Schritt zurück

   /*
   // Schrittmotor geht um einen Schritt zurück
   //------------------------------------------
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, HIGH); 
   */
   
   delay(delay_Motor);   // Verzögerungszeit des Motors 


   }