ubuntuusers.de

do loop schleifen frage

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Tredory

Anmeldungsdatum:
30. Juni 2007

Beiträge: Zähle...

Wohnort: 49509 Recke

Hi, ich habe mir gerade mal ein Programm geschrieben, womit ich über den Parallelport einen Gleichstrommotor über einen L298. Steuern kann. Das programm sorgt nur dafür das ich den Motor in verschiedenen Geschwindigkeiten laufen lassen kann, d.h. ich die Impulszeiten in denen der Motor Strom bekommt verändern kann.

#include <iostream>
#include <sys/io.h>
#include <unistd.h>
using namespace std;

 int main()
 {
 ioperm(0x378,1,1);
 int i = 1;
 int impulslaenge;
 int pause;
 cout << endl <<  "Bitte die Impulszeit angeben" << endl;
 cin >> impulslaenge;
 cout << "Bitte die Pausenlänge zwischen den Impulsen angeben (mikrosekunden)" << endl; 
 cin >> pause;

  do
  {
  outb(5,0x378);
  usleep(impulslaenge);
  outb(0,0x378);
  usleep(pause);
  }
  while (i==1);

 return 0;
 } 

Nun zu meiner Frage:

Immoment ist es so das ich das Programm starte, die Werte eingebe und er dann in die do loop Schleife geht und der Motor läuft. Ich bekomme dann das programm aber nur aus indem ich das Terminal schließe.

Wie kann man das Programmieren das ich während die do -loop schleife läuft (also der Motor läuft) den Wert der Variablen "impulslaenge" ändern kann, und auch noch irgendwie das Programm beenden kann (also nicht das ich das Terminal schließen muss um das Programm abzuwürgen).

Ich hab da selbst keine idee zu, denn wenn er in der schleife ist kann ich ja mit cin keine abfrage einbauen weil er die schleife dann ja immer anhalten würde und auf eine eingabe warten würde.

Ich hoffe ich konnte mein Problem ausreichend rüberbringen 😉

DaDrivel

Avatar von DaDrivel

Anmeldungsdatum:
16. April 2007

Beiträge: 29

Hi!

Ich denke, dass ließe sich über Threads ganz gut lösen:
Vor deiner Schleife erstellst du einen Thread, der deinen Motor steuert.
In deiner Schleife frägst du nun die Tasteneingabe ab (per cin), und angenommen, der
Benutzer will, dass das Programm aufhört, kannst du den Thread und das Hauptprogramm
beenden.

Vielleicht gibt es auch noch eine klügere Methode über Abfragefunktionen, die nicht blocken,
aber da kenn ich unter Linux leider keine...

DaDrivel

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4694

Wohnort: Berlin

@Tredory: Die Schleife, die Du da konstruiert hast würde man in der Regel als while (1) { … } schreiben. Und bei diesem Programm geht es noch, aber wenn es komplexer wird, solltest Du wirklich anfangen Blöcke ordentlich einzurücken.

Tredory

(Themenstarter)

Anmeldungsdatum:
30. Juni 2007

Beiträge: 24

Wohnort: 49509 Recke

@ DaDrivel
hi, danke für die antwor, hatte vergessen zu erwähnen das ich gerade mit programmieren anfange 😉 Was sind Threads ? kannst du mir da evt code beispiele geben ?

u.li

Avatar von u.li

Anmeldungsdatum:
12. Mai 2007

Beiträge: 503

Wohnort: Hürth

Thread (Informatik) das geht dann bspw mit der Native POSIX Thread Library

Ohne Threads mit periodischem Abfragen von STDIN gehts nach abschalten des blocking read und warten auf Enter so: http://www.ubuntuusers.de/paste/12619/
Kann aber noch verbessert werden, so wird zB nur ein Zeichen pro Schleifendurchlauf gelesen.
Den Output-Teil davon konnte ich nicht testen, aber nehme an, dass das auch funbktioniert.

Die Funktionen habe ich von hier gestohlen.

Antworten |