Ejemplo n.º 1
0
/*********************************************************************
  
  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;
}
Ejemplo n.º 2
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;
}