Hallo,
Ik ben aan een project met de arduino aan het werken (een schoolproject: Hoewel ik nooit een microcontroller heb leren programmeren.). Ik heb de arduino nog maar een week dus ik ben nog vrij nieuw.
Het doel is om telkens in een file op de SD kaart de datum en tijd te noteren wanneer de pomp word aangestuurd door een sensor.
Ik heb een filmpje op YouTube gevonden dat me erg heeft geholpen: ( Arduino Tutorial Lesson 5.1 - SD Card Write - YouTube ) en ik heb zijn programma overgenomen als basis om verder te bouwen. (natuurlijk heb ik zijn naam vermeld)
Wat er moet gebeuren: Het programma kijkt eerst of er een SD kaart is ingeplugged, als dit niet zo is zal deze een error geven en de return functie uitvoeren. (Zal de return functie mijn Arduino resetten of in stand-by zetten tot hij manueel gereset wordt?) daarna wacht hij tot de sensor een signaal geeft (gesimuleerd door een knopje) aan de pomp. Als er een signaal is zal de display weergeven dat de pomp is aangestuurd en een SD file ondertussen openen.
Is er een signaal EN is er geen error door het openen van de file, dan zal deze de datum en tijd in het SD kaartje schrijven en een mededeling laten verschijnen dat er iets geschreven is op de SD kaart. Daarna sluit deze de file.
Als er een signaal is maar ook een error dan zal deze voor 5000ms de error laten zien en daarna een return functie uitvoeren.
Als er geen signaal is dan zal er op de display 'geen signaal' te lezen zijn en wachten tot een signaal (Daarom heb ik het in void loop gestoken zodat deze continu naar een ingang blijft zoeken.)
De Serial printlines zullen vervangen worden door commandos voor het LCD display (16x2)
Dit is de code:
/*
SD write by Aaron Lee
This sketch writes text data to an SD card
Simulatie van sensor - Pin 2
Master out slave in - Pin 11
Master in slave out - pin 12
Clock - pin 13
Chip select - pin 10
*/
#include <SD.h> //Bibliotheek voor de SD commands
const int buttonPin = 2; // Simuleren van een sensor dmv drukknop
int buttonState = 0 // variable van deze knop
File myFile; // Make een data file
void setup()
{
Serial.begin(9600); // start communication at 9600baud
pinMode(buttonPin, INPUT); // Pin als input aanduiden
Serial.println("SD wordt geladen.."); // een mededeling dat alles goed gaat
if (!SD.begin(10)) // if command om te zien of er errors zijn, 10 is chipselect pin
{
Serial.println("SD card error") // Error als de SD niet geladen kan worden
return; //Stopt programma na deze error
}
Serial.println("SD geladen") // Zegt dat de SD succesvol geladen is
}
void loop()
{
buttonState = digitalRead(buttonPin)
if (buttonState == LOW) // Als de sensor geactiveerd is (Sensor is normaal gesloten)
{
Serial.println("Pomp staat aan") //Zegt wanneer de pomp geactiveerd is
myFile = SD.open("werkuren.txt", FILE_WRITE); // Opent en schrijft in het file
if (myFile) // If de sensor is geactiveerd AND if de file geopend kan worden
// Kben niet zo zeker van 2 IF functies in elkaar, maar er bestaat geen 'IF .. AND..' functie in arduino
{
myFile.println("Date and time"); // Schrijft de datum en tijd in de SD kaart (dit ben ik nog aan
//het onderzoeken hoe ik dit ga doen, tijd van een clock shield? Maar waarvan de datum dan?)
Serial.println("Opgeslagen op SD") // Zegt dat er iets geschreven is in het SD kaartje
myFile.close() // Sluit de file tot de volgende keer de sensor actief is (Daarom void loop)
}
else
{
Serial.println("Error met bestand") // Error als het bestand niet kan geopend worden
delay(5000)
return; // na 5seconden returned het programma
}
}
else
{
delay(1000);
Serial.println("Pomp staat uit") // Als er geen signaal is laten zien dat de pomp niet werkt
}
}
Alle hulp is welkom!