Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Sie befinden sich in: Unterrichtsangebote Fächer Fachbereich III Informatik Arduino Töne mit Arduino Keyboard mit LCD-Display

Keyboard mit LCD-Display

Ziel:  Die Töne, die ausgegeben werden, sollen auf einem LCD- Dispay angezeigt werden.

Material: - 1 Arduino Mega

                 -15 Taster

                 - 15 Wiederstände (10 oder 100 Kiloohmen)

                 - 3 Breadboards und und ein keines Breadboard

                 - 1 LCD- Display

                 - 1 Drehpotentiometer

                 - viele Kabel

Erklärung: Mit den Tastern, die in einer Reihe stehen (so wie bei einer Klaviertastatur), kann man sich Töne ausgeben lassen. Hält man einen weiteren Taster gedrückt, erhöhen sich die Töne um eine Oktave. Auf dem LCD- Display werden dann die gedrückten Töne angezeigt. Mittels eines Tasters neben dem LCD- Display, kann man es löschen, wenn es voll ist. Mit einem weiteren Taster, kann man sich zudem noch die Töne, die man gerade gespielt hat, ausgeben lassen.

Der Aufbau:
Die Taster (Keyboardtastatur) werden mit den jeweiligen Pins 30-36, 5V und jeweils einem GND verbunden. Der Schalter zur Oktaverhöhung wird mit Pin 22, 5V und einem GND verbunden. Der Schalter zum Abspielen wird mit Pin 50, 5V und GND verbunden. Der Schalter zum Löschen des Displays wird mit 5V, GND und Pin 7 verbunden. Das LCD- Display wird mit den Pins 12, 11, 5, 4, 3 und 2 verbunden, der Lautsprecher mit GND und Pin 53.

 

 

Der Code:

#include
int buzz = 53;// Pin Lautsprecher
int button1 = 30;//"weiße Tasten"
int button2 = 31;
int button3 = 32;
int button4 = 33;
int button5 = 34;
int button6 = 35;
int button7 = 36;
int kl1 = 40;//"schwarze" Tasten
int kl2 = 41;
int kl3 = 42;
int kl4 = 43;
int kl5 = 44;
int okt = 22;// Taste zum Erhöhen der Oktave
int loeschpin = 7;
int tonab[80];
long longab[80];
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
int h = 9;
int i = 10;
int j = 11;
int k = 12;
int l = 13;
int m = 14;
int n = 15;
int o = 16;
int p = 17;
int q = 18;
int r = 19;
int s = 20;
int t = 21;
int u = 22;
int v = 23;
int w = 24;
int x = 25;
int aa = 2;
int y = 0;
int z = 0;
int tonalt = 0;
int tonaltabgleich = 1;
long counter = 0;
int play = 50;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  Serial.begin(9600);
  pinMode(button1, INPUT); // alle "weißen" Tasten werden als Eingänge deffiniert
  pinMode(button2, INPUT);
  pinMode(button3, INPUT);
  pinMode(button4, INPUT);
  pinMode(button5, INPUT);
  pinMode(button6, INPUT);
  pinMode(button7, INPUT);
  pinMode(kl1, INPUT); // alle "schwarzen" Tasten werden als Eingänge deffiniert
  pinMode(kl2, INPUT);
  pinMode(kl3, INPUT);
  pinMode(kl4, INPUT);
  pinMode(kl5, INPUT);
  pinMode(okt, INPUT);
  pinMode(play, INPUT);
  pinMode(loeschpin, INPUT);
  pinMode(buzz, OUTPUT); // der Lautsprecher wird als Ausgang deffiniert
  lcd.begin(16, 2);
  lcd.clear(); //Display löschen
  lcd.setCursor(0, 0);
}
void loop() {
 
  if (digitalRead(okt) == HIGH) //wenn die Taste gedrückt wir, werden die Töne um eine Oktave angehoben
  { if (digitalRead(button1) == HIGH) //Es wird überprüft, ob eine Taste gedrückt wird....
    {
      digitalWrite(buzz, HIGH); // ... wenn z.B. die "c-Taste" gedrückt wird, wird der Ton c ausgegeben
      tone(buzz, 261.63);// gib den Ton c1 an
      if (a == 2) {
       
        tonab[y] = 261.63;
        tonalt = 261.63;
       
        lcd.print("c1");
        a++; y++;
      }
      delay(200);
      counter += 150;
     
    }
    else {
      a = 2;
    }
    if (digitalRead(button2) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 293.67);// gib den Ton d1 an
      if (b == 3) {
        lcd.print("d1");
      
        tonab[y] = 293.67;
        tonalt = 293.67;
       
        b++; y++;
      }
      delay(200);
      counter += 150;
    
    }
    else {
      b = 3;
    }
    if (digitalRead(button2) == LOW)
    {
      noTone(buzz);
    }
    if (digitalRead(button3) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 329.63);// gib den Ton e1 an
      if (c == 4) {
        tonab[y] = 329.63;
        tonalt = 329.63;
        lcd.print("e1");
        c++; y++;
      }
      delay(200);
       counter += 150;
    }
    else {
      c = 4;
    }
    if (digitalRead(button4) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 349.23);// gib den Ton f1 an
      if (d == 5) {
        tonab[y] = 349.23;
        tonalt = 349.23;
        lcd.print("f1");
        d++; y++;
      }
      delay(200);
       counter += 150;
    }
    else {
      d = 5;
    }
    if (digitalRead(button5) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 392);// gib den Ton g1 an
      if (e == 6) {
        tonab[y] = 392;
        tonalt = 392;
        lcd.print("g1");
        e++; y++;
      }
      delay(200);
       counter += 150;
    }
    else {
      e = 6;
    }
    if (digitalRead(button6) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 440);// gib den Ton a1 an
      if (f == 7) {
        tonab[y] = 440;
        tonalt = 440;
        lcd.print("a1");
        f++; y++;
      }
      delay(200);
       counter += 150;
    }
    else {
      f = 7;
    }
    if (digitalRead(button7) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 493.88);// gib den Ton h1 an
      if (g == 8) {
        tonab[y] = 493.88;
        tonalt = 493.88;
        lcd.print("h1");
        g++; y++;
      }
      delay(200);
       counter += 150;
    }
    else {
      g = 8;
    }
    if (digitalRead(kl1) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 277.18);// gib den Ton cis1 an
      if (h == 9) {
        tonab[y] = 277.18;
        tonalt = 277.18;
        lcd.print("cis1");
        h++; y++;
      }
      delay(200);
      counter += 155;
    }
    else {
      h = 9;
    }
    if (digitalRead(kl2) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 311.13);// gib den Ton dis1 an
      if (i == 10) {
        tonab[y] = 311.13;
        tonalt = 311.13;
        lcd.print("dis1");
        i++; y++;
      }
      delay(200);
      counter += 155;
    }
    else {
      i = 10;
    }
    if (digitalRead(kl3) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 369.99);// gib den Ton fis1 an
      if (j == 11) {
        tonab[y] = 369.99;
        tonalt = 369.99;
        lcd.print("fis1");
        j++; y++;
      }
      delay(200);
      counter += 155;
    }
    else {
      j = 11;
    }
    if (digitalRead(kl4) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 415.31);// gib den Ton gis1 an
      if (k == 12) {
        tonab[y] = 415.31;
        tonalt = 415.31;
        lcd.print("gis1");
        k++; y++;
      }
      delay(200);
      counter += 155;
    }
    else {
      k = 12;
    }
    if (digitalRead(kl5) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 466.16);// gib den Ton ais1 an
      if (l == 13) {
        tonab[y] = 466.16;
        tonalt = 466.16;
        lcd.print("ais1");
        l++; y++;
      }
      delay(200);
      counter += 155;
    }
    else {
      l = 13;
    }
 
  }
  else // wenn die Oktavänderungstaste nicht gedrückt wird, bleiben die Töne auf ihrer ursprünglichen Oktave
  {
    if (digitalRead(button1) == HIGH) //Es wird überprüft, ob eine Taste gedrückt wird....
    {
      digitalWrite(buzz, HIGH); // ... wenn z.B. die "c-Taste" gedrückt wird, wird der Ton c ausgegeben
      tone(buzz, 130.81);// gib den Ton c an
      if (m == 14) {
        tonab[y] = 130.81;
        tonalt = 130.81;
        lcd.print("c");
        m++; y++;
      }
      delay(200);
      counter += 155;
    }
    else {
      m = 14;
    }
    if (digitalRead(button2) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 146.83);// gib den Ton d an
      if (n == 15) {
        tonab[y] = 146.83;
        tonalt = 146.83;
        lcd.print("d");
        n++; y++;
      }
      delay(200);
      counter += 155;
    }
    else {
      n = 15;
    }
    if (digitalRead(button2) == LOW)
    {
      noTone(buzz);
    }
    if (digitalRead(button3) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 164.81);// gib den Ton e an
      if (o == 16) {
        tonab[y] = 164.81;
        tonalt = 164.81;
        lcd.print("e");
        o++; y++;
      }
      delay(200);
      counter += 155;
    }
    else {
      o = 16;
    }
    if (digitalRead(button4) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 174.61);// gib den Ton f an
      if (p == 17) {
        tonab[y] = 174.61;
        tonalt = 174.61;
        lcd.print("f");
        p++; y++;
      }
      delay(200);
      counter += 140;
    }
    else {
      p = 17;
    }
  if (digitalRead(button5) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 196);// gib den Ton g an
      if (q == 18) {
        tonab[y] = 196;
        tonalt = 196;
        lcd.print("g");
        q++; y++;
      }
      delay(200);
      counter += 200;
    }
   else {
      q = 18;
   }
    if (digitalRead(button6) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 220);// gib den Ton a an
      if (r == 19) {
        tonab[y] = 220;
        tonalt = 220;
        lcd.print("a");
        r++; y++;
      }
      delay(200);
      counter += 200;
    }
   else {
      r = 19;
    }
    if (digitalRead(button7) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 246.94);// gib den Ton h an
      if (s == 20) {
        tonab[y] = 246.94;
        tonalt = 246.94;
        lcd.print("h");
        s++; y++;
      }
      delay(200);
      counter += 140;
    }
    else {
      s = 20;
    }
    if (digitalRead(kl1) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 138.59);// gib den Ton cis an
      if (t == 21) {
        tonab[y] = 138.59;
        tonalt = 138.59;
        lcd.print("cis");
        t++; y++;
      }
      delay(200);
      counter += 230;
    }
    else {
      t = 21;
    }
    if (digitalRead(kl2) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 155.56);// gib den Ton dis an
      if (u == 22) {
        tonab[y] = 155.56;
        tonalt = 155.56;
        lcd.print("dis");
        u++; y++;
      }
      delay(200);
      counter += 140;
    }
    else {
      u = 22;
    }
    if (digitalRead(kl3) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 185);// gib den Ton fis an
      if (v == 23) {
        tonab[y] = 185;
        tonalt = 185;
        lcd.print("fis");
        v++; y++;
      }
      delay(200);
      counter += 155;
    }
    else {
      v = 23;
    }
    if (digitalRead(kl4) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 207.65);// gib den Ton gis an
      if (w == 24) {
        tonab[y] = 207.65;
        tonalt = 207.65;
        lcd.print("gis");
        w ++; y++;
      }
      delay(200);
      counter += 155;
    }
    else {
      w = 24;
    }
    if (digitalRead(kl5) == HIGH)
    {
      digitalWrite(buzz, HIGH);
      tone(buzz, 233.63);// gib den Ton ais an
      if (x == 25 ) {
        tonab[y] = 233.63;
        tonalt = 233.63;
        lcd.print("ais");
        x++; y++;
      }
      delay(200);
      counter += 155;
    }
    else {
      x = 25;
    }
  }
  if (digitalRead(loeschpin) == HIGH)
  {
    lcd.clear(); //Display löschen
    lcd.setCursor(0, 0);
  }
  if (tonalt == tonaltabgleich) {
  
   
   
   
  }
  if (tonalt != tonaltabgleich) {
    longab[z] = counter;
    counter = 0;
    z++;
    tonalt = tonaltabgleich;
   
   
  }
  if (digitalRead(play) == HIGH)
  {for(i = 0; i <= y; i++){
   
  
    tone(buzz, tonab[i]);
    delay(longab[i]);
    Serial.println(longab[i]);
    delay(25);
   
    noTone(buzz);
  }
  }

}

 

Erstellt: Sebastian Grüttner (29.06.2017) Letzte Änderung: Sebastian Grüttner (29.06.2017)