pinMode Varianten

Programmierung der Arduino UNO, Arduino MEGA, Arduino Nano, ........
Antworten
Benutzeravatar
Admin
Administrator
Beiträge: 1196
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

pinMode Varianten

Beitrag von Admin »

Hallo Gemeinde.
Ich dachte ich gehe mal auf den Befehl "pinMode" ein. Er wird rel. oft gebraucht, weil man damit beschreibt, wie ein CPU Pin benutzt wird. Das ist also eigentlich in jedem Programm, bei dem man Verbindung nach Aussen hat, ein wichtiger Bestandteil.

In der Deklaration ganz oben im Programm gibt man dem Pin einen "Namen"
In dem Fall hier ist der Name "Eingang1" und der dafür benutzte Pin. ist "3"
Für diese Namen kann man alles benutzen was nicht auch ein Befehl in dieser Programmiersprache ist.
Ob es ein Eingang ist, oder ein Ausgang, bestimmt nicht der Name, sondern der angegebene pinMod.
Dieser ist "INPUT" oder "OUTPUT"
Das dürfte klar verständlich sein.
Und bei "INPUT" gibt es auch noch "INPUT_PULLUP"
Da wird es schon schwieriger, weil das in die Schaltungstechnik des Eingangs hinein geht.
"INPUT" ist ein sehr hochohmiger Eingang, dem man einen klaren Bezug über einen Widerstand geben MUSS. Wenn dieser Eingang über eine rel. Lange Leitung an den Pin kommt, wirkt diese Leitung wie eine Antenne für alle möglichen Elektrischen Felder, Magnetische Störfelder von Motoren, und sonstigen Mist, den man nicht braucht aber leider hat. Also gebe ich dem Eingang z.B. wenn Störungen zu erwarten sind, einen Niedrigen Widerstand, sagen wir 1000 Ohm, gegen Plus 5 Volt, also (VCC). Wenn ich jetzt ein Signal auf dieser Leitung zum Arduino auf seinen Pin. senden will, mache ich das mit einem Schalter, oder Taster; auf Minus also (GND). Das heißt, ist diese Taste nicht gedrückt habe ich den Plus über 1000 Ohm, ist aber der Taster gedrückt, überwiegt der Minus über den Taster. Der Plus spielt dann keine Rolle mehr.
Dieses Testen des Pin´s, ob der Taster gedrückt ist, passiert wie folgt:
if digitalRead(Eingang1; LOW)
{
"Aktion"
}
Das heißt, ich lese aus, ob der "Eingang1" auf "LOW" ist.
Ist das der Fall, wäre die Taste gedrückt.
Wenn das zutrifft, werden die Befehle, die anstelle des Wortes "Aktion" stehen, für dieses Einemal ausgeführt.
Wenn das nicht zutrifft, also die Taste nicht gedrückt ist, und somit am Pin nicht LOW ansteht, sonder HIGH, passiert das, was anstelle von dem Wort Aktion steht NICHT!!
Ich kann natürlich auch nur wissen wollen, ob die Taste NICHT gedrückt ist. Dann wäre die Passende Abfrage Zeile:
if digitalRead(Eingang1; HIGH)
{
"Aktion"
}
Wieder mit der Reaktion die man anstelle des Wortes "Aktion" einsetzt.

Dann ist noch ein Wichtiger Teil bei der Bewertung der anstehenden Signale am Pin, der Befehl:
pinMode(Eingang2, INPUT_PULLUP);
Hier ist das wichtige, dass da nicht nur "INPUT" steht, sondern "INPUT_PULLUP". Das ist ein Ersatz für den Widerstand gegen Plus 5 Volt, also gegen VCC. Wenn keine großen Störungen auf dem Eingang zu erwarten sind, weil der Pin. z.B. nur auf einen Taster oder Schalter geht, der sich direkt neben der CPU befindet, also nicht über eine lange Leitung aus dem Gerät heraus. Wenn ich diesen "INPUT_PULLUP" benutze, wird in der CPU ein 10kOhm Widerstand gegen Plus 5 Volt gleich in der CPU angelegt. Man spart sich also den externen Widerstand.

Hier ist mal ein kleiner MusterCode, der diese hier beschriebenen CodeTeile benutzt. Es gibt dazu noch einige Varianten. Aber die will ich jetzt hier nicht aufgreifen. Hier soll es ja nur um die Auswertung der beschaltenen Pin´s gehen.

Code: Alles auswählen

// Deklarationen
Eingang1 = 3;
Eingang2 = 4;
Ausgang1 = 5;

void setup()
{
pinMode(Eingang1, INPUT); 
pinMode(Eingang2, INPUT_PULLUP);
pinMode(Ausgang1, OUTPUT);
}
void loop()
{
if digitalRead(Eingang1; LOW)
{
digitalWrite(Ausgang1, HIGH);
delay(1000);
digitalWrite(Ausgang1, LOW);
delay(1000);
}

} // Loop Ende
Benutzeravatar
Admin
Administrator
Beiträge: 1196
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: pinMode Varianten

Beitrag von Admin »

Ich möchte die "if" Abfrage noch vervollständigen. Die Leute, die wissen dass es bei "if" auch noch "else" gibt, juckt es in den Fingern da was dazu zu schreiben. Ich wollte das nur nicht in den ProgrammCode oben mit reinschreiben, weil das schon wieder für etwas Unübersichtlichkeit sorgt.
Deshalb das jetzt mal extra.

Wenn man eine "if" Abfrage benutzt, kann man auch den Zweiten Teil dazu nutzen, also "else".
Das hat dann zur folge, dass ich wenn "if digitalRead(Eingang1; LOW)" war ist etwas ausführen kann, aber auch wenn das nicht war ist. Was ich ausführen will, wenn die "if" Abfrage nicht war ist, steht bei else in den spitzen Klammern. Also wieder anstelle von "Aktion".

Hier wieder die dann benutzte Befehlsfolge:

Code: Alles auswählen

if digitalRead(Eingang1; LOW)
{
digitalWrite(Ausgang1, HIGH);
delay(1000);
digitalWrite(Ausgang1, LOW);
delay(1000);
}
else
{
"Aktion"
}
Antworten

Zurück zu „Programmierung der 8Bit Controller“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste