Poti auslesen (von A1)


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.



1.) Ein Poti als Regelung


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".

Poti am A1 Eingang



Erster Versuch:

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 

Kurzer Sketch für Poti an A1:

  
  
/*  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
}




Serieller Monitor:

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
--------------------------
....



2.) Poti mit Mittelstellung = 0 an A1


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.



Poti am A1 Eingang



Der neue Sketch Mittelwert:

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
}




Zweiter Versuch:

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!

Serieller Monitor:


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
--------------------------
.....


 

3.) Poti mit Mittelstellung = 0 mit 2 x positiven Werten an A1


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.

Poti am A1 Eingang



Dritter Versuch:

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 

Hier der Sketch für Poti an A1:

  
  
/*  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
}




Serieller Monitor:

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
--------------------------
....




Übersicht Seiten Anfang


brixelweb.de