diff --git a/ActionPi.cpp b/ActionPi.cpp index 64bef6a..4d53b60 100644 --- a/ActionPi.cpp +++ b/ActionPi.cpp @@ -1,6 +1,7 @@ /* * ActionPi.cpp - * + * Version 1.01 + * IT-Hardware Projekt GWS-Bühl * Copyright 2016 * * This program is free software; you can redistribute it and/or modify @@ -17,8 +18,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. - * - * + * + * */ #include #include @@ -34,7 +35,6 @@ #include #include - using namespace std; string removeSpaces(string input); @@ -69,7 +69,6 @@ void kontrast(int richtung); void saettigung(int richtung); void verschlusszeit(int richtung); - void setISO ( int iso ); void setBrightness ( unsigned int brightness ); void setContrast ( int contrast ); @@ -77,7 +76,6 @@ void setSaturation ( int saturation ); void setExposureCompensation ( int val ); void setShutterSpeed ( unsigned int ss ); - int getMODI(); int getREC(); int getEx1(); @@ -153,7 +151,7 @@ int main(int argc, char **argv) } } } - if(getMODI()){ + if(getMODI()){ // Eindtellungen nur im Fotomodus einstellungen(); einstellungErhoehen(); einstellungVerringern(); @@ -167,6 +165,7 @@ int main(int argc, char **argv) return 0; } +//setzt Fotoeinstellungen zurück void zuruecksetzten() { if(getEx2()){ @@ -184,6 +183,7 @@ void zuruecksetzten() return; } +//öffnet Einstellungen und zeigt die verschiedenen Optionen an void einstellungen() { if(getEx2()){ @@ -216,8 +216,9 @@ void einstellungen() } } return; -}// Ende der Einstellungen +} +//setzt die gewählte Einstellung auf den nächts höheren Wert void einstellungErhoehen() { if(getEx3()){ @@ -247,6 +248,7 @@ void einstellungErhoehen() return; } +//setzt die gewählte Einstellung auf den nächts niedrigeren Wert void einstellungVerringern() { if(getEx1()){ @@ -281,6 +283,7 @@ void einstellungVerringern() return; } +//Werte für ISO 100,400,600,600,800 min:100; max:800 void iso(int richtung) { zaehlerISO = zaehlerISO + (richtung); @@ -315,6 +318,7 @@ void iso(int richtung) } +//Werte für Helligkeit 25,50,75,100 void helligkeit(int richtung) { zaehlerHelligkeit = zaehlerHelligkeit + (richtung); @@ -348,6 +352,7 @@ void helligkeit(int richtung) return; } +//Werte für Kontrast -50,0,50,100 void kontrast(int richtung) { zaehlerKontrast = zaehlerKontrast + (richtung); @@ -381,6 +386,7 @@ void kontrast(int richtung) return; } +//Werte für Sättigung -100,-75,0,50,100 void saettigung(int richtung) { zaehlerSaettigung = zaehlerSaettigung + (richtung); @@ -419,6 +425,7 @@ void saettigung(int richtung) return; } +//Werte für Verschluss-/Belichtungszeit 0,5000,20000,40000,100000 kleiner = kürzere Verschlusszeit void verschlusszeit(int richtung) { zaehlerVerschlusszeit = zaehlerVerschlusszeit + (richtung); @@ -457,6 +464,7 @@ void verschlusszeit(int richtung) return; } +//wird von void zuruecksetzten() aufgerufen und setzt die Fotoeinstellungen zurück auf den Standartwert void setStandardWerte() { valISO = 400; @@ -467,85 +475,90 @@ void setStandardWerte() return; } +//startet die Videoaufnahme void videoAufnehmen() { - bcm2835_gpio_set(LED); - videoAufnahme = true; - system("killall raspivid"); - system("raspivid -o vid.h264 -t 1140000 -p '0,-10,720,480' &"); //nimmt video mit 19 Minuten auf -n = nopreview -f fullscreen "-p '0,0,1280,720' für Position und Größe des Vorschau Bildes" - liveBildWirdAngezeigt = false; + bcm2835_gpio_set(LED); //schaltet LED an + videoAufnahme = true; // Merker für aktuelle Videoaufnahme + system("killall raspivid"); //beendet den Prozess raspivid (Liveausgabe) + system("raspivid -o vid.h264 -t 1140000 -p '0,-10,720,480' &"); //nimmt video mit 19 Minuten auf -o temporäre output Datei, -p '0,-10,1280,720' für Position und Größe des Vorschau Bildes + liveBildWirdAngezeigt = false; //setzt Merker für Livebildausgabe return; } +//nimmt ein temporäres Foto im ppm Format auf int fotoAufnehmen() { - bcm2835_gpio_set(LED); + bcm2835_gpio_set(LED); //schaltet LED an system("killall raspivid"); raspicam::RaspiCam Camera; //definiert Camera Objekt - //Öffnet Camera + //setzt die gewählten Fotoeinstellungen Camera.setISO(valISO); Camera.setBrightness(valHelligkeit); Camera.setContrast(valKontrast); Camera.setSaturation(valSaettigung); Camera.setShutterSpeed(valVerschlusszeit); - - //cout<<"Öffne Kamera..."<tm_hour; //holen der Stunden + int imin = aT->tm_min; //holen der Minuten + int isec = aT->tm_sec; //holen der Sekunden + std::string sstd = to_string(istd); //in String konvertieren + std::string smin = to_string(imin); + std::string ssec = to_string(isec); + std::string datName = sstd + "-" + smin + "-" + ssec + "ActionPi"; //zu einem String zusammenfügen + return datName; } +//erstellen des neuen Ordners void creatNewFolder() { - std::string folderName = getFolderName(); - std::string pfad = "/media/usb0/DCIM/" + folderName; - bool exists = ordnerExistiert(pfad); - if(exists == false) + std::string folderName = getFolderName(); //holen des Ordnernamen + std::string pfad = "/media/usb0/DCIM/" + folderName; //Pafd des Ordners + bool exists = ordnerExistiert(pfad); //prüfen ob Ordner existiert + if(exists == false) //wenn nein dann neuen Ordner erstellen { - std::string comand = "mkdir " + pfad + ""; + std::string comand = "mkdir " + pfad + ""; //Befehl zum erstellen des Ordners const char *cComand = comand.c_str(); system(cComand); cout << "Ordner erstellt." << endl; } - else + else //falls Ordner bereits vorhanden { cout << "Ordner existiert bereits." << endl; } return; } +//erstellen des DCIM Ordners void creatDCIM() { std::string dcmiPfad = "/media/usb0/DCIM"; @@ -610,20 +619,22 @@ void creatDCIM() } } +//prüft ob Ordner/DCIM bereits existiert bool ordnerExistiert(string pfad) { const char *cPfad = pfad.c_str(); - DIR *pDir; + DIR *pDir; //Verzeichniss wird auf aktuellen Pfad gesetzt bool oExists = false; - pDir = opendir(cPfad); - if(pDir != NULL) + pDir = opendir(cPfad); //öffnen des Pfades + if(pDir != NULL) //falls Ordner unter dem aktuellen Pfad vorhanden pDIR ungleich NULL { oExists = true; - closedir(pDir); + closedir(pDir); //schließen des Ordners } return oExists; } +//prüft ob Ordner bereits existiert (wird gebraucht sollt die Kamera länger als 0.00 Uhr in Betrieb sein "0 Uhr Bug") void pruefeNewFolder(string input) { std::string pfad = "/media/usb0/DCIM/" + input; @@ -638,43 +649,24 @@ void pruefeNewFolder(string input) return; } +//erstellt den Ordnernamen aus der auktuellen Uhrzeit (siehe gibDateiName) string getFolderName() { - std::time_t t = std::time(0); - char *ti = ctime(&t); - std::string folName = std::string() + ti; - folName = removeSpaces(folName); - folName = removeDp(folName); - folName = removeEdnl(folName); - folName = editFolder(folName); +char *wtagName[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; + char *monatName[] = { "Dec", "Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov" }; + + time_t t = time(0); + struct tm *aT = localtime(&t); + int tag = aT->tm_mday; + int wtag = aT->tm_wday; + int monat = aT->tm_mon; + + std::string stag = std::to_string(tag); + std::string tagumonat = std::string() + wtagName[wtag] + "-" + monatName[monat]; + std::string folName = tagumonat + "-" + stag; return folName; } -string editFolder(string input) -{ - input.erase(8,6); - input.erase(12,1); - input.insert(8,"-"); - return input; -} - -string removeSpaces(string input) //entfernt " " -{ - input.erase(std::remove(input.begin(),input.end(),' '),input.end()); - return input; -} - -string removeDp(string input) //entfernt ":" -{ - input.erase(std::remove(input.begin(),input.end(),':'),input.end()); - return input; -} - -string removeEdnl(string input) //entfernt endl -{ - replace(input.begin(), input.end(), '\n', 'A'); - return input; -} void initialisierung() { @@ -693,6 +685,7 @@ bcm2835_gpio_set_pud(Ex3, BCM2835_GPIO_PUD_UP); //Schalter als Öffner return; } +//liest die Schalterstellung von MODI ein int getMODI() { valMODI = !bcm2835_gpio_lev(MODI); @@ -700,30 +693,35 @@ int getMODI() return valMODI; } +//liest die Schalterstellung von REC ein int getREC() { valREC = !bcm2835_gpio_lev(REC); return valREC; } +//liest die Schalterstellung von Ex1 ein int getEx1() { valEx1 = !bcm2835_gpio_lev(Ex1); return valEx1; } +//liest die Schalterstellung von Ex2 ein int getEx2() { valEx2 = !bcm2835_gpio_lev(Ex2); return valEx2; } +//liest die Schalterstellung von Ex3 ein int getEx3() { valEx3 = !bcm2835_gpio_lev(Ex3); return valEx3; } +//lässt die Status-LED 10 mal blinken void blinken() { @@ -737,6 +735,7 @@ void blinken() return; } +//Herunterfahren der Kamera bei gleizeitgem drücken des REC Knopfes und der mittleren Funktionstaste void herunterfahren() { if(getREC() && getEx2()) @@ -749,11 +748,12 @@ void herunterfahren() return; } +//beenden des Kameraprogramms bei gleichzeitigen drücken der äußeren Funktionstasten void programmBeenden() { if(getEx3() && getEx1()) { - aktiv = false; + aktiv = false; // Merker für while-Schleife system("killall raspivid"); blinken(); }