INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wie Interrupt einfügen?
09.11.2014, 21:05
Beitrag #9
RE: Wie Interrupt einfügen?
Oje, da fehlen ja wirklich ein paar absolute Grundlagen...
Also, fangen wir mal an:

Es gibt lokale und globale Variablen. Wenn man eine Variable außerhalb einer Funktion deklariert, dann ist sie global. Innerhalb einer Funktion ist sie lokal. Man kann eine Variable, die schon global deklariert ist, nochmal lokal deklarieren. Dadurch wird sozusagen die globale "versteckt". In Deinem Skript bedeutet das: Es gibt eine globale Variable namens "zufallszahl" und eine lokale Variable namens "zufallszahl". Obwohl sie denselben Namen haben sind es zwei verschiedene Dinge. In der Funktion setup() deklarierst Du eine lokale Variable namens "zufallszahl" und weist ihr einen Wert zu. In der Funktion loop() greifst Du aber auf die globale Variable "zufallszahl" zu. Die hat noch keinen Wert bekommen, da sie ja mit der lokalen in setup() nichts zu tun hat. Variablen, die noch keinen Wert explizit zugewiesen bekommen, haben irgend einen Wert. Das kann z.B. Null sein. (Dasselbe gilt für servo und Position.)
Wenn Du also in setup() und loop() die selbe Variable verwenden möchtest (und nicht zwei verschiedene mit dem selben Namen), dann musst Du in setup() jeweils das "int" vor dem Variablennamen weglassen. Das macht nämlich die Zuweisung zu einer Deklaration mit Initialisierung.

Der nächste Punkt ist vielleicht noch grundlegender:
Wenn Du so etwas hinschreibst:
Code:
zufallszahl = random(1,13);
...dann wird zuerst die Funktion random mit den Parametern (1,13) ausgeführt. Da kommt dann irgendein Wert raus, der der Variablen "zufallszahl" zugewiesen wird. Nehmen wir man an, das ist die 8. Das ist ungefähr so, wie wenn Du in dem Moment die 8 auf einen Zettel schreibst. Wenn Du danach "zufallszahl" irgendwo verwendest, dann wird das immer die 8 ergeben. (Schau nach 10 Sekunden wieder auf den Zettel, es wird immer noch die 8 draufstehen.)
Um der Variablen eine neue Zahl zuzuweisen musst Du auch eine neue Zuweisung hinschreiben. Oder anders gesagt: Jedes mal, wenn der Arduino die Zeile "zufallszahl = random(1,13)" ausführt wird der Variablen ein neuer Wert zugewiesen.

Hilft das ein bisschen weiter?

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.11.2014, 08:09
Beitrag #10
RE: Wie Interrupt einfügen?
Guten Morgen Thorsten,

Das muss ich jetzt erstmal sacken lassen und die einzelnen Infos gedanklich verarbeiten. Ich dachte mir schon sowas wie falsche Deklaration und habe die Zeilen solange angepasst bis beim Compilieren keine Fehlermeldung mehr kam. Jetzt werde ich mich erstmal mit der Variablenzuweisung auseinander setzen.

Viele Dank für Deine Mühen und vor Allem mit Deiner Geduld.

Einen schönen Tag noch

Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.11.2014, 20:19
Beitrag #11
RE: Wie Interrupt einfügen?
Hallo nochmal,
So, nachdem ich jetzt etwas Zeit hatte mich mit den Variablen auseinander zu setzen habe ich mein Werk überarbeitet und nun läuft es erstmal wie gewünscht. Die im Feuerwehrteil benutzen Delays können bleiben, dort soll sowieso nicht anderes parallel geschehen. Nochmals vielen Dank für die Unterstützung.

// Variablentabelle Servosteuerung:

int Kontakt=3;
int Status=0;
int Servo1_rechts=40; //Zufahrt FW=rechts
int Servo1_links=41;
int Servo3_rechts=22;
int Servo4_rechts=23;
int Servo5_rechts=24;
int Servo6_rechts=25;
int Servo7_rechts=26;
int Servo8_rechts=27;
int Servo3_links=28;
int Servo4_links=29;
int Servo5_links=30;
int Servo6_links=31;
int Servo7_links=32;
int Servo8_links=33;

//Variablentabelle Feuerwehreinsatz:
int ledFWST=34; //Stop-LED in FW
int ledBl=35; //Blaulicht-LED inFW
int ledSTFW=36; //Stop vor FW
int ledSTPO=37; //Stop an Post
int ledBR=38; //Stop an Brand
int ledFWBl=39; //Blaulicht aus am Brandt- Stop aus
int RLS=4; // Reflexlichtschranke
int RLS_Stat=0;

// Immer für Zeitspeicher-Variablen "unsigned long" benutzen
unsigned long RefreshZeit = 0; // letzte RefreshZeit

// feste Konstante:
const long interval = 3000; // Interval

void setup(){


// Pins als Ausgang setzen:
pinMode(Servo3_rechts, OUTPUT); //Servo 3 rechts
pinMode(Servo4_rechts, OUTPUT); //Servo 4 rechts
pinMode(Servo5_rechts, OUTPUT); //Servo 5 rechts
pinMode(Servo6_rechts, OUTPUT); //Servo 6 rechts
pinMode(Servo7_rechts, OUTPUT); //Servo 7 rechts
pinMode(Servo8_rechts, OUTPUT); //Servo 8 rechts
pinMode(Servo3_links, OUTPUT); //Servo 3 links
pinMode(Servo4_links, OUTPUT); //Servo 4 links
pinMode(Servo5_links, OUTPUT); //Servo 5 links
pinMode(Servo6_links, OUTPUT); //Servo 6 links
pinMode(Servo7_links, OUTPUT); //Servo 7 links
pinMode(Servo8_links, OUTPUT); //Servo 8 links
pinMode(Kontakt, INPUT); // setzt Kontakt als Eingang
digitalWrite(Kontakt, HIGH); // schaltet den Pullup-Widerstand ein
pinMode(RLS, INPUT); // setzt RLS als Eingang
digitalWrite(RLS, HIGH); // schaltet den Pullup-Widerstand ein


}
void loop(){
Servoansteuerung:
int z1 = random(22,34); //erzeuge Zufallszahl zwischen 22-33
unsigned long AktualZeit = millis(); //Aktualzeit(millis) in currentMillis schreiben
if(AktualZeit - RefreshZeit >= interval) {
RefreshZeit = AktualZeit; //Setze Refrehzeit auf Aktualzeit

if(z1 ==22) {
digitalWrite(Servo3_rechts, HIGH);
}
if(z1 !=22) {
digitalWrite(Servo3_rechts, LOW);
}
if(z1 ==23) {
digitalWrite(Servo4_rechts, HIGH);
}
if(z1 !=23) {
digitalWrite(Servo4_rechts, LOW);
}
if(z1 ==24) {
digitalWrite(Servo5_rechts, HIGH);
}
if(z1 !=24) {
digitalWrite(Servo5_rechts, LOW);
}
if(z1 ==25) {
digitalWrite(Servo6_rechts, HIGH);
}
if(z1 !=25) {
digitalWrite(Servo6_rechts, LOW);
}
if(z1 ==26) {
digitalWrite(Servo7_rechts, HIGH);
}
if(z1 !=26) {
digitalWrite(Servo7_rechts, LOW);
}
if(z1 ==27) {
digitalWrite(Servo8_rechts, HIGH);
}
if(z1 !=27) {
digitalWrite(Servo8_rechts, LOW);
}
if(z1 ==28) {
digitalWrite(Servo3_links, HIGH);
}
if(z1 !=28) {
digitalWrite(Servo3_links, LOW);
}
if(z1 ==29) {
digitalWrite(Servo4_links, HIGH);
}
if(z1 !=29) {
digitalWrite(Servo4_links, LOW);
}
if(z1 ==30) {
digitalWrite(Servo5_links, HIGH);
}
if(z1 !=30) {
digitalWrite(Servo5_links, LOW);
}
if(z1 ==31) {
digitalWrite(Servo6_links, HIGH);
}
if(z1 !=31) {
digitalWrite(Servo6_links, LOW);
}
if(z1 ==32) {
digitalWrite(Servo7_links, HIGH);
}
if(z1 !=32) {
digitalWrite(Servo7_links, LOW);
}
if(z1 ==33) {
digitalWrite(Servo8_links, HIGH);
}
if(z1 !=33) {
digitalWrite(Servo8_links, LOW);
}

Status = digitalRead(Kontakt);
if (Status == LOW) {
goto Feuerwehrablauf;
}
goto Servoansteuerung;
Feuerwehrablauf:
digitalWrite(ledFWST, HIGH); //Stop an FW einschalten
digitalWrite(ledSTFW, HIGH); //Stop vor FW einschalten
delay(2000); //2 sec warten
digitalWrite(ledBl, HIGH); //Blaulicht einschalten
delay(2000); //2 sec warten
digitalWrite(ledFWST, LOW); //Stop an FW ausschalten
delay (1000);
digitalWrite(ledSTFW, LOW); //Stop vor FW ausschalten

//hier soll der Ablauf auf RLS=HIGH warten
RLSAbfrage:
RLS_Stat = digitalRead(RLS);
if (RLS_Stat ==LOW) {
delay(500);
goto RLSAbfrage;
}
digitalWrite(Servo3_links, HIGH); //Servo 3 links einschalten
digitalWrite(Servo4_rechts, HIGH); //Servo 4 rechts einschalten
delay(500); //0,5 sec warten
digitalWrite(Servo3_links, LOW); //Servo 3 links ausschalten
digitalWrite(Servo4_rechts, LOW); //Servo 4 rechts ausschalten
digitalWrite(ledSTPO, HIGH); //LED Post Stop einschalten
digitalWrite(ledBR,HIGH); //LED Brandt Stop einschlten
delay(5000); //5 sec warten
digitalWrite(Servo4_links, HIGH);
delay(500);
digitalWrite(Servo4_links,LOW);
digitalWrite(ledSTPO, LOW); //LED Post Stop ausschalten
delay(1500); //1,5sec warten
digitalWrite(ledFWBl,HIGH); //LED Blaulicht aus einschalten
delay(500); //0,5 sec warten
digitalWrite(ledBR,LOW); //LED Brandt Stop ausschalten
digitalWrite(ledFWBl,LOW); //LED Blaulicht aus ausschalten
delay(500); [/php] //0,5sec warten
goto Servoansteuerung;


}
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.11.2014, 14:39
Beitrag #12
RE: Wie Interrupt einfügen?
Hallo Thorsten,
Zitat:...dann wird zuerst die Funktion random mit den Parametern (1,13) ausgeführt. Da kommt dann irgendein Wert raus, der der Variablen "zufallszahl" zugewiesen wird. Nehmen wir man an, das ist die 8. Das ist ungefähr so, wie wenn Du in dem Moment die 8 auf einen Zettel schreibst. Wenn Du danach "zufallszahl" irgendwo verwendest, dann wird das immer die 8 ergeben. (Schau nach 10 Sekunden wieder auf den Zettel, es wird immer noch die 8 draufstehen.)
Das ist das Genialste was ich je gelesen habe um einen Sachverhalt darzustellen.
Grüße RK
PS: Musste einfach mal raus

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.11.2014, 00:15
Beitrag #13
RE: Wie Interrupt einfügen?
(19.11.2014 14:39)rkuehle schrieb:  Das ist das Genialste was ich je gelesen habe um einen Sachverhalt darzustellen.
Grüße RK
PS: Musste einfach mal raus
Danke!

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  while Schleife nach sleep mode interrupt tklaus 13 268 23.11.2016 17:40
Letzter Beitrag: Tommy56
  NRF24L01 Interrupt MeisterQ 22 519 02.11.2016 15:50
Letzter Beitrag: MeisterQ
  Interrupt matthias3579 5 225 15.10.2016 13:23
Letzter Beitrag: hotsystems
  Interrupt und Sicherung der Prozessorregister MKc 5 229 31.08.2016 11:17
Letzter Beitrag: MKc
  Interrupt bei Serieller Übertragung Binatone 8 369 21.06.2016 14:09
Letzter Beitrag: Scheams
  Interrupt wenn softwareSerial Daten BennIY 3 448 01.05.2016 18:39
Letzter Beitrag: tiny85fan
  if Bedingung einfügen gronph 5 458 20.03.2016 13:56
Letzter Beitrag: gronph
  Timer Interrupt Anfängerprobleme Fox 4 625 05.03.2016 02:28
Letzter Beitrag: Fox
  Problem mit Pin Change Interrupt in Library Retian 0 321 10.02.2016 23:37
Letzter Beitrag: Retian
  Aus While-Schleife durch Interrupt aussteigen Zill3 10 1.196 08.02.2016 16:28
Letzter Beitrag: ardu_arne

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste