Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Regentropfen-Jagd: Ein einfaches Arduino-Spiel

Posted on 23. August 20246. Januar 2025 by Stefan Draeger

Wie du das kleine Spiel „Fange den Regentropfen“ am Arduino UNO R4 WiFi programmierst, zeige ich dir hier in diesem neuen Beitrag. Die Idee zu dem Spiel kommt von einem Makerspace, welche dieses für den Calliope Mini umgesetzt haben.

Regentropfen-Jagd: Ein einfaches Arduino-Spiel
Dieses Video auf YouTube ansehen.

Um das Spiel aufzubauen, brauchst du neben dem Arduino UNO R4 WiFi noch zwei Taster. Falls du das Arduino Plug and Make Kit besitzt, kannst du das Spiel auch damit umsetzen. Ich werde dir beide Optionen vorstellen, damit du das Projekt unabhängig davon, ob du das Kit hast oder nicht, nachbauen kannst.

Inhaltsverzeichnis

  • Benötigte Ressourcen für dieses Projekt
  • Aufbau der kleinen Schaltung mit dem Arduino Plug and Make Kit
  • Programmieren des Spieles in der Arduino IDE
  • Alternativer Aufbau & Programmierung mit Taster am Arduino
    • Aufbau der Schaltung
      • Prüfen der Schaltung mit einem kleinen Programm
    • Programmieren in der Arduino IDE

Benötigte Ressourcen für dieses Projekt

Das kleine Projekt am Arduino benötigt nicht viele Bauteile:

  • einen Arduino UNO R4 WiFi,
  • ein USB-Typ-C Datenkabel,
  • ein Modulino Buttonshield,
  • ein Modulino Buzzer,
  • ein Qwiic Kabel
Bauteile - "Fang den Regentropfen" am Arduino Plug and Make Kit
Bauteile – „Fang den Regentropfen“ am Arduino Plug and Make Kit

Alternativ kannst du das kleine Spiel auch mit zwei Taster aufbauen und programmieren, dann benötigst du:

  • zwei Taster*,
  • zwei 10 kOhm Widerstände*,
  • ein Piezo Buzzer*,
  • diverse Breadboardkabel*,
  • ein 400 Pin Breadboard*

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Aufbau der kleinen Schaltung mit dem Arduino Plug and Make Kit

Der leichteste Weg, das Spiel aufzubauen, gelingt mit dem Arduino Plug and Make Kit, da es bereits alle benötigten Komponenten enthält. Zwar ist das Kit nicht ganz billig, aber es bietet die Möglichkeit, viele weitere Projekte und Spiele zu realisieren. Aus meiner Sicht lohnt sich die Investition daher definitiv.

Für dieses kleine Spiel müssen wir lediglich das Button Modulino Shield mit einem Qwiic Kabel mit dem Mikrocontroller verbinden. Mit den Schrauben wird das kleine Modul auf der Modulino Base geschraubt und somit sind wir auch schon fertig mit dem Aufbau.

Das Qwiic Kabel hat eine bestimmte Form, sodass dieses nur in eine bestimmte Richtung in die Buchse gesteckt werden kann, sollte es also etwas schwierig gehen, so prüfe dieses zunächst.

Programmieren des Spieles in der Arduino IDE

Für das Programmieren des Spieles verwende ich wie in den Beiträgen zuvor die Arduino IDE. Hier musst du so weit noch nicht geschehen, den Boardtreiber für den UNO R4 und die Bibliothek für die Modulinos installieren.

Für die LED Matrix benötigen wir noch zusätzlich eine Bibliothek, welche ebenso über den Bibliotheksverwalter samt Abhängigkeiten installieren.

Das kleine, fertige Spiel kannst du dir nachfolgend als ZIP-Datei herunterladen.

Spiel – „Fang den Regentropfen“ mit dem Arduino Plug and Make KitHerunterladen
//Bibliothek zum steuern der LED Matrix
#include "Arduino_LED_Matrix.h"
//Bibliothek zum Kommunizieren mit den Modulinos
#include <Modulino.h>
//einbinden der externen Datei animation.h
//diese Datei enthält die Smileys für die
//LED Matrix
#include "animation.h"

//Mehrdimensionales Array welches die LED Matrix
//wiederspiegelt.
uint8_t grid[8][12] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};

//Objektinstanzen
ArduinoLEDMatrix matrix;
ModulinoButtons buttons;
ModulinoBuzzer buzzer;

//Index der Tasten A & C
const int BUTTON_A = 0;
const int BUTTON_C = 2;

//Felder zum speichern der Koordinaten
//eines Regentropfen
int raindropXPos = 0;
int raindropYPos = 0;

//Felder zum speichern der Koordinaten
//der Leiste zum fangen des Regentropfen
//die XPos ist fest und könnte ebenso als
//Konstante gesetzt werden
int barXPos = 7;
int barYPos = 6;

//Geschwindigkeit der Regentropfen
//bzw. Pause zwischen den Wechsel der LEDs
const int DEFAULT_SPEED = 400;
int speed = DEFAULT_SPEED;

//Frequenzen für die Töne
const int FREQ_TICK = 400;
const int FREQ_BAR_MOVE = 200;

//Feld zum speichern der letzten Ausführung
//des Wechsels der LED
long lastAction = -1;

//Die Funktion setup wird beim starten und neustarten ausgeführt.
void setup() {
  //beginn mit der Kommunikation mit der LED Matrix
  matrix.begin();
  //beginn der Kommunikation mit den Modulinos
  Modulino.begin();
  buzzer.begin();
  buttons.begin();
  //die kleinen SMD LEDs an den Tastern A & C
  //aktivieren
  buttons.setLeds(true, false, true);
  //eine Zufallszahl generieren und dem Feld zuweisen
  raindropYPos = generateRandomNumber();
  //aktivieren der Leiste zum fangen des Regentropfens
  grid[barXPos][barYPos] = 1;
}

//Funktion zum bewegen eines Regentropfens
void moveRaindrop() {
  //am Buzzer einen Ton für 75ms. ausgeben
  buzzer.tone(FREQ_TICK, 75);
  //Wenn die X-Koordinate größer 0 ist dann den
  //letzten tropfen löschen
  if (raindropXPos > 0) {
    grid[raindropXPos - 1][raindropYPos] = 0;
  }
  //aktivieren der LED an der neuen Koordinate
  grid[raindropXPos][raindropYPos] = 1;
  //absenden des Arrays und anzeigen der LEDs
  matrix.renderBitmap(grid, 8, 12);
  //Wenn die X-Koordinate gleich sieben ist,
  //dann ist die Runde zuende
  if (raindropXPos == 7) {
    //prüfen ob die Y-Position der Leiste mit
    //der Y-Position des Regentropfens übereinstimmt
    if (raindropYPos == barYPos) {
      //anzeigen eines glücklichen Smileys
      matrix.loadFrame(happy);
      //Geschwindigkeit erhöhen
      speed -= 25;
    } else {
      //Wenn die Koordinaten nicht übereinstimmen, dann...
      //anzeigen eines traurigen Smileys
      matrix.loadFrame(sad);
      //zurücksetzen der Geschwindigkeit
      speed = DEFAULT_SPEED;
    }
    //eine Pause von 600ms.
    delay(600);
    //Zurücksetzen der Felder
    grid[raindropXPos][raindropYPos] = 0;
    grid[barXPos][barYPos] = 1;
    raindropXPos = 0;
    //erzeugen einer neuen Zufallszahl
    raindropYPos = generateRandomNumber();
    //anzeigen der LEDs
    matrix.renderBitmap(grid, 8, 12);
  }
}

//Funktion zum erzeugen einer Zufallszahl
//zwischen 0 und 7
int generateRandomNumber() {
  randomSeed(analogRead(0));
  return random(8);
}

//Die Funktion loop wird dauerhaft ausgeführt, bis
//der Mikrocontroller keine Strom mehr hat, oder
//auf einen Fehler trifft.
void loop() {
  //auslesen der vergangenen Millisekunden seit dem Starten
  //des Mikrocontrollers
  long currentMillis = millis();
  //prüfen ob eine Ausführung erfolgen soll
  if (currentMillis > (lastAction + speed)) {
    //speichern des Zeitpunkts der neuen Ausführung
    lastAction = currentMillis;
    //die X-Koordinate des Regentropfens um eins erhöhen
    raindropXPos += 1;
    //Funktion zum bewegen des Regentropfens ausführen
    moveRaindrop();
  }

  //Aktualisieren des Buttons Objektes
  if (buttons.update()) {
    //Feld zum speichern ob eine Taste betätigt wurde
    bool btnPress = false;
    //Wenn der Taster A gedrückt wurde, dann...
    if (buttons.isPressed(BUTTON_A)) {
      //die letzt Koordinate löschen / zurücksetzen
      grid[barXPos][barYPos] = 0;
      //Wenn die Y-Position größer 0 ist, dann..
      if (barYPos > 0) {
        //den Wert um eins verringern
        barYPos -= 1;
      }
      //Feld auf Wahr / True setzen
      btnPress = true;
    } else if (buttons.isPressed(BUTTON_C)) {
      //Wenn der Taster C gedrückt wurde, dann...
      //die letzt Koordinate löschen / zurücksetzen
      grid[barXPos][barYPos] = 0;
      //Wenn die Y-Position kleiner als 11 ist, dann...
      if (barYPos < 11) {
        //die Y-Position um eins erhöhen
        barYPos += 1;
      }
      //Feld auf Wahr / True setzen
      btnPress = true;
    }

    //Wenn ein Taster betätigt wurde, dann...
    if (btnPress) {
      //ausgeben eines Tones wenn die Taste betätigt wurde
      buzzer.tone(FREQ_BAR_MOVE, 75);
      //aktivieren der neuen Position im Array
      grid[barXPos][barYPos] = 1;
      //absenden der Daten und anzeigen der LEDs
      matrix.renderBitmap(grid, 8, 12);
    }
  }
}

Die beiden Smileys habe ich in die Datei animations.h ausgelagert, dieses wirkt lediglich das der eigentliche Quellcode nicht unnötig länger wird.

const uint32_t happy[] = {
		0x31831,
		0x80000404,
		0x42081f0,
		66
};

const uint32_t sad[] = {
		0x31831,
		0x80000001,
		0xf0208404,
		66
};

Alternativer Aufbau & Programmierung mit Taster am Arduino

Wenn du das Arduino Plug and Make Kit nicht hast, aber trotzdem das kleine Spiel nachbauen möchtest, dann zeige ich dir hier nun den Aufbau und die Programmierung mit einfachen Komponenten.

Aufbau der Schaltung

Die Schaltung am Arduino UNO R4 WiFi ist mit den beiden Tastern auch recht schnell erledigt. Du kannst diese entweder mit einem PullUp oder PullDown Widerstand anschließen, oder du lässt diesen ganz weg und schaltest den Taster via Code über den internen 10kOhm Widerstand von der MCU.

Schaltung - Arduino mit Taster & Buzzer
Schaltung – Arduino mit Taster & Buzzer

Der Piezo Buzzer muss an einen PWM Pin des Arduinos angeschlossen werden, diese sind am Board mit einer kleinen Welle / Tilde gekennzeichnet.

Prüfen der Schaltung mit einem kleinen Programm

Bevor wir in die Programmierung einsteigen, sollten wir prüfen, ob die Schaltung funktioniert und wir die Signale der Taster erfolgreich auswerten können. Dazu schreiben wir ein kleines Programm, welches die Status der Taster prüft und wenn einer betätigt ist, dieses auf der seriellen Schnittstelle ausgibt.

//Taster Links am digitalen Pin D3 angeschlossen
#define buttonLeft 3
//Taster Rechts am digitalen Pin D2 angeschlossen
#define buttonRight 2
//Buzzer am digitalen PWM Pin D5 angeschlossen
#define buzzer 5

void setup() {
  //beginn der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);
  //definieren das die Pins der Taster als Eingang dienen
  pinMode(buttonLeft, INPUT);
  pinMode(buttonRight, INPUT);
  //definieren das der Pin des Buzzers als Ausgang dient
  pinMode(buzzer, OUTPUT);
}

void loop() {
  //Wenn einer der Taster betätigt wird, dann
  //ist das Signal am digitalen Pin auf HIGH.

  //Wenn der Linke Taster betätigt wird, dann...
  if (digitalRead(buttonLeft) == HIGH) {
    Serial.println("Taster Links betätigt!");
    //ausgeben eines hellen Tones für 100ms.
    tone(buzzer, 600, 100);
  } else if (digitalRead(buttonRight) == HIGH) {
    //Wenn der Rechte Taster betätigt wird, dann...
    Serial.println("Taster Rechts betätigt!");
    //ausgeben eines tiefen Tones für 100ms.
    tone(buzzer, 300, 100);
  }
}

Im seriellen Monitor der Arduino IDE siehst du, dass mehrere Signale verarbeitet werden, obwohl wir nur einmal auf den Taster gedrückt haben, dieses nennt man prellen und kann recht einfach unterbunden werden.

Wie man einen Taster am Arduino entprellt habe ich dir im Beitrag Arduino Lektion 87: Taster entprellen ausführlich erläutert.

Programmieren in der Arduino IDE

Für die Programmierung in der Arduino IDE benötigen wir neben dem Boardtreiber für den UNO R4 WiFi und Bibliothek für die LED Matrix noch Bounce2. Über Bounce2 können wir recht einfach die verbundenen Taster entprellen.

Wie man einen Taster entprellt habe ich dir bereits im Beitrag Arduino Lektion 87: Taster entprellen ausführlich erläutert.

Nachfolgend der Link zum Download des fertiges Programmes als ZIP-Datei.

Programm – Arduino UNO R4 WiFi – Fang den RegentropfenHerunterladen
//Bibliothek zum steuern der LED Matrix
#include "Arduino_LED_Matrix.h"
//Bibliothek zum entprellen eines Tasters
#include <Bounce2.h>
//einbinden der externen Datei animation.h
//diese Datei enthält die Smileys für die
//LED Matrix
#include "animation.h"

//Taster Links am digitalen Pin D3 angeschlossen
#define buttonLeftPin 3
//Taster Rechts am digitalen Pin D2 angeschlossen
#define buttonRightPin 2
//Buzzer am digitalen PWM Pin D5 angeschlossen
#define buzzer 5

//Mehrdimensionales Array welches die LED Matrix
//wiederspiegelt.
uint8_t grid[8][12] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};

//Objektinstanz erstellen
ArduinoLEDMatrix matrix;

Bounce btnLeft = Bounce();
Bounce btnRight = Bounce();

//Index der Tasten A & C
const int BUTTON_A = 0;
const int BUTTON_C = 2;

//Felder zum speichern der Koordinaten
//eines Regentropfen
int raindropXPos = 0;
int raindropYPos = 0;

//Felder zum speichern der Koordinaten
//der Leiste zum fangen des Regentropfen
//die XPos ist fest und könnte ebenso als
//Konstante gesetzt werden
int barXPos = 7;
int barYPos = 6;

//Geschwindigkeit der Regentropfen
//bzw. Pause zwischen den Wechsel der LEDs
const int DEFAULT_SPEED = 400;
int speed = DEFAULT_SPEED;

//Frequenzen für die Töne
const int FREQ_TICK = 400;
const int FREQ_BAR_MOVE = 200;

//Feld zum speichern der letzten Ausführung
//des Wechsels der LED
long lastAction = -1;

//Die Funktion setup wird beim starten und neustarten ausgeführt.
void setup() {
  //beginn mit der Kommunikation mit der LED Matrix
  matrix.begin();
  //definieren das die Pins der Taster als Eingang dienen
  //und verbinden mit den Tasterobjekten
  btnLeft.attach(buttonLeftPin, INPUT);
  //Interval zum entprellen auf 5ms. setzen
  btnLeft.interval(5);
  btnRight.attach(buttonRightPin, INPUT);
  btnRight.interval(5);

  //definieren das der Pin des Buzzers als Ausgang dient
  pinMode(buzzer, OUTPUT);
  //eine Zufallszahl generieren und dem Feld zuweisen
  raindropYPos = generateRandomNumber();
  //aktivieren der Leiste zum fangen des Regentropfens
  grid[barXPos][barYPos] = 1;
}

//Funktion zum bewegen eines Regentropfens
void moveRaindrop() {
  //am Buzzer einen Ton für 75ms. ausgeben
  tone(buzzer, FREQ_TICK, 75);
  //Wenn die X-Koordinate größer 0 ist dann den
  //letzten tropfen löschen
  if (raindropXPos > 0) {
    grid[raindropXPos - 1][raindropYPos] = 0;
  }
  //aktivieren der LED an der neuen Koordinate
  grid[raindropXPos][raindropYPos] = 1;
  //absenden des Arrays und anzeigen der LEDs
  matrix.renderBitmap(grid, 8, 12);
  //Wenn die X-Koordinate gleich sieben ist,
  //dann ist die Runde zuende
  if (raindropXPos == 7) {
    //prüfen ob die Y-Position der Leiste mit
    //der Y-Position des Regentropfens übereinstimmt
    if (raindropYPos == barYPos) {
      //anzeigen eines glücklichen Smileys
      matrix.loadFrame(happy);
      //Geschwindigkeit erhöhen
      speed -= 25;
    } else {
      //Wenn die Koordinaten nicht übereinstimmen, dann...
      //anzeigen eines traurigen Smileys
      matrix.loadFrame(sad);
      //zurücksetzen der Geschwindigkeit
      speed = DEFAULT_SPEED;
    }
    //eine Pause von 600ms.
    delay(600);
    //Zurücksetzen der Felder
    grid[raindropXPos][raindropYPos] = 0;
    grid[barXPos][barYPos] = 1;
    raindropXPos = 0;
    //erzeugen einer neuen Zufallszahl
    raindropYPos = generateRandomNumber();
    //anzeigen der LEDs
    matrix.renderBitmap(grid, 8, 12);
  }
}

//Funktion zum erzeugen einer Zufallszahl
//zwischen 0 und 7
int generateRandomNumber() {
  randomSeed(analogRead(0));
  return random(8);
}

//Die Funktion loop wird dauerhaft ausgeführt, bis
//der Mikrocontroller keine Strom mehr hat, oder
//auf einen Fehler trifft.
void loop() {
  //auslesen der vergangenen Millisekunden seit dem Starten
  //des Mikrocontrollers
  long currentMillis = millis();
  //prüfen ob eine Ausführung erfolgen soll
  if (currentMillis > (lastAction + speed)) {
    //speichern des Zeitpunkts der neuen Ausführung
    lastAction = currentMillis;
    //die X-Koordinate des Regentropfens um eins erhöhen
    raindropXPos += 1;
    //Funktion zum bewegen des Regentropfens ausführen
    moveRaindrop();
  }

  //Aktualisieren der Button Objekte
  btnLeft.update();
  btnRight.update();

  //Feld zum speichern ob eine Taste betätigt wurde
  bool btnPress = false;
  //Wenn der Taster "Links" gedrückt wurde, dann...
  if (btnLeft.rose()) {
    //die letzt Koordinate löschen / zurücksetzen
    grid[barXPos][barYPos] = 0;
    //Wenn die Y-Position größer 0 ist, dann..
    if (barYPos > 0) {
      //den Wert um eins verringern
      barYPos -= 1;
    }
    //Feld auf Wahr / True setzen
    btnPress = true;
  } else if (btnRight.rose()) {
    //Wenn der Taster "Rechts" gedrückt wurde, dann...
    //die letzt Koordinate löschen / zurücksetzen
    grid[barXPos][barYPos] = 0;
    //Wenn die Y-Position kleiner als 11 ist, dann...
    if (barYPos < 11) {
      //die Y-Position um eins erhöhen
      barYPos += 1;
    }
    //Feld auf Wahr / True setzen
    btnPress = true;
  }

  //Wenn ein Taster betätigt wurde, dann...
  if (btnPress) {
    //ausgeben eines Tones wenn die Taste betätigt wurde
    tone(buzzer, FREQ_BAR_MOVE, 75);
    //aktivieren der neuen Position im Array
    grid[barXPos][barYPos] = 1;
    //absenden der Daten und anzeigen der LEDs
    matrix.renderBitmap(grid, 8, 12);
  }
}

1 thought on “Regentropfen-Jagd: Ein einfaches Arduino-Spiel”

  1. Pingback: Keyestudio Max Board: Der Arduino-Klon mit dem gewissen Extra - Technik Blog

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}