/********************************************************************* Main Program Loop **********************************************************************/ int main() { /* Initializations */ debug_init(); /* This should be first. */ timer_init(); /* This should be before any GPIO activities. */ uint32 ret_val = bcm2835_init(); if ( ret_val == 0 ) { DEBUG_MSG_ERROR("bcm2835_init() failed."); } pwm_init(); pump_init(); therm_init(); pid_init(); pump_start(); /* Take temperature as input from console. */ float setpoint; printf("Set your desired temperature: "); scanf("%f", &setpoint); pid_update_temp_setpoint(setpoint); pid_gain_params pid_gain; pid_gain.k_p = 1; pid_gain.k_d = 1; pid_gain.k_i = 1; pid_gain.k_windup = 1; pid_set_gain(&pid_gain); /* Main Program Loop */ while (1) { pwm_run(); therm_capture(); pid_loop(); } pump_stop(); /* De-initializations */ pump_deinit(); pid_deinit(); pwm_deinit(); /* This should be after all GPIO activities. */ ret_val = bcm2835_close(); if ( ret_val == 0 ) { DEBUG_MSG_ERROR("bcm2835_close() failed."); } timer_deinit(); debug_deinit(); /* This should be last. */ return 0; }
int main(void) { pump_stop(); int test1 = 0; int test = 50; // Serielle initialisieren inits(); init_ser(); puts("Herzlich willkommen zur Ausschankstation. Bitte Folgen Sie den Anweisungen.\n"); while(1){ pump_stop(); //falls die Pumpe noch läuft int fehlertoleranz = 7; int voll = 50; // Welche Menge soll abgefüllt werden puts("Bitte stellen Sie zur Kalibrierung den Becher auf und drücken Sie SW1 \n"); init_messung(); while(piobaseB->PIO_PDSR & KEY1){} //polling (KEY1) int becher = 0; becher = MasseMitGenauigkeit(); //Bechergewicht messen puts("Der Becher hat folgende Masse in Gramm: "); intOutput(becher); puts("\n"); puts("Drücken Sie SW2 um den Becher zu befüllen. \n"); while(piobaseB->PIO_PDSR & KEY2){} //polling (KEY2) if (MasseMitGenauigkeit() < becher+fehlertoleranz && MasseMitGenauigkeit() > becher -fehlertoleranz){ // pump_init(); pump_start(); int alteMasse = becher; int neueMasse = becher; int testMasse = becher; int ausgabe = 1; while ((neueMasse - becher) < voll){ // Solange Masse minus Bechergewicht kleiner als die gewünschte Menge ist, Schleife ausführen test1++; if(test1%test==0){ if(testMasse>=neueMasse){ pump_stop(); puts("keine Gewichtszunahme !! \n"); break; } testMasse = neueMasse; } alteMasse = neueMasse; neueMasse = MasseMitGenauigkeit(); if((neueMasse-becher) >= ausgabe){ puts(" im Becher sind "); intOutput(neueMasse-becher); puts(" Gramm \n"); ausgabe = neueMasse-becher+1; } if (neueMasse < 1 || (alteMasse+6) < neueMasse || (alteMasse-6) > neueMasse){ // Falls Becher weg genommen wird oder Gewichtsveränderung zu groß ist pump_stop(); puts("Fehler: Gewichtsveränderung zu groß \n"); break; } } pump_stop(); puts("Vorgang abgeschlossen \n\n"); } else{ pump_stop(); puts("Fehler: Gewichtsveränderung an Becher zu groß \n"); } } return 0; }