Dein dosing Array:hugo1892":36f75u1f schrieb:Wie muss ich es schreiben meisnt du?Deine pinAddr in dosing sind auch falsch. Die sind der Index auf den Array dosingPins. Der hat bei Dir aber nur 6 Elemente.
PUMP dosing[] = {
{get_ts(10,0,5),1,"D1",8,10},
{get_ts(10,0,10),1,"D2",2,10},
{get_ts(10,0,15),1,"D3",3,10},
{get_ts(10,0,20),1,"D4",4,10},
{get_ts(10,0,25),1,"D5",5,10},
{get_ts(10,0,30),1,"D6",6,10},
{get_ts(10,0,35),1,"D1",8,10},
{get_ts(10,0,40),1,"D1",8,10},
{get_ts(10,0,45),1,"D1",8,10},
};
typedef struct {
uint32_t time;
boolean active;
char name[3];
byte pinAddr;
byte mldosing;
}PUMP;
dosingPins[dosing[i].pinAddr]
const byte dosingPins[]={DOSE1,DOSE2,DOSE3,DOSE4,DOSE5,DOSE6,};
das bewirkt rein gar nichts. Das Makro DOSE7 wird ja nirgendwo benutzt.rrnetz":3ekaq895 schrieb:Kommentiere mal #define DOSE7 6 aus mit //
#define PUMPCOUNTS 6 // Number Pumps
#define RELAYCHANNELS 4
#define RELAYTIMES 6
#define KEYPADI2C 0x20
#define LCD_ADR 0x27
// PIN MAPPING NICHT ÄNDERN!!!
#define PIN_TEMP A1 // Temperatur
#define RELAY1 2
#define RELAY2 3
#define RELAY3 4
#define RELAY4 5
// #define DOSE7 6
#define DOSE6 7
#define DOSE5 8
#define DOSE4 9 // Dosierpumpe
#define DOSE3 10 // Dosierpumpe
#define DOSE2 11 // Dosierpumpe
#define DOSE1 12 // Dosierpumpe
// Größe Vorratsflaschen Dünger in ml
const int dose_val = 1000;
// Neu zuordnung der Pins für Dosierung
const byte dosingPins[]={DOSE1,DOSE2,DOSE3,DOSE4,DOSE5,DOSE6,};
// Milliliter per minute in Reihenfolge wie Pumpen oben Achtung Maximum 255ml/Minute
const byte dosingMlMin[]={60,60,60,60,60,60,};
// Pumpen Einstellungen
// Uhrzeit, Aktive, Name, Pin Adresse (von array oben 0 ist erste Pumpe "Dose1"), Status (ignorieren, nur wichtig für Programm), Milliliter pro Dosierungconst
PUMP dosing[] = {
{get_ts(10,0,5),1,"D1",0,10},
{get_ts(10,0,10),1,"D2",1,10},
{get_ts(10,0,15),1,"D3",2,10},
{get_ts(10,0,20),1,"D4",3,10},
{get_ts(10,0,25),1,"D5",4,10},
{get_ts(10,0,30),1,"D6",5,10},
{get_ts(10,0,35),1,"D1",0,10},
};
// Wird verwendet um zu sehen ob schon dosiert wurde. Nicht Ändern!!!
boolean dosingState[PUMPCOUNTS];
const byte relayPIN[]= {RELAY1,RELAY2,RELAY3,RELAY4};
RELAY relays[RELAYCHANNELS][RELAYTIMES] = {
{{get_ts(0,0,0),1},{get_ts(17,10,0),0},{get_ts(17,15,0),1},{get_ts(17,20,0),0},{get_ts(17,25,0),1},{get_ts(17,30,0),0}},
{{get_ts(0,0,0),0},{get_ts(10,0,0),1},{get_ts(11,30,0),0},{get_ts(19,0,0),1},{get_ts(20,0,0),0},{get_ts(21,30,0),0}},
{{get_ts(0,0,0),0},{get_ts(10,0,0),1},{get_ts(11,30,0),0},{get_ts(19,0,0),1},{get_ts(20,0,0),0},{get_ts(21,30,0),0}},
{{get_ts(0,0,0),0},{get_ts(10,0,0),1},{get_ts(11,30,0),0},{get_ts(19,0,0),1},{get_ts(20,0,0),0},{get_ts(21,30,0),0}}
};
der Array hat 7 Elemente, PUMPCOUNTS steht auf 6.hugo1892":3nj95vsa schrieb:Code:#define PUMPCOUNTS 6 // Number Pumps ... PUMP dosing[] = { {get_ts(10,0,5),1,"D1",0,10}, {get_ts(10,0,10),1,"D2",1,10}, {get_ts(10,0,15),1,"D3",2,10}, {get_ts(10,0,20),1,"D4",3,10}, {get_ts(10,0,25),1,"D5",4,10}, {get_ts(10,0,30),1,"D6",5,10}, {get_ts(10,0,35),1,"D1",0,10}, };
Die letzte Zeile zieht er dann trotzdem nicht ab.
void resetPumps(){
if(rtc.daystamp>get_ts(23,59,30)){
pumpReset=true;
}
if(rtc.daystamp<60 && pumpReset==true){
pumpReset=false;
for( int i=0;i < sizeof(dosingState)/sizeof(dosingState[0]); i++){
dosingState[i]=false;
}
}
}
void setDosing(){
resetPumps();
for( int i=0;i < sizeof(dosing) / sizeof(dosing[0]); i++){
if(dosing[i].active!=0){
if(rtc.daystamp>=dosing[i].time && rtc.daystamp<=dosing[i].time+10 && digitalRead(dosingPins[dosing[i].pinAddr])==LOW && dosingState[i]==false){
unsigned long time = long(60000L * dosing[i].mldosing / dosingMlMin[i]);
t.pulseImmediate(dosingPins[dosing[i].pinAddr],time, HIGH);
dosingState[i]=true;
printDose(dosing[i].pinAddr,dosing[i].mldosing);
}
}
}
}
#define PUMPCOUNTS 7 // Number Pumps
#define RELAYCHANNELS 4
#define RELAYTIMES 6
#define KEYPADI2C 0x20
#define LCD_ADR 0x27
// PIN MAPPING NICHT ÄNDERN!!!
#define PIN_TEMP A1 // Temperatur
#define RELAY1 2
#define RELAY2 3
#define RELAY3 4
#define RELAY4 5
#define DOSE7 6 // Dosierpumpe
#define DOSE6 7 // Dosierpumpe
#define DOSE5 8 // Dosierpumpe
#define DOSE4 9 // Dosierpumpe
#define DOSE3 10 // Dosierpumpe
#define DOSE2 11 // Dosierpumpe
#define DOSE1 12 // Dosierpumpe
// Größe Vorratsflaschen Dünger in ml
const int dose_val = 1000;
// Neu zuordnung der Pins für Dosierung
const byte dosingPins[PUMPCOUNTS]={DOSE1,DOSE2,DOSE3,DOSE4,DOSE5,DOSE6,DOSE7};
// Milliliter per minute in Reihenfolge wie Pumpen oben Achtung Maximum 255ml/Minute
const byte dosingMlMin[PUMPCOUNTS]={60,60,60,60,60,60,60};
// Pumpen Einstellungen
// Uhrzeit, Aktive, Name, Pin Adresse (von array oben 0 ist erste Pumpe "Dose1"), Milliliter pro Dosierung
const PUMP dosing[] = {
{get_ts(10,0,0),1,"D0",0,5},
{get_ts(11,0,0),1,"D1",1,6},
{get_ts(11,25,0),1,"D1",1,3},
{get_ts(11,26,0),1,"D1",1,3},
{get_ts(11,23,0),1,"D1",1,3},
{get_ts(11,28,0),1,"D1",1,5},
{get_ts(11,29,0),1,"D1",1,5},
{get_ts(11,0,0),1,"D2",2,6},
{get_ts(11,25,0),1,"D2",2,3},
{get_ts(11,26,0),1,"D2",2,3},
{get_ts(11,23,0),1,"D2",2,3},
{get_ts(11,28,0),1,"D2",2,5},
{get_ts(11,29,0),1,"D2",2,5},
};
// Wird verwendet um zu sehen ob schon dosiert wurde. Nicht Ändern!!!
boolean dosingState[sizeof dosing / sizeof dosing[0]];
für dosingPins stimmt das, für dosingMlMin aber nicht.MajorMadness":swzdu22s schrieb:Wichtig ist das in dosingPins und dosingMlMin genau so viele elemente stehen wie in PUMPCOUNTS angegeben (auch wenn nur 3 Pumpen vorhanden können die eigentlich so bleiben).
unsigned long time = long(60000L * dosing[i].mldosing / dosingMlMin[i]);
// Pumpen Einstellungen
// Uhrzeit, Aktive, Name, Pin Adresse (von array oben 0 ist erste Pumpe "Dose1"), Milliliter pro Dosierung
const PUMP dosing[] = {
{get_ts(11,0,10),1,"D0",0,5},
{get_ts(11,0,10),1,"D1",1,5},
{get_ts(11,0,10),1,"D1",2,5},
{get_ts(11,0,10),1,"D1",3,5},
{get_ts(11,0,10),1,"D1",4,5},
{get_ts(11,0,10),1,"D1",5,5},
{get_ts(11,0,20),1,"D1",0,5},
{get_ts(11,0,20),1,"D2",1,5},
{get_ts(11,0,20),1,"D2",2,5},
{get_ts(11,0,20),1,"D2",3,5},
{get_ts(11,0,20),1,"D2",4,5},
{get_ts(11,0,20),1,"D2",5,5},
{get_ts(11,0,30),1,"D1",0,5},
{get_ts(11,0,30),1,"D2",1,5},
{get_ts(11,0,30),1,"D2",2,5},
{get_ts(11,0,30),1,"D2",3,5},
{get_ts(11,0,30),1,"D2",4,5},
{get_ts(11,0,30),1,"D2",5,5},
{get_ts(11,0,40),1,"D1",0,5},
{get_ts(11,0,40),1,"D2",1,5},
{get_ts(11,0,40),1,"D2",2,5},
{get_ts(11,0,40),1,"D2",3,5},
{get_ts(11,0,40),1,"D2",4,5},
{get_ts(11,0,40),1,"D2",5,5},
};
// Wird verwendet um zu sehen ob schon dosiert wurde. Nicht Ändern!!!
boolean dosingState[sizeof dosing / sizeof dosing[0]];
Sag das nicht.hugo1892":3b6vxyeo schrieb:Natürlich wird das so bei keinem Anwendung finden, ist aber doch klasse das es jetzt funktioniert.
KANN kritisch werden... 1 Pumpe zieht 300mA ca, der limitierende Faktor ist aber der ULN2003. Der hat ne MAXIMUM Peak collector current von 500mA, Wobei hier die Meinungen auseinander gehen ob das für einen Pin oder alle Pins gemeint ist. Laut Datenblatt ist "Output Current (Single Output): 500mA (MAX.) ". Wenn du also 4 Pumpen gleiuchzeitig an hast und der Chip Kalt bleibt (unter +125 °C :stumm: ) dan KANN es klappen, muss aber nicht... Ich rate es nicht zu versuchen. Ich könnte aber mal ne defekte MiniControl nehmen und die mit 6 Pumpen betreiben.hugo1892":3b6vxyeo schrieb:Alle 6 Pumpen zur selben Zeit wird im Test nicht ratsam sein, oder? Mein Netzteil hat 12V mit 2A (24W)
MajorMadness":vjilb91x schrieb:unsigned long time = long(60000L * dosing.mldosing / dosingMlMin[dosing.pinAddr]);
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen