Tipps zu Code (RGBLed Controller)

Guten Abend

Ich bin vor ca. 3 Wochen auf den/das? Arduino gestossen und hatte zu diesem Zeitpunkt sehr wenig Ahnung von Elektronik und gar keine vom Programmieren.

Nun habe ich ein kleines Projekt beendet bei welchem man mit einem Potentiometer und drei Knöpfen eine RGB-Led kontrollieren kann, d.h. man kann mittels dem Drücken eines der Knöpfe den momentanen Wert des Potentiometers, welcher mit der map-Funktion zwischen 0 und 255 liegt, auf den jeweiligen PWM-Output übertragen.

Da ich darauf aus bin, den Code zu optimieren, jedoch beim Betrachten von Codes von Projekten Anderer nicht wirklich schlau wurde, möchte ich nun direkt auf meinen eigenen Code bezogen Ratschläge entgegen nehmen.

int button1 = 8;
boolean sure1;
int button2 = 9;
boolean sure2;
int button3 = 10;
boolean sure3;
int poti = A0;
int potwert;
int potens;
int ledgreen = 3;
int ledyellow = 5;
int ledred = 6;

void setup()
{
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
  pinMode(button3, INPUT);
  pinMode(ledgreen, OUTPUT);
  pinMode(ledyellow, OUTPUT);
  pinMode(ledred, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  if ( digitalRead(button1) == HIGH && sure1 == false)
  {
    Serial.print("Knopf 1 gedrueckt\n");
    sure1 = true;
  }
  else if (digitalRead(button1) == LOW && sure1 == true)
  {
    Serial.print("Knopf 1 nicht gedrueckt\n");
    sure1 = false;
  }
  
  if ( digitalRead(button2) == HIGH && sure2 == false)
  {
    Serial.print("Knopf 2 gedrueckt\n");
    sure2 = true;
  }
  else if (digitalRead(button2) == LOW && sure2 == true)
  {
    Serial.print("Knopf 2 nicht gedrueckt\n");
    sure2 = false;
  }
  
  if ( digitalRead(button3) == HIGH && sure3 == false)
  {
    Serial.print("Knopf 3 gedrueckt\n");
    sure3 = true;
  }
  else if (digitalRead(button3) == LOW && sure3 == true)
  {
    Serial.print("Knopf 3 nicht gedrueckt\n");
    sure3 = false;
  }
   
  potwert = analogRead(poti);
  int reset = constrain(potwert, 10, 920);
  int dinimami = map(reset, 10, 920, 0, 255);
  Serial.print(dinimami);
  Serial.print("\n");
  if (sure1 == true)
  {
    analogWrite(ledgreen, dinimami);
  }
  if (sure2 == true)
  {
    analogWrite(ledyellow, dinimami);
  }
  if (sure3 == true)
  {
    analogWrite(ledred, dinimami);
  }
  delay(20);
}

Die Hardware hab ich so installiert.

Danke jetzt schon für die Mühe.

mfG

bluebubble

Beschaltung Arduino.jpg

Sieht gut aus. :slight_smile:

Das einzige, was ich wirklich ändern würde, wäre, die Pin-Konstanten wie bei Konstanten üblich der Übersichtlichkeit halber in Großbuchstaben zu schreiben.

Und ich würde sie mit "#define" definieren und nicht als Variablen:

#define BUTTON1 8
#define BUTTON2 9
#define BUTTON3 10
#define LEDGREEN 3
#define LEDYELLOW 5
#define LEDRED 6
#define POTI A0

void setup()
{
  pinMode(BUTTON1, INPUT);
  pinMode(BUTTON2, INPUT);
  pinMode(BUTTON3, INPUT);
[...]

Dadurch wird nicht für jede Konstante zwei Bytes der kostbaren 1024 Bytes RAM verbraten sondern der Compiler setzt beim compilieren die Zahlen an die Stellen an denen der Platzhalter steht. (Also steht nachher im compilierten Programm an allen Stellen, an denen jetzt "BUTTON1" steht, die Zahl "8". Das aber dann im Flash und nicht im RAM. :))