Jetzt wollen wir natürlich mehr als nur einen TouchSensor betreiben können. Jetzt könnte man das bisherige Skript einfach immer wieder kopieren und zusammenfügen, das wird aber schnell unübersichtlich. Wir haben für dich ein kleines Skript geschrieben, dass das für dich etwas einfacher macht. Das kannst du so herunterladen:

wget cw42.de/p/TouchSensor.py

Die Datei muss in dem selben Ordner liegen, wie das Skript, dass wir gleich schreiben. Wenn du neugierig bist, kannst du dich ja mal in der Datei umsehen; vieles daraus, wird dir wahrscheinlich bekannt vorkommen. In dem Skript TouchSensor befindet sich eine Klasse TouchSensor. Was Klassen aber eigentlich sind; darauf gehen wir nachher noch etwas genauer ein.
Die Klasse müssen wir importieren, damit wir sie in unserem Skript nutzen können. Zusammen mit den anderen benötigten Bibliotheken, sieht das dann so aus:

from TouchSensor import TouchSensor
import RPi.GPIO as GPIO
import time

Außerdem müssen wir wieder den GPIO mode setzen:

GPIO.setmode(GPIO.BCM)

Kommen wir zum spannenden Teil. Da wir ja die Klasse TouchSensor importiert haben, könnwn wir diese jetzt nutzen um mehere TouchSensoren zu erstellen. Das machen wir indem wir den Constructor der Klasse aufrufen. In Python heißt dieser Constructor __init__. Das ist eine Methode, die beim aufrufen der Klasse ausgeführt wird und ein neues Objekt initialisiert. Dabei wird quasi eine Kopie von der Klasse erstellt und das was in der __init__-Methode steht ausgeführt. Mit Klassen kannst du noch einiges mehr machen, aber für das was wir jetzt vor haben, reicht das erstmal. Wichitg ist nur noch, dass wir beim Aufrufen einige Parameter vergeben müssen, damit die Klasse das richtige Objekt für uns erstellt: den Sende-Pin, den Empfänger-Pin und den Grenzwert. Genug Theorie – wenn wir das umsetzen, sieht das zum Beispiel so aus:
TouchSensor(27, 17, limit=0.00145)

Allerdings gibt es noch mehr Parameter, die du aber nicht zwingend setzen musst: on_touch und on_release. Das sind beides Funktionen die wir übergeben können. on_touch wird ausgeführt, wenn der Sensor berührt wurde und on_release wird ausgeführt, wenn der Sensor wieder losgelassen wird. Wir können eine Funktion wie wir das schon kennen mit def funktions_name (sensor): erstellen. Wenn wir eine Funktion so definiert haben, könnten wir die z.B. so an den TouchSensor übergeben:

TouchSensor(
  27, 17,
  limit=0.00145,
  on_touch=funktoins_name
)

Da wir die Funktion allerdings nur einmal benötigen, gibt es auch einen Trick, wie man das direkt beim Aufrufen des Constructers machen kann: Lambdas – Das sind kleine Code-Schnipsel, die wir direkt einbetten können ohne sie vorher definiert haben zu müssen. Trotzdem können wir im Lambda auf die Parameter zugreifen, die übergeben werden. Das sieht dann z.B. so aus:

TouchSensor(27, 17,
  limit=0.00145,
  on_touch=lambda sensor:
    print('Sensor wurde berührt'),
  on_release=lambda sensor:
    print('Sensor wurde losgelassen')
)

Das sieht zwar schick aus, aber eigentlich machen wir uns den Aufwand ja, weil wir mehr als nur einen Sensor benutzen wollten. Damit später nachher einfach durch alle Sensoren druch-iterieren können (so nennt man das, wenn man das, wenn man mehrmals den gleichen Ablauf für ein anderes Objekt ausführt), speichern wir alle Sensoren in einem Array, welches du später anpassen und alle Konfigurationen machen kannst:

sensors = [
  TouchSensor(19, 26, limit=0.00145),
  TouchSensor(
    27, 17,
    limit=0.00145,
    on_touch=lambda sensor:
      print('Sensor 2 berührt'),
    on_release=lambda sensor:
      print('Sensor2 losgelassen')
  )
]

In diesem Array kannst du beliebig viele Sensoren speichern, beachte aber, dass dadurch später auch die Gesamt-Verzögerung aller Messungen zusammen steigt.

Jetzt müssen wir nur noch die Loop-Methoden der Sensoren ausführen. Diese führen dann für uns dann die Messungen und Berechnungen durch und führen bei Bedarf dann on_touch oder on_release aus. Das ganze machen wir in einem try-Block, um die Pinbelegung beim abbrechen des Skripts wieder zu stoppen:

try:
  while True:
    for sensor in sensors:
      sensor.loop()
    time.sleep(0.001)

except KeyboardInterrupt:
  GPIO.cleanup()

Die For-Schleife wird für jeden Eintrag in dem Array ausgeführt. Die Variable sensor nimmt dabei immer den Wert eines Eintrags aus dem Array an, also der Sensor. Von jedem Sensor, wird dann in der For-Schleife die loop()-Methode ausgeführt, welche für uns die Messungen durchführt.

Das fertige Skript sollte in etwa so aussehen:

from TouchSensor import TouchSensor
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

sensors = [
  TouchSensor(19, 26, 1.0),
  TouchSensor(
    27, 17,
    limit=1.0,
    on_touch=lambda sensor:
      print('Sensor 1 berührt'),
    on_release=lambda sensor:
      print('Sensor1 losgelassen')
  )
]

try:
  while True:
    for sensor in sensors:
      sensor.loop()
    time.sleep(0.001)

except KeyboardInterrupt:
  GPIO.cleanup()