Datentypen in der Programmierung bestimmen den Wertebereich der definierten Variable oder auch Funktion. In der ArduinoIDE gibt es verschiedene Datentypen die verwendet werden können. Um eine kleine Übersicht darüber zu haben, welche Datentypen zur Verfügung stehen, dachte ich mir, fasse ich das ganze mal in einem kleinen Beitrag zusammen.
Der reservierte Speicherplatz einer Variable oder auch einer Funktion wird unter anderem durch den Datentyp festgelegt.
Bei einer bool Variable - die einen Bit true oder false darstellt, könnte man davon ausgehen, dass nur 1-Bit im Speicher reserviert wird. Das ist aber nicht der Fall. Auch bei einer bool Variable werden 8-Bit reserviert, die kleinstmögliche Größe für die Belegung im Arbeitsspeicher.
Aber das ist nur eine Besonderheit im Bezug auf Variablen.
Datentyp : voidBei dem Datentyp void der eigentlich gar kein Datentyp ist, handelt es sich um ein Keyword, dass ausschließlich bei Funktionen zum Einsatz kommt. Funktionen die als void initialisiert werden, geben keinen Rückgabewert und führen stumpf etwas aus, ohne das Ergebnis zurückzugeben.
void meineFunktion(){ // do some stuff here an return nothing } Datentyp : bool - 1 bitEine Variable vom Typ bool bzw. boolean kann genau zwei Werte enthalten: true oder false. Auch wenn dafür im Speicher 8 Bit reserviert werden, kann nur 1 Bit gespeichert werden. Dieser Datentyp ist perfekt dafür geeignet, einen Schalterzustand zu speichern.
Ist der Schalter betätigt oder nicht?
Ein Byte kann einen Wert von 0 - 255 speichern. Die meisten PWM Register haben eine Auflösung von 8 Bit bzw. einem Byte. Daraus resultiert zum Beispiel auch der maximale Wert von 255 bei PWM-Signalen.
byte value = 33; Datentyp : char - 8 bitEine Variable mit dem Typ char kann eine Zahl oder einen Buchstaben enthalten. Gespeichert wird der Wert jedoch immer als Buchstabe - also char - character. Hier lohnt sich ein Blick in eine sogenannte ASCII-Tabelle. Der Speicher der reserviert wird beträgt auch hier 1 Byte - genauer gesagt Werte von -128 - 127. Bei einer ASCII-Tabelle muss dabei immer auf den Dez - also den Dezimalwert des jeweiligen Buchstaben geachtet werden.
// Bei beiden Definitionen wird der Buchstabe a gespeichert. char buchstabe_a = ‘a’; char number_a = 97; Datentyp : unsigned char - 8 bitEin ohne Vorzeichen behafteter Datentyp unsigned kann ken Vorzeichen enthalten. Also keine negativen Werte. Daraus resultiert ein Wertebereich von 1 Byte, aber nur ins positive: 0 - 255.
Damit haben wir das gleiche wie bei einem byte-Datentyp. Um Verwirrung zu vermeiden sollte stattdessen dann auch lieber direkt auf den Datentyp byte zurückgegriffen werden.
Auch wenn bei diesem Datentypen kein unsigned vorkommt, kann der Wert hier auch nicht negativ sein. Irritierend ist vielleicht die Bezeichnung word - es werden nämlich keine Wörter gespeichert, sondern Zahlen mit den Werten 0 - 65535. Dieser Um Verwirrung vorzubeugen, kann stattdessen auch der nachfolgende Datentyp unsigned int verwendet werden.
word gramms = 45231; Datentyp : unsigned int - 16 bitHierbei handelt es sich um das gleiche wie bei dem Datentyp word. Es können 16 Bit positive Zahlen gespeichert werden. Also Zahlen im Wertebereich von 0 - 65535.
unsigned int gramms = 45231; Datentyp : int - 16 bitInteger sing Ganzzahlen. Also immer Zahlen ohne Komma. Es werden 16 Bit im Speicher reserviert. Die Zahlen können auch negativ sein. Daraus resultiert ein Wertebereich von -32768 - 32767.
int year = 2021; Datentyp : unsigned long - 32 bitBei dem Datentyp unsigned long werden 32 Bit im Speicher reserviert. Es werden Zahlen gespeichert, die nicht negativ sein können. Durch das und durch die 32 Bit Speicher die belegt werden, lassen sich sehr große Zahlen speichern. Der Wertebereich einer unsigned long Variable geht von 0 - 4294967295.
Meistens wird dieser Datentyp genutzt, um mit der millis() Funktion innerhalb der Arduino IDE zu arbeiten.
unsigned long last_millis = 3124591539; Datentyp : long - 32 bitHierbei handelt es sich um einen Datentyp, bei dem 32 Bit im Speicher reserviert werden. Es können sowohl negative als auch positive Zahlen gespeichert werden. Der Wertebereich reicht von -2147483648 - 2147483647.
long time_remaining = -12372876 ; Datentyp : float - 32 bitBei dem Datentyp float handelt es sich um einen besonderen Datentyp. Denn hier können als einzige Fließkommazahlen gespeichert werden. Aus diesem Grund werden auch 32 Bit im Speicher reserviert. Es ist nicht ratsam grundsätzlich immer mit Float-Variablen zu arbeiten, wenn etwas berechnet werden muss, da diese sehr Rechen und Speicherintensiv sind.
Der Wertebereich einer float Variable reicht von -3.4028235E+38 - 3.4028235E+38.
Nicht nur bei Berechnungen mit int und float Zahlen kann es zu unerwarteten Problemen führen. Auch bei einer Ausgabe oder dem allgemeinen Mischen von verschiedenen Datentypen kommt es immer wieder zu Fehlern. Die Datentypen müssen - bevor sie kombiniert werden können - Umgewandelt bzw. gecastet werden. Wer sich dafür interessiert kann sich gerne mal diesen Beitrag hier anschauen, in dem ein paar Themen darüber aufgelistet sind.