Had to chop up the program since it exceeded the 9k characters...
[code]
void setup ()
{
Serial.begin(9600); //Serieel inlezen van data met een snelheid van 9600 baud
pinMode(EH,INPUT);
pinMode(PumpHigh,OUTPUT);
pinMode(PumpLow,OUTPUT);
pinMode(LSHigh,OUTPUT);
pinMode(Pump,OUTPUT);
pinMode(MainSwitch,INPUT_PULLUP); //PULLUP weerstand om stoorsignaal te ellimineren
pinMode(MainSwitchHigh,OUTPUT);
pinMode(PumpPin, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(SDaanwezig,INPUT_PULLUP); //pullup omdat deze rehtstreeks aan de ground hangt
lcd.begin(16,2);
lcd.noDisplay();
SD.begin(10, 11, 12, 13); // De pinnen die gebruikt worden om op de SD-kaart weg te schrijven
#ifdef AVR
Wire.begin();
#else
Wire1.begin();
#endif
rtc.begin();
rtc.adjust(DateTime(2015,3,26,9,44,0)); // Het juist zetten van de datum en de tijd in het real time shield.
// (DateTime(jaar,maand,dag,uur,minuten,seconden))
}
/*Het programma*/
void loop()
{
DateTime now = rtc.now();
buttonState2 = digitalRead(buttonPin2); // Hier word de status van de buttonpin weggeschreven in de buttonState2
unsigned long currentMillis = millis(); // Hier word de tijd dat het systeem draait weggeschreven naar currentMillis
unsigned long currentMillis2 = millis();
MainSwitchState = digitalRead (MainSwitch); //Status van de hoofdschakelaar inlezen
if (MainSwitchState == LOW) //Als de status v.d. hoofdschakelaar laag is
{
digitalWrite(MainSwitchHigh,HIGH); //Led hoofdschakelaar hoog
SensorState = digitalRead (EH); //Status van de sensor inlezen op ingang EH
if (SensorState == HIGH) //Als status sensor = hoog
{
previousMillis2 = currentMillis;
digitalWrite (Pump,LOW); //Pomp => laag
digitalWrite (PumpHigh,LOW); //Led dat zegt dat pomp aan staat => laag
digitalWrite (PumpLow,HIGH); //Led dat zegt dat pomp uit staat => hoog
digitalWrite(LSHigh,HIGH); //Led dat zegt dat sensor bediend wordt => hoog
Serial.println("pomp = LOW"); //Status van de pomp doorsturen naar seriële monitor
digitalWrite (buttonState, LOW);
}
else { //Sensor niet bediend
if (currentMillis - previousMillis2 >=interval2) {
digitalWrite (Pump,HIGH); //Pomp => aan
digitalWrite (PumpHigh,HIGH); //Led pomp aan => hoog
digitalWrite (PumpLow,LOW); //Led pomp uit => laag
digitalWrite(LSHigh,LOW); //LevelSwitchHoog Led => laag
Serial.println("pomp = HIGH"); //Status van de pomp doorsturen naar seriële monitor
digitalWrite (buttonState, HIGH);
}
};
}
else //Als de hoofdschakelaar af staat werkt de pomp niet nog branden de ledjes
{
digitalWrite(Pump,LOW);
digitalWrite(PumpLow,LOW);
digitalWrite(PumpHigh,LOW);
digitalWrite(LSHigh,LOW);
digitalWrite(MainSwitchHigh,LOW);
digitalWrite (buttonState, LOW);
Serial.println("alles = LOW");
};
if (buttonState != lastButtonState) { // Edge detection of the pump
// Het geïnverteerde van lastButtonState wordt dan weggeschreven in buttonState
if (buttonState == HIGH) { // Als buttonState hoog is wil dit zeggen dat de pomp begint met draaien
myFile = SD.open("werkuren.txt", FILE_WRITE); // Voor men in een bestand kan schrijven moet men dit eerst openen
myFile.print("Start pompen"); //
myFile.println();
myFile.print(now.year(), DEC);
myFile.print('/');
myFile.print(now.month(), DEC);
myFile.print('/');
myFile.print(now.day(), DEC);
myFile.print(' ');
myFile.print(now.hour(), DEC);
myFile.print(':');
myFile.print(now.minute(), DEC);
myFile.print(':');
myFile.print(now.second(), DEC);
myFile.println();
myFile.close();
}
else {
myFile = SD.open("werkuren.txt", FILE_WRITE);
myFile.print(now.year(), DEC);
myFile.print('/');
myFile.print(now.month(), DEC);
myFile.print('/');
myFile.print(now.day(), DEC);
myFile.print(' ');
myFile.print(now.hour(), DEC);
myFile.print(':');
myFile.print(now.minute(), DEC);
myFile.print(':');
myFile.print(now.second(), DEC);
myFile.println();
myFile.print("Einde pompen");
myFile.println();
myFile.println();
myFile.close();
}
}
if (buttonState2 == HIGH) { // Als de knop van lcd scherm aan hoog wordt dan gebeurt het volgende (zier hieronder)
previousMillis = currentMillis; // PreviousMillis wordt gelijk aan currentMillis, previousMillis houd de tijd bij van de laatste keer dat er op de knop lcd aan werd gedrukt
digitalWrite(ledPin , HIGH); // De pin van het scherm en van de background worden hier hoog gezet, het scherm gaat dus aan
lcd.display();
}
if(currentMillis - previousMillis >= interval) { // Als currentMillis (momentele systeem tijd) min de previousMillis (laatste keer dat op knop is gedrukt)
// groter of gelijk wordt aan het interval (tijd dat lcd aan mag blijven) dan gebeurt het volgende
digitalWrite(ledPin , LOW); // De schermpin en backgroundpin worden hier weer laag gezet wanneer de tijd verlopen is.
lcd.noDisplay();
}
if (digitalRead (SDaanwezig) == HIGH) // origineel SD.begin(10, 11, 12, 13), werkt niet , high = geen detectie
{
//Als niemand op het knopje voor de error te skippen duwt
while(digitalRead (buttonState) == LOW) //Dan blijf je de error op het LCD schrijven. (while loop gaat oneindig keer door. -- aangepast
{
while(digitalRead (SDaanwezig) == HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.println("SD card error"); // Error if SD doesnt load
}
{ delay(2000);
}
if (buttonState == HIGH) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("pomp aan");
}
else {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("pomp uit");
}
lastButtonState = buttonState;
delay (1000);
};
[/code]