ändern von read-only variablen ?

Hallo in die Runde,

ich habe den Titel hoffentlich zu meinen Problem passend formuliert...

Ich tue mir etwas schwer mit Sprachen- ich hab das logische Denken, um ewig lange Programmierungen zu schreiben, aber wie ich alles richtig "formuliere" ist was anderes...

Aktuell habe ich ein Problem mit einem TFT- das Programm läuft gut- so gut, dass ich mir über verschiedene Designs Gedanken machen kann.
Nun habe ich Zeilen, die z.b. einer Schrift eine bestimmte Farbe geben- z.b. so eine hier:

tft.setTextColor(RA8875_YELLOW);

Nun möchte ich aber gern "RA8875_YELLOW" mit einer Variablen ersetzen, die ich in meinem Programm ändern kann. Wie ich eine Variable als "Platzhalter" nehme, um dann via #define Variable RA8875_YELLOW die Farbe zu setzen weiß ich... aber wie änder ich es im Programm?

#define Variable RA8875_YELLOW

Das ist das Gegenteil einer Variablen

Ja, ich will ja eine Variable als Platzhalter nehmen, um dann die Farbe einzusetzen, die ich dann gern hätte :slight_smile:

Datentype farbe = RA8875_YELLOW;

tft.setTextColor(farbe);

// tuwas mit gelb

 farbe = RA8875_green;

tft.setTextColor(farbe);

// tuwas mit grün

Ich habe KA, was die Farbe für ein Datentype ist...(kenne die Lib nicht)
Also bitte das richtige einsetzen.
Ebenso habe ich KA, ob es RA8875_green gibt...
Also bitte das richtige einsetzen.

Hallo,

ich würde das Programm erstmal mit "suchen" nach RA8875_YELLOW abgrasen. Um zu schauen ob es schon eine Variable ist oder doch ein Wert. Wenn es eine Variable ist, würde ich weiter suchen wo diese initialisiert und/oder geändert wird. Wenn es ein Wert ist, würde ich suchen wo der herkommt und wie der erzeugt wird.

Wieso "ja"? Eine #define Makro ist keine Variable. Sondern eine Konstante. Und zwar eine ganz primitive, die nur eine Text-Ersetzung ist.

Wenn du eine Variable willst, nehme eine Variable. Wo ist da das Problem? Der Datentyp muss halt passen. Eine RGB Farbe ist manchmal ein struct mit den einzelnen Werten (wie in FastLED). Im Display Bereich ist es oft ein unsigned int, in dem die Farbe als RGB565 kodiert ist (5 Bit Rot, 6 Bit Grün, 5 Bit Blau).

Du musst dir nur den Parameter von setTextColor() ansehen (im Header der Library). Damit siehst du sofort was die Funktion möchte

Vielen Dank für Eure Antworten- ich weiß schon was ihr meint... ich bekomm es aber nicht so ganz zu greifen- wie im Urlaub, wenn man auf dem Weg zum Urlaubsort noch eben ne Sprachkassette einlegt und dann beim Bäcker steht und einfach nicht den Satz zusammen bekommt, dass man 10 Brötchen will :slight_smile:

Ich hoff ihr nehmts mir nicht übel, dass ich mich etwas langsam-denkend anstelle :slight_smile:

die lib ist die "RA8875" von Sumotoy....

die lib ist die "RA8875" von Sumotoy....

Ohne Link interessiert das wohl sehr wenige.

Serenifly:
Du musst dir nur den Parameter von setTextColor() ansehen (im Header der Library). Damit siehst du sofort was die Funktion möchte

Mit "Du" bist du gemeint, @MaHa76 :slight_smile:

Den Gegenspieler kenne ich zumindest so weit, dass ich da schon eigene Farben rein setzen konnte- war aber einfach nur das nachahmen von erkennbaren Mustern, also kein wissentliches Tun. :slight_smile:

Hier der Link zur Libary: GitHub - sumotoy/RA8875: A library for RAiO RA8875 display driver for Teensy3.x or LC/Arduino's/Energia/Spark

MaHa76:
Hier der Link zur Libary: GitHub - sumotoy/RA8875: A library for RAiO RA8875 display driver for Teensy3.x or LC/Arduino's/Energia/Spark

Das ist eine URL, aber kein Link!
:smiling_imp: :smiling_imp: :smiling_imp: :smiling_imp:

Abgeleitet aus #3:

uint16_t farbe = RA8875_YELLOW;

tft.setTextColor(farbe);

// tuwas mit gelb

 farbe = RA8875_GREEN;

tft.setTextColor(farbe);

// tuwas mit grün

:slight_smile:

Das Probier ich heut Aben gleich mal :slight_smile: Danke schön :slight_smile:

Schaust du hier:

Ist zwar durch die bedingte Kompilierung etwas unübersichtlicher als üblich, aber mit der Suchfunktion findet man in Zeile 273 das:

void setTextColor(uint16_t fcolor);//set text color (backgroud will be transparent)

Also ist eine Farbe wie oben gesagt unsigned int. Eben RGB565

Serenifly:
... findet man in Zeile 273 das:

War etwas faul, habe einfach in einem Beispiel nachgeschaut :-*

fillScreen_vs_clearScreen.ino mit void testdrawrects(uint16_t color).

Ha!!!! Das funktioniert !!! Vielen Dank :slight_smile: :slight_smile: :slight_smile:

Kann mir das mit dem "unit16_t" noch jemand etwas erklären? Damit ich auch besser verstehe, was ich da mach ... :o :confused: :-[

Kann mir das mit dem "unit16_t" noch jemand etwas erklären?

Was ist deine konkrete Frage dazu?

Ein Versuch der Antwort:
unit16_t heißt: 16 Bit vorzeichenloses Integer

Dazu muss man wissen, dass nicht alle "unsigned int" (vorzeichenlose Integer) 16 Bit breit sind.
In der c/C++ Welt sind sie das mindestens.
Aber auch nur "mindestens".

Je nach System, sind sie auch mal 32, oder 64 Bit breit.
Selbst Exoten mit 18 Bit gibt es.

Aber:
Ein "unit16_t" ist IMMER 16 Bit breit.
(wird zumindest so behandelt)
Das ist im ganzen bekannten Universum so.

Darum wird "unit16_t" recht gerne verwendet.
Da weiß man, was man hat.

Ein Versuch der Antwort:
unit16_t heißt: 16 Bit vorzeichenloses Integer

Wenn man richtig   uint16_t schreibt, kann man auch raten, was der Name bedeuten soll. :wink:
u = unsigned
int = integer
16 = Größe
_t ein DatenTyp

Es gibt übrigens auch int32_t und andere.

OK.... danke für eure Antworten. Da die meisten Anleitungen und Beschreibungen zu Arduino in englisch sind und ich Programmieren/Programmiersprachen nie wirklich gelernt habe, kenne ich wahrscheinlich nur einen Bruchteil der Möglichkeiten. Bei meinem aktuellen Projekt kommen beim kompilieren auch viel Hinweise/Warnungen, die sich auch auf Variablen beziehen- laufen tut alles wie gewünscht... aber ich möchte das ganze auch sauber hinbekommen, da es doch ein relativ großes Projekt ist...

Mein Halbwissen ist so groß, dass ich in dem Fall noch nicht mal die Fragen richtig formulieren könnte... :slight_smile:

Ich bin schon oft über Dinge gestolpert, wie z.b. das beim Aufrufen einer Funktion, z.b. "void tuetwas()" in den Klammern etwas steht... wo ich nicht weiß was es für einen Einfluß/Zweck hat...

Dann kann ich dir eigentlich nur raten, eins der dicken C++ Bücher zu kaufen, und konsequent durch zu arbeiten. Wenn da Arduino drauf oder drin steht, ist das eher schädlich für die Grundlagen.
Erst die Grundlagen lernen, dann die Arduino Besonderheiten.

Ob das für dich der optimale Weg ist, kann ich nicht sagen.
Mir hat es geholfen.
Ich habe in Schule und Ausbildung nie eine Programmiersprache lernen dürfen.
Und doch hat es mich viele Jahre ernährt und ein 1/2 Dutzend Fahrten nach Korea eingebrockt.

Ich frag mal ganz naiv, ob es da auch ne Zusammenfassung gibt? :slight_smile:

Ich lerne schnell- hab aber definitiv zu viele Hobbies- derzeit steht schreinern im Vordergrund- brauchen noch einiges an Möbeln :slight_smile: .

Arduino läuft so nebenbei- aber relativ ambitioniert- da hab ich seit kurzen meine ersten professionell gefertigten Platinen die ich nun von Hand bestücke- da es echt schön geworden ist, muss ich mich nun noch in eagle einarbeiten, um auch mal "Kleinkram" ohne Hilfe machen zu können.

Ein C/C++- Buch kann ich mal abends im Bett 20min lesen- da sollte es keine 5 Jahre dauern bis ich durch bin :slight_smile:

Und mit jeder Kleinigkeit will ich hier im Forum auch nicht nerven :slight_smile: