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:
  • 1 Bewertungen - 3 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Neo's Roboter
14.10.2015, 10:21
Beitrag #33
RE: Neo's Roboter
(14.10.2015 10:03)Neoneo23 schrieb:  wie wird denn so ein Programm abgearbeitet? Der MC arbeitet ja jede Zeile eines Programms ab. Also liest er jede Zeile und das macht er von oben nach unten. Wie oft macht er das denn in der Sekunde? Und kann man bestimmte Programmteile überspringen?

Hab mal was mit GOTO gelesen allerdings war das bei Basic.
Wie oft er das in der Sekunde macht, hängt vom Programm (Sketch) ab. Ein Durchlauf sollte nur wenige Millisekunden dauern. Daher sollte auch kein delay() im Sketch vorkommen, der den Sketch bremst.
Bestimmte Teile kannst du mit If-Anweisungen oder Switch/Case überspringen. Ein GOTO geht auch, ist aber selten und nur wenn es nicht anders geht.

Um die einzelnen Befehle kennen zu lernen, empfehle ich dir ein Buch zuzulegen.
Das Arduino Kochbuch ist da sehr aussagekräftig (Hard und Software).

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.10.2015, 10:26 (Dieser Beitrag wurde zuletzt bearbeitet: 14.10.2015 10:27 von Klaus(i).)
Beitrag #34
RE: Neo's Roboter
Zitat:wie wird denn so ein Programm abgearbeitet?
So ein Programm, das Du schreibst wird vom Compiler übersetzt in ein Programm, was der Prozessor versteht (Machine Code). So ein Prozessor hat eben nur einen bestimmten Befehlssatz.
Für jeden dieser Befehle benötigt der Prozessor eine unterschiedliche Anzahl von Taktzyklen.
Zitat:Wie oft macht er das denn in der Sekunde?
Der Takt bei einem UNO ist zB. 16 MHz = 16.000.000 Takte/ s.

Der GOTO wird in C++ meines Wissens nicht unterstützt. Hier hilft aber eine strukturierte Programmierung (s.o.)

Gruß, Klaus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.10.2015, 10:29
Beitrag #35
RE: Neo's Roboter
(14.10.2015 10:26)Klaus(i) schrieb:  Der GOTO wird in C++ meines Wissens nicht unterstützt.
Das stimmt nur zum Teil, es wird auf dem Arduino einwandfrei kompiliert und funktioniert danach auch.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.10.2015, 10:36
Beitrag #36
RE: Neo's Roboter
Danke,

aber was ist denn wenn ich sagen möchte, Wenn z.bsp. Pin 8= High dann überspringe einen Programmteil und führe einen anderen Programmteil aus sonst nichts. Das soll er dann solange machen, bis pin 8= LOW

@hotsystem:

Heißt das Buch wirklich Arduino Kochbuch?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.10.2015, 10:40
Beitrag #37
RE: Neo's Roboter
(14.10.2015 10:36)Neoneo23 schrieb:  Danke,

aber was ist denn wenn ich sagen möchte, Wenn z.bsp. Pin 8= High dann überspringe einen Programmteil und führe einen anderen Programmteil aus sonst nichts. Das soll er dann solange machen, bis pin 8= LOW

@hotsystem:

Heißt das Buch wirklich Arduino Kochbuch?
Ja, das Buch heißt so.

Der Code (Beispielcode) ist dann z.B.

Code:
If(Pin8==HIGH) {
mache dein Ding;
}
else {
Mache es nicht;
}
Und das ist in dem Buch sehr gut beschrieben.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.10.2015, 10:45 (Dieser Beitrag wurde zuletzt bearbeitet: 14.10.2015 10:59 von Neoneo23.)
Beitrag #38
RE: Neo's Roboter
Ich hab einen neuen Programmteil implementiert (rot) so dreht sich mein Roboter aber immer nur nach rechts. Habt Ihr ein Bsp. wie ich das machen kann, dass er sich abwechselnd nach rechts und beim nächsten Bumper= high nach links dreht?

Also er soll wenn Bumper= high nach rechts drehen und wenn der Bumper beim nächsten mal wieder = high nach links drehen

Hier der Sketch:

int moli=2; //Antrieb Links auf pin2
int more=3; //Antrieb Rechts auf pin3
int zuruck=4; //Relais zum umschalten vor oder zurück Fahrt auf pin4
int bumper=5; //Bumper auf pin5
int bumperstatus=0; //Taster gedrückt oder nicht



void setup()
{
pinMode(moli,OUTPUT); //moli ist ein ausgang
pinMode(more,OUTPUT); //more ist ein ausgang
pinMode(zuruck,OUTPUT); //zuruck ist ein ausgang
pinMode(bumper,INPUT); //bumper ist ein eingang
}

void loop()
{


if(bumperstatus==HIGH) //wenn Bumper gedrückt
{
digitalWrite(moli,LOW); //Motor Links aus
digitalWrite(more,LOW); //Motor rechts aus
delay(500); //warten 0,5 sekunden
digitalWrite(zuruck,HIGH); //auf rückwerts schalten
delay(500); //warten 0,5 sekunden
digitalWrite(moli,HIGH); //Motor Links an
digitalWrite(more,HIGH); //Motor rechts an
delay(2000); //warten 1 sekunden
digitalWrite(moli,LOW); //Motor Links aus
digitalWrite(more,LOW); //Motor rechts aus
delay(500); //warten 0,5 sekunden
digitalWrite(moli,HIGH); //Motor Links ein
digitalWrite(more,LOW); //Motor rechts aus

delay(1000); //warten 1 sekunden
digitalWrite(zuruck,LOW); //auf vorwerts schalten
delay(500); //warten 0,5 sekunden
}
else
{
digitalWrite(moli,HIGH); //Motor Links an
digitalWrite(more,HIGH); //Motor rechts an
}
}

(14.10.2015 10:29)hotsystems schrieb:  
(14.10.2015 10:26)Klaus(i) schrieb:  Der GOTO wird in C++ meines Wissens nicht unterstützt.
Das stimmt nur zum Teil, es wird auf dem Arduino einwandfrei kompiliert und funktioniert danach auch.

Schreibt man dann:

A
B
C
GOTO (G)
D
E
F
G

damit er die Teile D,E und F auslässt?

Buch ist bestellt :-)))
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.10.2015, 12:25 (Dieser Beitrag wurde zuletzt bearbeitet: 14.10.2015 12:27 von hotsystems.)
Beitrag #39
RE: Neo's Roboter
Zitat:Schreibt man dann:

A
B
C
GOTO (G)
D
E
F
G

damit er die Teile D,E und F auslässt?

Nein so:

Code:
A
B
C
Goto hier_weiter

D
E
F
hier_weiter:
G

Was das andere Thema betrifft, musst du den aktuellen Stand zwischenspeichern.

Ähnlich wie:

if(Aktuelle_Richtung==rechts) {
//Fahre links
Aktuelle_Richtung=links;
}

if(Aktuelle_Richtung==links) {
//Fahre links
Aktuelle_Richtung=rechts;
}

So in der Art musst du das einbauen.

Und setze die einzelnen Richtungen in Funktionen, das wird übersichtlicher.

Das mit dem Buch ist ne gute Wahl. Dann lesen wir hier zukünftig weniger von dir. WinkWink

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.10.2015, 13:02
Beitrag #40
RE: Neo's Roboter
Hmm, das habe ich nicht verstanden.

Ich dachten an:

int drehrichtung=1 // bei jedem weiteren Bumper=high wird 1 dazugezählt

Also:

Drehrichtung=2,3,4 usw.

dann hab ich mir gedacht, dass ich sage wenn drehrichtung=even drehe rechtsrum und wenn drehrichtung=odd drehe linksrum

{
if(drehrichtung==odd)
{
digitalWrite(moli,LOW);
digitalWrite(more,HIGH);
}
else
{
digitalWrite(moli,HIGH);
digitalWrite(more,LOW);
}

So das war mein Gedanke. Was haltet Ihr davon?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  kleiner Roboter blichi 24 790 27.07.2016 14:02
Letzter Beitrag: torsten_156
  Roboter-Bau Probleme blebbens 8 381 12.07.2016 07:35
Letzter Beitrag: Binatone
  Selbstfahrender Roboter Programm änderung hilfe ? arekklone 11 548 06.07.2016 14:59
Letzter Beitrag: Binatone
  SR-04 + UNO + 4WD Roboter, Abstandsfehler Marc2014 25 2.848 21.09.2014 21:42
Letzter Beitrag: Thorsten Pferdekämper
  Roboter J4Ng0 2 1.531 21.07.2013 15:49
Letzter Beitrag: Snake8811

Gehe zu:


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