_19_encoder

Funktioniert wie ein Potentiometer, ermöglicht aber uneingeschränktes Drehen in beide Richtungen.

/*
 * Encoder
 * Ein Encoder ist ein Drehknopf, der uneingeschraenkt gedreht werden
 * kann und das Arduino ueber einen jeden Schritt informiert.
 * In der Variable count steht immer die aktuelle Position des Encoders.
 * Bei einer Drehung um einen Schritt nach links wird 1 auf count addiert,
 * bei einer Rechtsdrehung wird 1 subtrahiert.
 * Zusaetzlich kann man den Drehknopf auch herunterdruecken, weil ein
 * Standard-Button integriert ist.
 */

int encoderPinL = 4;                    // linker Pin am Encoder
int encoderPinR = 3;                    // rechter Pin am Encoder

int buttonPin = 7;                      // Pin fuer den Button

// variables for encoder/button (please don't touch)
int state, prevstate = 0, count = 0;
int nextEncoderState[4] = {
  2, 0, 3, 1 };
int prevEncoderState[4] = {
  1, 3, 0, 2 };
int buttonValue = 0;

void setup() {
  pinMode(encoderPinL, INPUT);
  pinMode(encoderPinR, INPUT);
  digitalWrite(encoderPinR, HIGH);
  digitalWrite(encoderPinL, HIGH);
  pinMode(buttonPin, INPUT);

  Serial.begin(9600);                   // initialize serial interface
} 

void loop() {
  // Drehknopf abfragen
  state = (digitalRead(encoderPinL) << 1) | digitalRead(encoderPinR);
  if (state != prevstate) {
    if (state == nextEncoderState[prevstate]) count++;
    else if (state == prevEncoderState[prevstate]) count--;
    Serial.println(count, DEC);        // Drehknopfwert im Serial Monitor ausgeben
    prevstate = state;
  } 

  // Button abfragen
  buttonValue = digitalRead(buttonPin);
  if (buttonValue == HIGH) Serial.println("gedrueckt"); // wenn Button gedrueckt, "gedrueckt" im Serial Monitor ausgeben
}

Dieses Beispiel herunterladen

Aktuelle Beiträge

Servos – alternative Bewegungsbeispiele

Unter diesem Link gibt es eine zip-Datei mit verschiedenen Bewegungsarten für Servo-Motoren. Hier eine kurze Beschreibung der einzelnen Beispiele:

  • completelyRandom: Nach zufällig ausgewählten Zeitabschnitten denkt sich das Programm neue Zufalls-Zielpositionen und -Geschwindigkeiten für den Servo aus.
  • servoChameleon: Der Servo bewegt sich ein Stück in eine Richtung und dann ein etwas kleineres Stück wieder zurück, dann wieder hin, usw. Wenn er an einer Seite angekommen ist, läuft das ganze rückwärts.
  • sinMovement: Servo bewegt sich wie von Sinus-Kurven bekannt, dh. er beginnt langsam an einer Seite, wird auf seinem Weg zur Mittelposition schneller und dann wieder langsamer, je näher er der anderen Seite kommt. Dann geschieht das Selbe rückwärts.
  • slowlyGettingFaster: Wie sinMovement, nur wird der Servo gegen Ende einer Bewegung nicht langsamer.
  • tickBackAndForth: Servo “tickt” von links nach rechts und wieder zurück, dh. er macht immer nur kleine Schritte wie ein Uhrzeiger.
  • verySlow: Servo bewegt sich sehr langsam von links nach rechts und wieder zurück. Weil Servos nur ganze Zahlen von 0-180 entgegennehmen, gibt es auch hier ein “Ticken”. Eine komplett weiche Bewegung ist leider mit Standard-Servos unmöglich.

Viel Spaß beim Tüfteln!

Marius

Veröffentlicht in Labor
  1. .ino! Kommentare deaktiviert
  2. Überarbeitung der Beispiele Kommentare deaktiviert
  3. Experience Design im Sommersemester 11 Kommentare deaktiviert
  4. Physical Computing I & II Kommentare deaktiviert