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.