Software: Die Hardware habe ich hier beschrieben …
Das Programm ist zusätzlich zu den beiden Standardfunktionen setup() und loop(), die jedes Arduino Programm erst einmal hat, mit einer Scann-Funktion und jeweils einer Ausgabe-Funktion für die LEDs und das LC-Display aufgebaut.
In der setup() wird das Display initialisiert, ein kurzer Text auf dem Display ausgegeben und der Pinmode für die DIOs am Ardunio definiert.
lcd.begin(20, 2);
lcd.setCursor(0, 1);
lcd.print("Initialisierung...");
...
pinMode( LED_Ch1, OUTPUT); // LED Ch1 Port PB1 für A0
pinMode( LED_Ch2, OUTPUT); // LED Ch2 Port PB0 für A1
pinMode( LED_Ch3, OUTPUT); // LED Ch3 Port PD7 für A2
pinMode( LED_Ch4, OUTPUT); // LED Ch4 Port PD6 für A3
In meiner Scann-Funktion scann_channel ( ) wird als Parameter die Kanalnummer übergeben und die Funktion liefert einen Messwert zurück.
int scann_channel ( uint8_t channel ) {
int val; // Bereich 0..1023 0x03FF 5V / 1024 = 4,9mV
if ( channel = 1 ) {
val = analogRead( A0 ); // read the input pin
} else if ( channel = 2 ) {
val = analogRead( A1 ); // read the input pin
} else if ( channel = 3 ) {
val = analogRead( A2 ); // read the input pin
} else if ( channel = 4 ) {
val = analogRead( A3 ); // read the input pin
} else {
//
}
return val;
}
Für die Ausgabe an den LEDs habe ich die Funktion update_led() erstellt. Die Funktion bekommt die Kanalnummer und den dazugehörigen Messwert übergeben. Dann wird für jeden Kanal die Schaltschwelle geprüft und der Ausgang zum Kanal entweder HIGH oder LOW gesetzt.
void update_led ( uint8_t channel, uint8_t value ) {
if ( channel == 1 ) { // Auswahl Channel == 1
if (( value >= lower_Level ) && ( value <= upper_Level )) {
digitalWrite(LED_Ch1, HIGH); // Bei HIGH ist die LED "grün" an bei LOW "rot"
} else {
digitalWrite(LED_Ch1, LOW); // Bei LOW ist die LED "rot" an bei HIGH "grün"
}
} else if ( channel == 2 ) { // Auswahl Channel == 2
if (( value >= lower_Level ) && ( value <= upper_Level )) {
digitalWrite(LED_Ch2, HIGH); // Bei HIGH ist die LED "grün" an bei LOW "rot"
} else {
digitalWrite(LED_Ch2, LOW); // Bei LOW ist die LED "rot" an bei HIGH "grün"
}
} else if ( channel == 3 ) { // Auswahl Channel == 3
if (( value >= lower_Level ) && ( value <= upper_Level )) {
digitalWrite(LED_Ch3, HIGH); // Bei HIGH ist die LED "grün" an bei LOW "rot"
} else {
digitalWrite(LED_Ch3, LOW); // Bei LOW ist die LED "rot" an bei HIGH "grün"
}
} else if ( channel == 4 ) { // Auswahl Channel == 4
if (( value >= lower_Level ) && ( value <= upper_Level )) {
digitalWrite(LED_Ch4, HIGH); // Bei HIGH ist die LED "grün" an bei LOW "rot"
} else {
digitalWrite(LED_Ch4, LOW); // Bei LOW ist die LED "rot" an bei HIGH "grün"
}
} else {
//
}
return;
}
In der loop() Funktion wird dann regelmäßig die Scann-Funktion und die Ausgabefunktionen aufgerufen.
void loop() {
// Pause
delay ( warte );
// Channel 1..4 scannen
// Display aktualisieren
// LED aktualisieren
for ( uint8_t i_loop = 1; i_loop <= 4; i_loop++ ) {
int value = scann_channel( i_loop );
update_lcd( i_loop, value );
update_led( i_loop, value );
}
}
Das war eigentlich schon alles. Hier ist die ganz Datei “VControl.ino“.
Sorry, the comment form is closed at this time.