INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
showerloop mit Controllino
16.03.2020, 23:26 (Dieser Beitrag wurde zuletzt bearbeitet: 16.03.2020 23:46 von Franz54.)
Beitrag #57
RE: showerloop mit Controllino
Habe mir gerade die Controllino key_word Datei angeschaut.
Also das ist tatsächlich so, dass man die Pin´s z.B. "Controllino_D1" nennt. Das kenne ich nicht, und ich will mich da auch nicht reinarbeiten. Dafür ist mir meine Zeit zu knapp. Confused

PS: Muss man die Controllino Lib. eigentlich benutzen. Gibts hier niemand, der/die den Controllino schon mal am Tisch hatte??

Edit: Hier ist mal der PinPlan vom Maxi.

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.03.2020, 20:50
Beitrag #58
RE: showerloop mit Controllino
Hallo Franz,
ja, die Lib. muss eingetragen sein sonst bekommt man einen Fehler.
Ich bin am verzweifeln, anscheinend ist es mit meinen Kenntnissen im Programmieren doch nicht so weit her.
Die letzten zwei Tage habe ich versucht einem Sketch (Servoschloß mit PIN Code), den ich hier gefunden habe umzugestalten. Leider komm ich nicht drauf.

Bei dem Sketch Servoschloß ist es so, dass man einen 4-stelligen Code eingeben muss, ist er richtig leuchtet eine grüne LED und ein Servo dreht sich um 90° nach 3 Sekunden erlischt die LED und der Servo geht wieder auf 0°, ist der PIN falsch, leuchtet eine rote LED für 50 Milisekunden.
Soweit so gut, anfangs dachte ich, das krieg ich hin, das war leider ein Fehler.
Was ich brauche ist folgendes:
Ich drücke an einem Tastenfeld eine Zahl zwischen 0 und 9,
Es soll nur eine Zahl angenommen werden.
Zum ausführen wird die # Taste gedrückt.
Dann soll in einer if else Anweisung abgefragt werden und je nachdem welche Zahl gedrückt wurde (1 = duschen, 2 = reinigen, 3 = Bypass etc. und 9 = Ende) und das dann ausführen.
Das heißt bei 1, soll Ventil 3+4, UV und die Pumpe gestartet werden etc..
In dem Sketch den ich angefügt habe, habe ich schon einige Male versucht das in etwa zu bewerkstelligen.
Leider bekomme ich immer wieder einen Fehler, mal den einen und mal den anderen.
Ich hab den Sketch für den Arduino Mega geschrieben, um es Testen zu können, hernach müsste ich das dann noch auf den Controllino umschreiben.
Noch eine Frage zum Controllino:
Die digitalen PWM Ausgänge können mit 2A belastet werden.
Könnte man da eine Pumpe (12V 7,5A) direkt anschließen und regeln ohne eine separate Motorsteuerung?
Manche Zeilen im Sketch sind ausgeklammert weil ich was versuchen wollte.

Ich weiß dass, das was ich hier anfrage eine Menge Arbeit ist und ich bin auch nicht enttäuscht wenn ich keine Lösung bekomme.
Es würde mir schon weiterhelfen, ein paar Tips was ich falsch gemacht habe, zu bekommen, denn mit der Syntax von C++ stehe ich eher auf Kriegsfuß.
Also schon im voraus vielen Dank.

Gruß Breze
Code:
#include <Keypad.h>
#include <Servo.h>

// Pinlänge und Pincode festlegen
const byte PINLENGTH = 1;
char pinCode[PINLENGTH + 1] = {'3'};

// Zwischenspeicher für Eingaben
char eingabe[PINLENGTH + 1] = {'-'};

// Kompakter kann man das auch so schreiben:
// char pin[] = "0815";
// char eingabe[] = "----";

const byte COLS = 4; //4 Spalten
const byte ROWS = 4; //4 Zeilen
//Die Ziffern/Zeichen:
char hexaKeys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = { 2, 3, 4, 5 };//Definition der Pins für die 4 Zeilen
byte colPins[COLS] = { 6, 7, 8, 9 }; //Definition der Pins für die 4 Spalten

// Einstellung für Servo und LEDs
const int greenPin = 12;
const int redPin = 13;
const int servoPin = 11;
const int angleClosed = 30;
const int angleOpen = 120;
const int openDelay = 3000;

// Servo-Objekt erzeugen
Servo myservo;

// Instanz von Keypad erzeugen, Keymap und Pins übergeben
Keypad tastenfeld = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void setup() {
  Serial.begin(9600);
  // LED Pins setzen
  pinMode(greenPin, OUTPUT);
  pinMode(redPin, OUTPUT);
  digitalWrite(greenPin, LOW);
  digitalWrite(redPin, LOW);
  // Servo auf Ausgangsposition
  myservo.attach(servoPin);
  myservo.write(angleClosed);
}

void loop() {
  // Gedrückte Taste abfragen
  char taste = tastenfeld.getKey();

  if (taste) {
    // Check, ob ASCII Wert des Char einer Ziffer zwischen 0 und 9 entspricht
    if ((int(taste) >= 48) && (int(taste) <= 57)) {
      Serial.print(taste);
      char      eingabe = taste;
      AddToEingabe(taste);
    }
    // oder Code überprüfen, falls Raute gedrückt wurde
    else if (taste == '#') {
      Serial.print(taste);
      Serial.print(eingabe);
      goto vergleich;

    }
  }
}

void AddToEingabe(char inkey) {
  Serial.print(inkey);
  Serial.print(" > ");
  // Von links nach rechts Zeichen um eins weiterkopieren = ältestes Zeichen vergessen
//  for (int i = 1; i < PINLENGTH; i++) {
//    eingabe[i - 1] = eingabe[i];
  }
  // in ganz rechter Stelle die letzte Ziffer speichern
  eingabe[PINLENGTH - 1] = inkey;
  Serial.println(eingabe);
}

void vergleich: {
  // Eingabe mit festgelegtem Pincode vergleichen
  if (eingabe = 1) {
    Serial.println("P1");
    // Aktion für richtigen Pin ausführen
    //    pinCorrect();
  }
  else if (eingabe = 2) {
    Serial.println("P2");
    // Aktion für richtigen Pin ausführen
  }
  //  pinCorrect();
  else if (eingabe = 3) {
    Serial.println("P3!");
    // Aktion für falschen Pin ausführen
//    pinWrong();
  }
  }

// Nach Überprüfung Eingabe leeren
for (int i = 0; i < PINLENGTH; i++) {
  eingabe[i] = '-';
}


// Aktion für korrekten Pincode
void pinCorrect() {
  myservo.write(angleOpen);
  digitalWrite(greenPin, HIGH);
  delay(openDelay);
  myservo.write(angleClosed);
  digitalWrite(greenPin, LOW);
}

// Aktion für falschen Pincode
void pinWrong() {
  for (int i = 0; i < 3; i++) {
    digitalWrite(redPin, HIGH);
    delay(50);
    digitalWrite(redPin, LOW);
    delay(20);
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.03.2020, 21:02 (Dieser Beitrag wurde zuletzt bearbeitet: 20.03.2020 21:03 von Tommy56.)
Beitrag #59
RE: showerloop mit Controllino
Du willst doch keinen mehrstelligen Pincode einlesen, also ist das Beispiel für Dich ungeeignet.
Wenn Du nur 1 Ziffer willst, dann brauchst Du auch kein Beendigungszeichen.
Code:
void loop() {
  // Gedrückte Taste abfragen
  char taste = tastenfeld.getKey();
  if (taste) { // da war was
    if (taste >='0' && taste <='9') { // eine Ziffer
      switch(taste) {  // Auswahl
        case '0':
           // mache irgendwas bei 0
           break;
        case '1':
           // mache irgendwas bei 1
           break;
        ...
      }
    }
  }
}

Das macheWas am Besten jeweils in Funktionen packen.
Hast Du Dir mal die deutsche Arduino-Referenz hier im Forum angeschaut?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.03.2020, 21:09
Beitrag #60
RE: showerloop mit Controllino
Hallo Tommy,
danke für die schnelle Antwort.
Nein, die Arduino-Referenz im Forum habe ich nocht nicht angeschaut, aber eine Menge Tutorials über C++ und Arduino.
Wie wir in Bayern sagen, Mia racht da Kopf (Mir raucht der Kopf) Wink
Wo finde ich die Arduino-Referenz in deusch?
LG Breze
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.03.2020, 21:12
Beitrag #61
RE: showerloop mit Controllino
(20.03.2020 21:09)Breze schrieb:  Wo finde ich die Arduino-Referenz in deusch?
Scroll mnal ganz nach oben. Code-Referenz.

Grüße aus Franken

Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.03.2020, 21:26
Beitrag #62
RE: showerloop mit Controllino
Hallo Tommy,
nochmals vielen Dank, heute schlaf ich sicher gut.
Gute Nacht
Breze
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.03.2020, 12:48
Beitrag #63
RE: showerloop mit Controllino
Hallo Tommy,
habe mir jetzt einige Nächte um die Ohren geschlagen, aber schau mal was dabei rausgekommen ist und alles nur aufrund deines kurzem sketches, nochmals Dankeschön.
Code:
#include <Controllino.h>
#include <LiquidCrystal.h>
#include <Keypad.h>

LiquidCrystal lcd(1, 0, 53, 51, 50, 52);
//LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);

// Einstellung für Ventile und Pumpe
const int ventil_1Pin = (CONTROLLINO_D0);
const int ventil_2Pin = (CONTROLLINO_D1);
const int ventil_3Pin = (CONTROLLINO_D2);
const int ventil_4Pin = (CONTROLLINO_D3);
const int ventil_5Pin = (CONTROLLINO_D4);
const int uvPin = (CONTROLLINO_D5);
const int lampePin = (CONTROLLINO_D6);

//const int A0Pin (CONTROLLINO_A0);
//const int A1Pin (CONTROLLINO_A1);
//const int A2Pin (CONTROLLINO_A2);
//const int A3Pin (CONTROLLINO_A3);
//const int A4Pin (CONTROLLINO_A4);
//const int A5Pin (CONTROLLINO_A5);
//const int A6Pin (CONTROLLINO_A6);

//Pumpensteuerung
const int pumpePWM (CONTROLLINO_D9);
const int pumpeA = (CONTROLLINO_D10);
const int pumpeB = (CONTROLLINO_D11);
int sensorValue = 0;
int potiStellung = 0;

//Keypad festlegen:
const byte COLS = 3;  //3 Spalten
const byte ROWS = 4;  //4 Zeilen
byte rowPins[ROWS] = { A3, A4, A5, A6 };//Definition der Pins für die 4 Zeilen
byte colPins[COLS] = { A0, A1, A2 };    //Definition der Pins für die 3 Spalten
char Key; //Key entspricht in Zukunft den gedrückten Tasten

//Definieren der Pins, über welche die Matrix Tastatur
//mit dem Microcontroller verbunden wurde.


//Aufbau der Tastatur als mehrdimensionales Array abbilden.
//Es ist darauf zu achten das die Tastatur verkehrtherum abgebildet ist.
char hexaKeys[ROWS][COLS] = {
  {'#', '0', '*'},
  {'9', '8', '7'},
  {'6', '5', '4'},
  {'3', '2', '1'}
};

// Instanz von Keypad erzeugen, Keymap und Pins übergeben
Keypad tastenfeld = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void setup() {
  Serial.begin(9600);

  lcd.begin(16, 2);
  lcd.print("Keypad LCD Test");
  // Ausgänge setzen
  pinMode(ventil_1Pin, OUTPUT);
  pinMode(ventil_2Pin, OUTPUT);
  pinMode(ventil_3Pin, OUTPUT);
  pinMode(ventil_4Pin, OUTPUT);
  pinMode(ventil_5Pin, OUTPUT);
  pinMode(uvPin, OUTPUT);
  pinMode(lampePin, OUTPUT);
  pinMode(pumpePWM, OUTPUT);
  pinMode(pumpeA, OUTPUT);
  pinMode(pumpeB, OUTPUT);
}

void loop() {
  // Gedrückte Taste abfragen
  char taste = tastenfeld.getKey();
  if (taste) { // da war was
    if (taste >= '0' && taste <= '9') { // eine Ziffer
      switch (taste) { // Auswahl
        case '1':
          // 1 = duschen, Ventil 2, 4, 5, Betriebslampe, UV und Pumpe
          lcd.setCursor(9, 1);
          lcd.print("Programm ");
          lcd.print(taste);
          lcd.print(" duschen");
          Serial.print("Programm ");
          Serial.print(taste);
          Serial.println(" duschen");
          digitalWrite(ventil_2Pin, HIGH);          //Ventil 2 öffnen
          digitalWrite(ventil_4Pin, HIGH);          //Ventil 4 öffnen
          digitalWrite(ventil_5Pin, HIGH);          //Ventil 5 öffnen
          digitalWrite(lampePin, HIGH);             //Betriebslampe an
          digitalWrite(uvPin, HIGH);                //UV-Entkeimung an

          sensorValue = analogRead(potiStellung);   //Pumpendrehzahl
          digitalWrite(pinA, HIGH);
          digitalWrite(pinB, LOW);
          analogWrite(pumpePWM, sensorValue);
          break;

        case '2':
          // 2 = reinigen, Ventil 1, 3, 4, Betriebslampe und Pumpe
          Serial.print("Programm ");
          Serial.print(taste);
          Serial.println(" reinigen");
          digitalWrite(ventil_1Pin, HIGH);          //Ventil 1 öffnen
          digitalWrite(ventil_3Pin, HIGH);          //Ventil 3 öffnen
          digitalWrite(ventil_4Pin, HIGH);          //Ventil 4 öffnen
          digitalWrite(lampePin, HIGH);             //Betriebslampe an

          sensorValue = analogRead(potiStellung);   //Pumpendrehzahl
          digitalWrite(pinA, HIGH);
          digitalWrite(pinB, LOW);
          analogWrite(pumpePWM, sensorValue);
          break;

        case '3':
          // 3 = bypass, Ventil 1, 4, 5, UV, Betriebslampe und Pumpe
          Serial.print("Programm ");
          Serial.print(taste);
          Serial.println(" bypass");
          digitalWrite(ventil_1Pin, HIGH);          //Ventil 1 öffnen
          digitalWrite(ventil_4Pin, HIGH);          //Ventil 4 öffnen
          digitalWrite(ventil_5Pin, HIGH);          //Ventil 5 öffnen
          digitalWrite(lampePin, HIGH);             //Betriebslampe an
          digitalWrite(uvPin, HIGH);                //UV-Entkeimung an

          sensorValue = analogRead(potiStellung);   //Pumpendrehzahl
          digitalWrite(pinA, HIGH);
          digitalWrite(pinB, LOW);
          analogWrite(pumpePWM, sensorValue);
          break;

        case '4':
          // 4 = entleeren, Ventil 2, 3, Betriebslampe und Pumpe
          Serial.print("Programm ");
          Serial.print(taste);
          Serial.println(" entleeren");
          digitalWrite(ventil_2Pin, HIGH);          //Ventil 2 öffnen
          digitalWrite(ventil_3Pin, HIGH);          //Ventil 3 öffnen
          digitalWrite(lampePin, HIGH);             //Betriebslampe an

          sensorValue = analogRead(potiStellung);   //Pumpendrehzahl
          digitalWrite(pinA, HIGH);
          digitalWrite(pinB, LOW);
          analogWrite(pumpePWM, sensorValue);
          break;

        case '5':
          // 5 = spülen, Ventil 1-5, Betriebslampe, UV und Pumpe
          Serial.print("Programm ");
          Serial.print(taste);
          Serial.println(" spuelen");
          digitalWrite(ventil_1Pin, HIGH);          //Ventil 1 öffnen
          digitalWrite(ventil_2Pin, HIGH);          //Ventil 2 öffnen
          digitalWrite(ventil_3Pin, HIGH);          //Ventil 3 öffnen
          digitalWrite(ventil_4Pin, HIGH);          //Ventil 4 öffnen
          digitalWrite(ventil_5Pin, HIGH);          //Ventil 5 öffnen
          digitalWrite(lampePin, HIGH);             //Betriebslampe an
          digitalWrite(uvPin, HIGH);                //UV-Entkeimung an

          sensorValue = analogRead(potiStellung);   //Pumpendrehzahl
          digitalWrite(pinA, HIGH);
          digitalWrite(pinB, LOW);
          analogWrite(pumpePWM, sensorValue);
          break;

        case '9':
          // 9 = beenden
          Serial.print("Programm ");
          Serial.print(taste);
          Serial.println(" Ende");
          digitalWrite(ventil_1Pin, LOW);          //Ventil 1 schließen
          digitalWrite(ventil_2Pin, LOW);          //Ventil 2 schließen
          digitalWrite(ventil_3Pin, LOW);          //Ventil 3 schließen
          digitalWrite(ventil_4Pin, LOW);          //Ventil 4 schließen
          digitalWrite(ventil_5Pin, LOW);          //Ventil 5 schließen
          digitalWrite(lampePin, LOW);             //Betriebslampe aus
          digitalWrite(uvPin, LOW);                //UV-Entkeimung aus
          digitalWrite(pinA, LOW);                 //Pumpe aus
          return 0;
      }
    }
  }
}
Es sind noch ein paar Zeilen drin, die noch raus müssen aber ohne Controllino weiß ich nicht ob das dann auch noch funktioniert.
Das mit dem Display kann ich auch noch nicht sagen, das, das ich habe, ist leider defekt.
Angezeigt soll nachher werden:
1. Zeile mittig "showerloop"
2. Zeile linksbündig "Programm 1 duschen" z.B.
Werde mir jetzt einen Controllino zulegen und am Endgültigen Objekt probieren.

Gruß Breze

Ach ja, solltest du noch Fehler finden wäre ich für einen Tipp dankbar.


.pdf  showerloop V1_2.pdf (Größe: 418,57 KB / Downloads: 47)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.03.2020, 12:58
Beitrag #64
RE: showerloop mit Controllino
Kleiner Fehler im Schaltplan:
Stromversorgung Minus war an der falschen Klemme.

.pdf  showerloop V1_2.pdf (Größe: 418,57 KB / Downloads: 51)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste