Skip to content

Commit 84b515b

Browse files
author
Stefan Wolf
committed
Klassen und Co
1 parent f1109ef commit 84b515b

File tree

6 files changed

+797
-0
lines changed

6 files changed

+797
-0
lines changed

libraries/Thermometer/display.cpp

+160
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
#include "display.h"
2+
3+
// zur Struktur:
4+
5+
display_pins init_display_pins(int RS, int RW, int E, int DB0, int DB1, int DB2, int DB3, int DB4, int DB5, int DB6, int DB7, int RES)
6+
{
7+
Serial.println("Displaypins werden initialisiert.");
8+
display_pins pins;
9+
10+
pins.RS = RS;
11+
pins.RW = RW;
12+
pins.E = E;
13+
pins.RES = RES;
14+
15+
pins.DB[0] = DB0;
16+
pins.DB[1] = DB1;
17+
pins.DB[2] = DB2;
18+
pins.DB[3] = DB3;
19+
pins.DB[4] = DB4;
20+
pins.DB[5] = DB5;
21+
pins.DB[6] = DB6;
22+
pins.DB[7] = DB7;
23+
24+
return pins;
25+
}
26+
27+
//zur Klasse:
28+
29+
Display::Display(display_pins pins)
30+
{
31+
Serial.println("Displayobjekt wird erstellt.");
32+
this->pins = pins;
33+
this->characterLength = 0;
34+
/*
35+
* PinMode jedes Pins auf OUTPUT setzen und Startwert zuordnen
36+
*/
37+
for(int i = 0; i < 8; i++)
38+
{
39+
pinMode(pins.DB[i], OUTPUT);
40+
digitalWrite(pins.DB[i], LOW);
41+
}
42+
pinMode(pins.RS, OUTPUT);
43+
digitalWrite(pins.RS, LOW);
44+
pinMode(pins.RW, OUTPUT);
45+
digitalWrite(pins.RW, LOW);
46+
pinMode(pins.RES, OUTPUT);
47+
digitalWrite(pins.RES, HIGH);
48+
pinMode(pins.E, OUTPUT);
49+
digitalWrite(pins.E, LOW);
50+
}
51+
52+
int Display::getBit(int value, int bitNumber)
53+
{
54+
if( (value & (1 << bitNumber)) != 0)
55+
{
56+
return HIGH;
57+
}
58+
return LOW;
59+
}
60+
61+
void Display::write(int value, int duration)
62+
{
63+
digitalWrite(pins.E, HIGH);
64+
65+
this->write(value);
66+
67+
digitalWrite(pins.E, LOW);
68+
delayMicroseconds(duration);
69+
}
70+
71+
void Display::write(int value)
72+
{
73+
for(int i = 0; i < 8; i++)
74+
{
75+
digitalWrite(pins.DB[i], getBit(value, i));
76+
}
77+
}
78+
79+
void Display::executeCommand(int value, int duration)
80+
{
81+
digitalWrite(pins.RS, LOW);
82+
digitalWrite(pins.RW, LOW);
83+
84+
this->write(value, duration);
85+
}
86+
87+
void Display::writeData(int value)
88+
{
89+
digitalWrite(pins.RS, HIGH);
90+
digitalWrite(pins.RW, LOW);
91+
92+
this->write(value, 43);
93+
}
94+
95+
void Display::init()
96+
{
97+
Serial.println("Display wird initialisiert!");
98+
this->reset(); // Display reseten um alte Einstellungen zu loeschen
99+
100+
/*
101+
* eigentliche Initialisierung
102+
*/
103+
digitalWrite(pins.RS, LOW);
104+
digitalWrite(pins.RW, LOW);
105+
delay(2);
106+
107+
this->write(0x34, 39); // 8-Bit Datenlaenge BIT RE=1
108+
this->write(0x09, 39); // 4-Zeilen Modus
109+
this->write(0x30, 39); // 8-Bit Datenlaenge BIT RE=0
110+
this->write(0x0c, 39); // Display ein, Cursor ein, Cursor blinkt nicht
111+
this->write(0x01, 1600);// Display loeschen, Cursor auf 1, Spalte von 1.Zeile
112+
this->write(0x06, 39); // Cursor Auto-Increment
113+
Serial.println("Display wurde initialisiert!");
114+
}
115+
116+
void Display::reset()
117+
{
118+
Serial.println("Display wird resettet!");
119+
digitalWrite(pins.RES, LOW);
120+
delayMicroseconds(50);
121+
digitalWrite(pins.RES, HIGH);
122+
123+
this->characterLength = 0;
124+
}
125+
126+
void Display::clearScreen()
127+
{
128+
/*
129+
* Befehl um Display zu loeschen
130+
* und Cursor auf 1 Spalte, 1 Zeile
131+
* zu setzen.
132+
*/
133+
this->executeCommand(0x01, 1600);
134+
135+
this->characterLength = 0;
136+
}
137+
138+
void Display::writeString(const char *text)
139+
{
140+
digitalWrite(pins.RS, HIGH);
141+
digitalWrite(pins.RW, LOW);
142+
143+
int length = strlen(text);
144+
for(int i = 0; i < length; i++)
145+
{
146+
if(text[i] == '\n')
147+
{
148+
while(this->characterLength % 20 != 0)
149+
{
150+
this->write(' ', 43);
151+
this->characterLength++;
152+
}
153+
}
154+
else
155+
{
156+
this->write(text[i], 43);
157+
this->characterLength++;
158+
}
159+
}
160+
}

libraries/Thermometer/display.h

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
#ifndef DISPLAY_H
2+
#define DISPLAY_H
3+
4+
#include "Arduino.h"
5+
6+
/**
7+
* Diese Struktur dient zur Verwaltung der Displaypins.
8+
* Sie beinhaltet alle Pins, mit dem das Arduino mit dem Display
9+
* kommunizieren kann.
10+
*/
11+
typedef struct display_pins
12+
{
13+
int DB[8]; // 8 - Datenbits
14+
int RS; // RS-bit gibt an, ob Daten oder Befehle geschrieben werden
15+
int RW; // RW-bit gibt an, ob geschrieben oder gelesen werden soll
16+
int E; // Enable-bit
17+
int RES; // Reset-bit (Reset bei LOW)
18+
} display_pins;
19+
20+
/**
21+
* Mithilfe dieser Methode laesst sich auf einfacher Art und Weise
22+
* eine Variable des Datentyps display_pins erstellen und initialisieren.
23+
*/
24+
display_pins init_display_pins(int RS, int RW, int E, int DB0, int DB1, int DB2, int DB3, int DB4, int DB5, int DB6, int DB7, int RES);
25+
26+
/**
27+
* Die Klasse Display dient zur Ansteuerung des Displays mit dem
28+
* Arduino
29+
*/
30+
class Display
31+
{
32+
private:
33+
/**
34+
* Attribut beinhaltet Pins an denen das Display
35+
* angeschlossen ist.
36+
*/
37+
display_pins pins;
38+
/**
39+
* Attribut gibt an, wie viele Zeichen derzeit
40+
* auf dem Display dargestellt werden.
41+
* funktioniert nur mit writeString()!!
42+
*/
43+
int characterLength;
44+
/**
45+
* Diese Methode bestimmt ob das Byte aus dem
46+
* value Parameter 1 oder 0 ist und gibt dies
47+
* entsprechend zurueck.
48+
*/
49+
int getBit(int value, int bitNumber);
50+
/**
51+
* Funktion schreibt Daten-Byte auf Arduino
52+
* und setzt Enable-Werte (mit Wartezeit)
53+
*/
54+
void write(int value, int duration);
55+
/**
56+
* Funktion schreibt Daten-Byte auf Arduino
57+
*/
58+
void write(int value);
59+
60+
public:
61+
/**
62+
* Konstruktor, der Objekt erstellt.
63+
* Benoetigt eine Variable vom Typ display_pins, welche
64+
* die verwendeten Pins spezifiziert.
65+
*/
66+
Display(display_pins displayPins);
67+
68+
/**
69+
* Funktion fuehrt einen Befehl auf dem Arduino aus.
70+
* value - Befehlscode der ausgefuehrt werden soll
71+
* duration - Abarbeitungszeit, die Display benoetigt,
72+
* um Befehl abzuschliessen. (in Mikrosec.)
73+
*/
74+
void executeCommand(int value, int duration);
75+
/**
76+
* Funktion schickt einen Datenbefehl auf das Arduino.
77+
* benoetigt eine feste Zeit von 43 Mikrosekunden
78+
*/
79+
void writeData(int value);
80+
/**
81+
* Initialisiert den Display, mit Standardeinstellungen
82+
* 8-Bit Datenmodus, 4 Zeilen, Cursor aus, etc
83+
*/
84+
void init();
85+
/**
86+
* Setzt alle Einstellungen, die irgendwann
87+
* mal getroffen wurden, zurueck.
88+
*/
89+
void reset();
90+
/**
91+
* loescht den Bildschirminhalt
92+
*/
93+
void clearScreen();
94+
/**
95+
* Schreibt eine Zeichenkette auf das Arduino
96+
*/
97+
void writeString(const char *text);
98+
};
99+
100+
#endif // DISPLAY_H
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#include "temperaturesensor.h"
2+
3+
TemperatureSensor::TemperatureSensor(int pin, int voltage)
4+
{
5+
this->pin = pin;
6+
this->voltage = voltage;
7+
}
8+
9+
float TemperatureSensor::readTemperature(int mode)
10+
{
11+
Serial.println("Temperatursensor wird ausgelesen");
12+
int value = analogRead(pin);
13+
Serial.print("\tWert: ");
14+
Serial.println(value);
15+
16+
// read: http://learn.adafruit.com/tmp36-temperature-sensor/using-a-temp-sensor
17+
float millivolts = value * (this->voltage / 1024.0);
18+
float temperature = millivolts / 10; // sensor output is 10mV per degree Celsius
19+
20+
if(mode == this->MODE_CELSIUS)
21+
{
22+
Serial.print("\tCelsius: ");
23+
Serial.println(temperature);
24+
}
25+
else if(mode == this->MODE_KELVIN)
26+
{
27+
temperature += 273.15;
28+
29+
Serial.print("\tKelvin: ");
30+
Serial.println(temperature);
31+
}
32+
else if(mode == this->MODE_FAHRENHEIT)
33+
{
34+
temperature = (temperature * 9.0 / 5.0) + 32.0;
35+
36+
Serial.print("\tFahrenheit: ");
37+
Serial.println(temperature);
38+
}
39+
else
40+
{
41+
Serial.print("Ungueltiger Modus ");
42+
Serial.print(mode);
43+
Serial.println("wurde uebergeben.");
44+
return -1.0;
45+
}
46+
return temperature;
47+
}
+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#ifndef TEMPERATURESENSOR_H
2+
#define TEMPERATURESENSOR_H
3+
4+
#include "Arduino.h"
5+
6+
/**
7+
* Diese Klasse dient zur Ansteuerung
8+
* des Temperatursensors LM35 mit dem Arduino.
9+
*/
10+
class TemperatureSensor
11+
{
12+
public:
13+
/**
14+
* Mode-Variablen zum Temperatur
15+
* lesen. Gibt an, in welcher Einheit
16+
* die Temperatur zurueckgegeben wird.
17+
*/
18+
static const int MODE_CELSIUS = 1;
19+
static const int MODE_KELVIN = 2;
20+
static const int MODE_FAHRENHEIT = 3;
21+
22+
private:
23+
/**
24+
* Der analoge Pin, an dem der Sensor
25+
* angeschlossen ist.
26+
*/
27+
int pin;
28+
/**
29+
* Die Voltzahl in mV mit der Sensor
30+
* betrieben wird.
31+
*/
32+
int voltage;
33+
34+
public:
35+
/**
36+
* Konstruktur erstellt Objekt der Klasse.
37+
* analogPin - Pin, an dem Sensor angeschlossen ist.
38+
* voltage - mV-Wert mit welcher Sensor betrieben wird.
39+
*/
40+
TemperatureSensor(int analogPin, int voltage);
41+
/**
42+
* liest die Temperatur aus und gibt diese zurueck
43+
* mode - gibt an, in welcher Einheit Wert
44+
* zurueckgegeben werden soll.
45+
*/
46+
float readTemperature(int mode);
47+
};
48+
49+
#endif // TEMPERATURESENSOR_H

0 commit comments

Comments
 (0)