Ich habe hier mal ein Programm, zum Thema "Funktionen"

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:

Ich habe hier mal ein Programm, zum Thema "Funktionen"

Beitrag von Admin »

Beide Programme machen das selbe.
Das Erste ist Sinnvoller, oder Profesioneller als das Zweite.
Das Zweite ist aber für Anfänger viel besser zu verstehen.

Das Programm hat drei verschiedene Funkitonen. Im ersten Programm sind diese drei Funktionen als einzelne Programm-LOOP´s geschrieben. Und sie werden dann im eigentlichen LOOP der Hauptteiles nur der Reihe nach aufgerufen. Dieser HauptLoop, wird ja laufend von oben nach unten abgearbeitet. Kaum unten angekommen, geht es wieder oben los. Nur was im HauptLoop aufgerufen wird, wird auch abgearbeitet. Also im HauptLoop wird entschieden welche Funktionen, in welcher Reihenfolge an der Reihe ist. Natürlich kann man trotzdem auch im HauptLoop noch andere Dinge bearbeiten, die in keiner eigenen Funktion stehen. Also ich kann auch über if Abfragen noch entscheiden, ob eine Funktion aufgerufen wird. Also z.B. >

Code: Alles auswählen

void loop()
{
  if (WertA == 100) 
  { 
    getPoti(); 
  }
}

oder eben einfach alle drei Funktionen der Reihe nach aufrufen >

Code: Alles auswählen

 
 void loop()
{
  getPoti();
  getVoltage();
  getLumi();
}
Das hat zur Folge, dass der HauptLoop sehr übersichtlich wird, weil nur noch die Namen der "Funktionen" der Reihe nach aufgerufen werden. Im zweiten Programm gibt es diese einzelnen Funktionen nicht, sonder alles, was ausgeführt wird, steht im HauptLoop.

Ich schreibe die nächsten Tage mehr zu dem Unterschied. Heute ist es mir zu spät.

Hier das profesionellere Programm:

Code: Alles auswählen

const byte potiPin = A0;
const byte voltagePin = A1;
const byte lumiPin = A2;
const byte pwmOutPin = 5;
const byte voltageRelaisOutPin = 4;
const byte lumiRelaisOutPin = 6;

void setup()
{
  pinMode(voltageRelaisOutPin, OUTPUT);
  pinMode(lumiRelaisOutPin, OUTPUT);
}

void loop()
{
  getPoti();
  getVoltage();
  getLumi();
}

void getPoti()
{
  if (analogRead(potiPin) >= 1023)
    digitalWrite(pwmOutPin, HIGH);
  else if (analogRead(potiPin) <= 1)
    digitalWrite(pwmOutPin, LOW);
  else
    analogWrite(pwmOutPin, (analogRead(potiPin) / 4));
}

void getVoltage()
{
  if (analogRead(voltagePin) > 500)
    digitalWrite(voltageRelaisOutPin, HIGH);
  if (analogRead(voltagePin) < 450)
    digitalWrite(voltageRelaisOutPin, LOW);
}

void getLumi()
{
  if (analogRead(lumiPin) > 500)
    digitalWrite(lumiRelaisOutPin, HIGH);
  if (analogRead(lumiPin) < 450)
    digitalWrite(lumiRelaisOutPin, LOW);
}
Hier das zweite Programm, das das selbe macht, aber für Anfänger leichter Verständlich ist:
Und es hat ein paar zusätzliche Erklärungen drinn.

Code: Alles auswählen

const byte potiPin = A0;
const byte voltagePin = A1;
const byte lumiPin = A2;
const byte pwmOutPin = 5;
const byte voltageRelaisOutPin = 4;
const byte lumiRelaisOutPin = 6;

void setup()
{
  pinMode(voltageRelaisOutPin, OUTPUT);
  pinMode(lumiRelaisOutPin, OUTPUT);
  //Diese Imputs braucht man nicht wirklich,
  //weil Analog Pins automatisch inputs sind.
  //man kann sie so schreiben, aber auch weg lassen.
  pinMode(potiPin, INPUT);
  pinMode(voltagePin, INPUT);
  pinMode(lumiPin; INPUT);
}
void loop()
{
  // Vom Analog Pin kommt der Wert 0 bis 1023 für 0 - 5 Volt vom Poti
  analogWrite(pwmOutPin, (analogRead(potiPin) / 4));

  //==================================================
  // 0 - 5 Volt am Eingang ist wieder der Auslesewert 0 - 1023
  if (analogRead(voltagePin) > 500)
  {
    digitalWrite(voltageRelaisOutPin, HIGH);
  }
  if (analogRead(voltagePin) < 450)
  {
    digitalWrite(voltageRelaisOutPin, LOW);
  }
  //==================================================
  // 0 - 5 Volt am Eingang ist wieder der Auslesewert 0 - 1023
  if (analogRead(lumiPin) > 500)
  {
    digitalWrite(lumiRelaisOutPin, HIGH);
  }
  if (analogRead(lumiPin) < 450)
  {
    digitalWrite(lumiRelaisOutPin, LOW);
  }
}
Antworten

Zurück zu „Programmierung der 8Bit Controller“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast