Bastelseite Display + Antriebe Sensoren C++ | |
Nachdem die Hürde mit der Auswahl des Potis genommen ist, wenden wir uns einer interessanten Aufgabe mit dem Poti zu.
Der Poti wird als Regler von Null bix Maximum eingesetzt. Die Anschlüsse sind wie folgt: linker Anschlag = Null = GND/Masse und rechter Anschlag = maximal = +5Volt. Die regelbare Mittenanzapfung des Potis führt an den Analogen Eingang "A1".
Der Poti läßt sich nun von links (Null) bis ganz nach rechts (Maximum) regeln.
Bei aktiviertem Seriellen Monitor kann man den fortlaufenden Wert gut beobachten.
Die Variable "potiwert" reicht von 0 bis 1023. Über die Funktion "map" wird diese einfach umgerechnet und an die Variable "ausgabe" übergeben.
"ausgabe" reicht nun von 0 bis 255 und ist somit ideal für eine Verwendung als PWM-Signal.
Sketch-Download im neuen TAB : poti-lesen-2a.ino
/* poti-lesen-2a.ino * * Auslesen eines Potentiometers mit 470 kOhm * am analogen Eingang A1 */ #include <Wire.h> int potianschluss = A1; int potiwert = 0; int ausgabe = 0; void setup() { Serial.begin(9600); Serial.println(" Auslesen eines Potis: "); Serial.println("=========================="); delay(2000); } void loop() { Serial.println("--------------------------"); potiwert = analogRead(potianschluss); //ausgabe = potiwert / 4; // oder folgende Zeile verwenden: ausgabe = map(potiwert, 0, 1023, 0, 255); Serial.print("Poti: "); Serial.print(potiwert); Serial.print(" - Ausgabe: "); Serial.println(ausgabe); delay(500); // kurze Pause zum Datenverarbeiten }
Drehen Sie mal am Poti! Der linke Wert ist "potiwert" und reicht von 0 bis 1023.
"ausgabe" geht maximal bis 255.
Auslesen eines Potis: ========================== -------------------------- Poti: 0 Ausgabe: 0 -------------------------- Poti: 0 Ausgabe: 0 -------------------------- Poti: 224 Ausgabe: 55 -------------------------- Poti: 331 Ausgabe: 82 -------------------------- Poti: 407 Ausgabe: 101 -------------------------- Poti: 503 Ausgabe: 125 -------------------------- Poti: 655 Ausgabe: 163 -------------------------- Poti: 851 Ausgabe: 212 -------------------------- Poti: 1023 Ausgabe: 255 -------------------------- ....
Wir verwenden einen ganz normalen Poti. Dieser wird als Regler von Null bix Maximum eingesetzt. Die Anschlüsse sind wie folgt: linker Anschlag = Null = GND/Masse und rechter Anschlag = maximal = +5Volt. Die regelbare Mittenanzapfung des Potis führt an den Analogen Eingang "A1".
Die sogenannte "Mittelstellung" wird nur durch die Programmierung erreicht.
Drehen Sie mal am Poti! Der linke Wert ist "potiwert" und reicht von 0 bis 1023.
Die Variable "ausgabe" geht dieses Mal von -255 bis (+)255.
Sketch-Download im neuen TAB : poti-lesen-2b.ino
/* poti-lesen-2b.ino * * Auslesen eines Potentiometers mit 470 kOhm * am analogen Eingang A1 */ #include <Wire.h> int potianschluss = A1; int potiwert = 0; int ausgabe = 0; void setup() { Serial.begin(9600); Serial.println(" Auslesen eines Potis: "); Serial.println("=========================="); delay(2000); } void loop() { Serial.println("--------------------------"); potiwert = analogRead(potianschluss); ausgabe = map(potiwert, 0, 1023, -255, 255); if ((ausgabe <= 5) && (ausgabe >= -5)) { ausgabe =0; Serial.println("Ausgabe steht auf Null! "); } Serial.print("Poti: "); Serial.print(potiwert); Serial.print(" Ausgabe: "); Serial.println(ausgabe); delay(500); // kurze Pause zum Datenverarbeiten }
Wie vorhin auch, wurde der Poti an der linken Außenseite an Minus (GND) und die rechte Seite an + 5Volt angeschlossen. Der mittlere Anschluß gehtg an den analogen Eingang A1.
Nun folgt das Interessante am Sketch:
Die Zeile
ausgabe = map(potiwert, 0, 1023, -255, 255);
läßt nun den Ausgabewert von -255 bis 0 und von 0 nach (+)255 laufen! Die Funktion "map" geht auch mit negativen Werten!
Potiwert 0 bis 511 entspricht der Ausgabe von -255 bis 0.
Die Hälfte vom Potiwert (512) ist gleich 0 vom Ausgabewert.
Vom Potiwert 513 bis 1023 trifft dann dies auf den Ausgabewert von 0 bis 255 zu.
Ein kleiner Trick noch:
if ((ausgabe <= 5) && (ausgabe >= -5)) {
ausgabe =0;
Serial.println("Ausgabe steht auf Null! ");
}
Hiermit wird der "Nullpunkt" vom Poti auf +-5 gesetzt. Daurch ist die Einstellung von "0" am Poti vereinfacht. Glauben Sie nicht? Löschen Sie mal diese Zeilen und versuchen dann das Poti auf "0" = Mittelstellung zu drehen.....
Noch eine kleine Hilfe:
if ((ausgabe <= 5) && (ausgabe >= -5))
bedeutet:
wenn((ausgabe kleiner oder gleich +5) und (ausgabe größer oder gleich -5))
Nein, dies ist kein Fehler: &&! Es sind tatsächlich zwei und-Zeichen, die die Bedeutung UND symbolisieren!
Auslesen eines Potis: ========================== -------------------------- Poti: 0 Ausgabe: -255 -------------------------- Poti: 43 Ausgabe: -234 -------------------------- Poti: 135 Ausgabe: -188 -------------------------- Poti: 283 Ausgabe: -114 -------------------------- Poti: 415 Ausgabe: -49 -------------------------- Poti: 616 Ausgabe: 52 -------------------------- Poti: 652 Ausgabe: 70 -------------------------- Poti: 795 Ausgabe: 141 -------------------------- Poti: 994 Ausgabe: 240 -------------------------- Poti: 1023 Ausgabe: 255 -------------------------- Poti: 838 Ausgabe: 162 -------------------------- Poti: 706 Ausgabe: 96 -------------------------- Poti: 642 Ausgabe: 65 -------------------------- Poti: 580 Ausgabe: 34 -------------------------- Poti: 497 Ausgabe: -8 -------------------------- Poti: 449 Ausgabe: -32 -------------------------- Poti: 495 Ausgabe: -9 -------------------------- Ausgabe steht auf Null! Poti: 502 Ausgabe: 0 -------------------------- Ausgabe steht auf Null! Poti: 519 Ausgabe: 0 -------------------------- Ausgabe steht auf Null! Poti: 520 Ausgabe: 0 -------------------------- Ausgabe steht auf Null! Poti: 519 Ausgabe: 0 -------------------------- .....
Im vorhergehenden 2. Versuch ließ sich der einfache Poti mit einer Mittelstellung programmieren. Leider ist dies nicht jedermanns Sache, wenn auf einmal negative Werte erscheinen! Also auf zum 3. Versuch: mit Mittelstellung und 2 positiven Werten! Der Aufbau bleibt gleich.
Der Poti läßt sich nun von links (Maximum) bis zur Mitte auf "0" regeln.
Von "0" aus nach rechts ebenso wieder bis zum Maximum.
Alle Werte sind nun positiv.
Zur Unterscheidung gibt es zwei verschiedene Variablen: ausgabe1 (rechts) und ausgabe2 (links).
So können 2 verschiedene Ausgänge am Arduino über PWM geregelt werden.
Die Verbreiterung vom "Nullpunkt" ist geblieben.
Neu: "if (ausgabe >= 1)" ist einfach zu verstehen: ist die Ausgabe größer "1", so verzweigt der Sketch zu "ausgabe1".
"else" = ansonsten muss der Wert kleiner sein, also erfolgt eine Umleitung zu "ausgabe2". Diese würde auch wieder negative Werte hervorbringen.
"ausgabe2 = ausgabe*-1;" löst unser Problem. Der negative wert von "ausgabe" multipliziert mit "-1" ergibt unsere positiven Zahlenwerte in "ausgabe2"!
Sketch-Download im neuen TAB : poti-lesen-2c.ino
/* poti-lesen-2c.ino * * Auslesen eines Potentiometers mit 470 kOhm * am analogen Eingang A1 */ #include <Wire.h> int potianschluss = A1; int potiwert = 0; int ausgabe, ausgabe1, ausgabe2 = 0; void setup() { Serial.begin(9600); Serial.println(" Auslesen eines Potis: "); Serial.println("=========================="); delay(2000); } void loop() { Serial.println("--------------------------"); potiwert = analogRead(potianschluss); ausgabe = map(potiwert, 0, 1023, -255, 255); if ((ausgabe <= 5) && (ausgabe >= -5)) { ausgabe = 0; Serial.println("Ausgabe steht auf Null! "); } Serial.print("Poti: "); Serial.print(potiwert); if (ausgabe >= 1) { ausgabe1 = ausgabe; Serial.print(" Ausgabe 1: "); Serial.println(ausgabe1); } else { ausgabe2 = ausgabe*-1; Serial.print(" Ausgabe 2: "); Serial.println(ausgabe2); } delay(500); // kurze Pause zum Datenverarbeiten }
Interessant ist es, auch einmal genau die Umschaltung von Ausgabe1 zu Ausgabe2 zu beobachten..
Auslesen eines Potis: ========================== -------------------------- Poti: 0 Ausgabe 2: 255 -------------------------- Poti: 21 Ausgabe 2: 245 -------------------------- Poti: 132 Ausgabe 2: 190 -------------------------- Poti: 254 Ausgabe 2: 129 -------------------------- Poti: 365 Ausgabe 2: 74 -------------------------- Ausgabe steht auf Null! Poti: 513 Ausgabe 1: 0 -------------------------- Poti: 547 Ausgabe 1: 17 -------------------------- Poti: 711 Ausgabe 1: 99 -------------------------- Poti: 838 Ausgabe 1: 162 -------------------------- Poti: 1023 Ausgabe 1: 255 -------------------------- ....