Der Flowgrow Aquacomp

evgenij

Member
:kaffee2:
Sooo, nach bissel rumgebastel ist die Anzeige so wie ich sie haben wollte. :thumbs:
Was jetzt noch fehlt ist das Menü...das ist aber im Sketch auskommentiert und wenn ich das wieder einkommentiere dann knallts :?

Code:
Menu:17: error: expected constructor, destructor, or type conversion before '=' token
Menu:18: error: 'Char' does not name a type
Menu:19: error: expected constructor, destructor, or type conversion before '=' token
Menu:21: error: expected constructor, destructor, or type conversion before '<<' token
Menu:22: error: expected unqualified-id before 'switch'
Menu:36: error: expected constructor, destructor, or type conversion before '.' token
Menu:37: error: expected constructor, destructor, or type conversion before '.' token
Menu:38: error: expected constructor, destructor, or type conversion before '.' token
Menu:39: error: expected constructor, destructor, or type conversion before '.' token
Menu:40: error: expected constructor, destructor, or type conversion before '.' token
Menu:41: error: expected constructor, destructor, or type conversion before '.' token
Menu:42: error: expected declaration before '}' token
@Moritz Ist das was ich habe wirklich die letzte funktionierende Version, oder ist es eine "Beta" von dir?
 

Anhänge

  • IMAG0474.jpg
    IMAG0474.jpg
    164,2 KB · Aufrufe: 994

evgenij

Member
Tastatur funktioniert jetzt, ich kann am SeriellMonitor sehen welche Taste gedrückt wurde.
leider hatte ich keine Beschreibung welche Pin der Tastatur für was zuständig ist, also musste ich mit Zeilen und reihen etwas rumexperementieren, so sieht das aktuell aus:

Code:
#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
byte rowPins[ROWS] = {36, 34, 32, 30}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {28, 26, 24}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

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

void loop(){
  char key = keypad.getKey();

  if (key != NO_KEY){
    Serial.println(key);
  }
}
Nur weiß ich leider nicht wie ich die keypad-Funktion umschreiben soll, meine "Programmierkenntnisse" reichen da doch nicht aus... :?
dann muss ich wohl die Tastatur von Moritz nachbauen...
Und beim Menü bin ich auch noch kein Schritt weiter...

Edit: Vielleicht schaff ich es doch wenn ich verstehe was hier passiert:

Code:
#define KEYPAD01 0
#define KEYPAD02 1
#define KEYPAD03 2
#define KEYPAD04 3
#define KEYPAD11 4
#define KEYPAD12 5
#define KEYPAD13 6
#define KEYPAD14 7
#define KEYPAD21 8
#define KEYPAD22 9
#define KEYPAD23 10
#define KEYPAD24 11

// Tasten
int keypad_val[12] ={ 420, 462,497,530,
                     575,597,620,640,
                     665,682,700,715
                   };

int NUM_KEYPAD = 12;
int keypad_in;
int key=-1;
int oldkey=-1;

Dann muss noch die entsprechende Funktion im Functions-Sketch umgeschrieben werden...aber da ich den ersten Teil nicht so wirklich verstehe, fällt es mir schwer die Funktion anzupassen....
 

MajorMadness

Active Member
In der Functions findest du was was so aussieht:
Code:
int keypad(){
 
  // Eingaben Tastenfeld
	key = 0;
	//  adc_key_in = analogRead(0);
	keypad_in = analogRead(A0);
	//  key = get_key(adc_key_in);
	key = get_key(keypad_in);
	if (key != oldkey){
		keypad_in = analogRead(A0);
		Serial.println (keypad_in);
		delay(50);
		//	key = get_key(adc_key_in);
		key = get_key(keypad_in);
		if (key != oldkey){
			//Serial.println (keypad_in);
			//lcd1.setCursor(16, 3);
			//lcd1.print(keypad_in);
			oldkey = key;
                switch(key){
                  case KEYPAD01:
wichtig dabei ist die stelle
Code:
 switch(key){
                  case KEYPAD01:
ab da kannste mit dem code aus dem beispiel sketch der EventSerialKeypad.pde arbeiten:
Code:
//take care of some special events
void keypadEvent(KeypadEvent key){
  switch (keypad.getState()){
    case PRESSED:
      switch (key){
        case '#': digitalWrite(ledPin,!digitalRead(ledPin)); break;
        case '*': 
          digitalWrite(ledPin,!digitalRead(ledPin));
        break;
      }
    break;
besonders:
Code:
switch (key){
        case '#': digitalWrite(ledPin,!digitalRead(ledPin)); break;
        case '*': 
          digitalWrite(ledPin,!digitalRead(ledPin));
        break;
statt keypad01 einfach "1" setzen usw...
 

evgenij

Member
Ich glaube du wirst mich erschlagen wenn du siehst wie ich das mit der Tastatur gelöst habe :D aber es scheint zu funktionieren. Die m.M.n. nicht benötigte definitionen etc. habe ich mal auskommentiert, wäre aber echt klasse wenn du kurz drüberschauen könntest ob das alles so richtig ist.

Weisst du noch welche Taste bei dir was war, also was "*" und was "#" bedeutet?
Code:
#define KEYPAD01 0
#define KEYPAD02 1
#define KEYPAD03 2
#define KEYPAD04 3
#define KEYPAD11 4
#define KEYPAD12 5
#define KEYPAD13 6
#define KEYPAD14 7
#define KEYPAD21 8
#define KEYPAD22 9
#define KEYPAD23 10
#define KEYPAD24 11

Und da bleibt noch die Frage mit dem Menü...
 

Anhänge

  • MAQ.rar
    8,8 KB · Aufrufe: 161

evgenij

Member
Hallo Moritz,

hätte da noch eine Frage zu den Düngerpumpen:
Hier definiere ich die Menge für die erste Pumpe und die Zeit wann gedüngt werden soll:
Code:
// Düngermengen
float duenger1 = 6.50;
//Dünger Zeiten
float d1Time= get_ts(9,0,0);    // 9:00

Soweit so gut. In dem Duengung.ino-Sketch hast du eine Funktion "Düngung", die die Pumpe dann ansteuert:

Code:
void Duengung(float Daystamp){
 
 // Pumpe 1 
  if(Daystamp>=d1Time && Daystamp<d1Time+duenger1&&digitalRead(TIP1)==LOW){
   digitalWrite(TIP1,HIGH);
  }else if((Daystamp<d1Time || Daystamp>d1Time+duenger1) && digitalRead(TIP1)==HIGH){
    digitalWrite(TIP1,LOW);
  }
}

Aufgerufen wird diese Funktion in dem Main-Sketch und bekommt immer die aktuelle Zeit als Übergabeparameter, auch das ist soweit klar.
Was ich aber nciht verstehe: woher weiß das Programm wie lange die Pumpe laufen soll um diese 6,5ml zu befödern? :irre:
 

MajorMadness

Active Member
Ich weiß warum ich diesen code nicht mehr pflege... Oh man hab ich da im laufe der zeit scheisse programmiert... das beste wäre wenn man einmal die dünger und licht funktionen aus dem minimalistik rüber kopiert.... die sind viel besser geschrieben und präziser.
ich werde mal schauen ob ich da wass machen kann auf basis vom Sketch von Skibbie oder irgend nem anderen von mir. er hat nur glaube ich auch nen Menü drin welches ich nie hatte...

Aber ganz ehrlich: Nimm die Dünger.ino von googleCode und schau das du die eingebaut bekommst... nur der ganze EEPROM scheiss muss dann da raus...
 

evgenij

Member
:lol:
ok, jetzt erklärt sich das mit dem Menü -> hab den Thread nach "Menü" durchsucht
und habe schon vermutet, dass es nie fertig wurde xD Aber ganz ehrlich, ein Menü braucht man auch nicht wirklich.

Das mit den Dosierpumpen muss ich mir mal angucken…entweder nehme ich die *.ino’s aus dem aktuellen Projekt,
oder ergänze dein originalcode / versuche was eigenes zu basteln. Wäre dann aber trotzdem sehr dankbar wenn du dir das was ich dann mache kurz anguckst, denn ich hab:
a) ne scheiß Angewohnheit alles „quick and dirty“ zu machen
b) bin kein Programmierer…
:D
 

evgenij

Member
Habe bissel überlegt...

Code:
MAQ.ino
-------------------------------------------------
mlpromin= 30 // ml Pro Minute
float duenger1 = 6.50*(60/mlpromin);
float d1Time= get_ts(9,0,0); 

Duengung.ino bleibt so...

Das muss doch so funktionieren, oder nicht.
Bin leider noch auf der Arbeit und kann das nicht testen...
 

MajorMadness

Active Member
ich kann es dir nicht sagen. dazu muss ich in den code reinsehen und schauen was ich da wie damals gelöst habe... zu lange her und zuviel anderes im kopf gehabt. doch beim nachdenken denke ich das es damals so funktioniert hatte, halt nur irgendwie komisch gelöst war. heute keine zeit, morgen schauen, aber wenn du paar tage zeit hast nehm ich mir den code nochmal vor...
 

Addi

Member
So Ich meld mich mal wieder, hab das mit dem TLC und dem Licht hinbekommen durch eure hilfe.
Erst mal ein dankeschön.

Jetzt hab ich noch ne Frage.

Ich habe mir eine Fernbedienung für Funksteckdosen so umgebaut das ich Sie mit einem Signal von 5V steuern kann . Das heist ich hab ne Funksteckdose von Elpro genommen (mit HX2262 chip) hab mir die Leitungen für ein/aus und die Leitungen für Kanal A-D rausgefürht.Dann hab ich mit mit hilfe von Transistoren und Dioden eine Platine gebaut . Jetzt bin ich in der Lage jeden Kanal also A-D einzeln ein und aus zu schalten mit einem 5V signal ( jeder Kanal hat eine Steuerleitung für ein und eine für aus.

Mein Problem ist jetzt das ich abhängig von meinem code die Funksteckdose steuern möchte.

Es geht auch alles so wie ich möchte nur muss ich das Signal zum Steuern zeitlich begrenzen (ca. 0,5-1 sec)

Ich weis aber nicht wie ich das umsetzen soll.

hier mal ein teil meines Codes

void loop() {

RTC.getTime();
mydaystamp = get_daystamp();

ds18b20.update(); // Temperatur update


keypad(); // Tasten abfragen


if( digitalRead (RELAY[1])==HIGH){
digitalWrite(35,LOW); // Ausgang zur Funke Kanal A einschalten
//delay(500);
//digitalWrite(35,HIGH);
}

if( digitalRead (RELAY[1])==LOW){
digitalWrite(35,HIGH);
//delay(500);
//digitalWrite(35,LOW);
}


Fals es mit eurer hilfe Funktioniert werde ich den Schaltplan für alle hier reinsetzen , kann dan jeder nachbauen wenn bedarf da ist


Hoffe bis bald

mfg
addi
 

evgenij

Member
Addi":1k2sx1hg schrieb:
hier mal ein teil meines Codes

void loop() {

RTC.getTime();
mydaystamp = get_daystamp();

ds18b20.update(); // Temperatur update


keypad(); // Tasten abfragen


if( digitalRead (RELAY[1])==HIGH){
digitalWrite(35,LOW); // Ausgang zur Funke Kanal A einschalten
//delay(500);
//digitalWrite(35,HIGH);
}

if( digitalRead (RELAY[1])==LOW){
digitalWrite(35,HIGH);
//delay(500);
//digitalWrite(35,LOW);
}

Hi Addi,
wenn ich das richtig verstehe dann benötigst du zum ein und ausschalten ein 1sek. Signal?
Wenn ja, dann kommentiere doch die auskommentierten Zeilen wieder ein und schraub dein delay auf 750ms hoch,
nicht dass der 500ms-Impuls von deiner Steckdosenleiste nicht sauber erkannt wird...

Code:
if( digitalRead (RELAY[1])==HIGH){
digitalWrite(35,LOW); // Ausgang zur Funke Kanal A einschalten
//delay(500);
//digitalWrite(35,HIGH);

In diesem Block Schaltest du Kanal A laut dem Komment ein.
Hierfür prüfst du ob das Relay’s 1 auf HIGH steht und dann Schaltest du Pin 35 auf LOW….
Kenn dein Code nicht, aber guck dir das nochmal an…ich glaube hier ist was faul


Wenn ich dich falsch verstanden habe, dann bitte dein Problem etwas genauer beschreiben.
Aus deinem Posting geht leider nur hervor was du machen möchtest, nicht woran es scheitert.

Gruß
Evgenij
 

Addi

Member
Ich habs hinbekommen hab jetzt aber keine Funktion meiner Dosierpumpen . Ich denke mal eine Zeitproblem .
Wie hast du es umgesetzt mit den Dosierpumpen ?
 

evgenij

Member
Hi Addi,

ich hab s zwar noch nicht live getestet, aber der Code von Moritz macht mehr als Sinn,
da das Gesamtprogramm während der Düngung nicht stoppt:

// Pumpe 1
if(Daystamp>=d1Time && Daystamp<d1Time+duenger1&&digitalRead(TIP1)==LOW){
digitalWrite(TIP1,HIGH);
}else if((Daystamp<d1Time || Daystamp>d1Time+duenger1) && digitalRead(TIP1)==HIGH){
digitalWrite(TIP1,LOW);
}

Wie/wo habt ihr den Controller eingebaut? Ich überlege noch wie ich das mit dem Netzteil/Controller/Pumpen und Display mache :? ...
 

Bruzzzler

Member
Hallo,
ich habe in diesesGehäuse vom Conrad Netzteil, Controller und Display eingebaut. Düngepumpen habe ich extra.

Johannes
 

Anhänge

  • K1600_IMG_0330.JPG
    K1600_IMG_0330.JPG
    317,8 KB · Aufrufe: 542
  • K1600_IMG_0333.JPG
    K1600_IMG_0333.JPG
    129,9 KB · Aufrufe: 540
  • K1600_IMG_0334.JPG
    K1600_IMG_0334.JPG
    136,7 KB · Aufrufe: 541
Ähnliche Themen
Themenersteller Titel Forum Antworten Datum
Tobias Coring Flowgrow - das gelebte Miteinander in der Community Ankündigungen 0
Ewald Flowgrow Forum Uhr - der Zeit voraus? Kein Thema - wenig Regeln 2
HaManFu HaManFu grüßt den Rest der Welt@Flowgrow Mitgliedervorstellungen 15
Tobias Coring Der Flowgrow Dünger ist da ;) Nährstoffe 127
D Neu in der Aquaristik (Benjamin aus Raum Köln/Bonn) Mitgliedervorstellungen 4
D Was kann der Sera CO2-Dauertest (nicht)? Technik 2
Maj.Monogwam Hilfe bei der Geschlechtsbestimmung, Königssalmler. Fische 2
Heiko Muth (Sumpfheini) Leptochilus pteropus, der Javafarn... Pflanzen Allgemein 0
T Weiß jemand, wer der Hersteller des Harzes ist, das sich "Purigen" nennt? Technik 11
Benjamin87 Der Zustand meiner Aquarium Pflanzen Pflanzen Allgemein 4
Benjamin87 Klares Wasser nach der Einlaufphase Technik 2
Benjamin87 Unerfahren in der Düngung Nährstoffe 1
Benjamin87 Trübung in der Einfahrphase Erste Hilfe 8
T In Zeiten der sog. Klimakrise ... Was ist Eure Sicht auf das "Teufelszeug" CO2? Kein Thema - wenig Regeln 10
S Optimierung der Düngung Nährstoffe 40
E Kalium Mangel (meine Pflanzen sagen ja der Test sagt nein) Nährstoffe 42
T Hilfe bei der Namenssuche Artenbestimmung 1
S Düngen in der Einfahrphase Nährstoffe 315
J Tropica Dünger in der Einfahrphase Nährstoffe 19
B4m8i Aquarium in der Arbeit - Proxima 250 ohne allem Aquarienvorstellungen 12

Ähnliche Themen

Oben