RoboterCC - Robotic Code Compiler
Forum Robot Kits NIBO 2 Brauche idee zur Umsetzung meines Programms

Welcome

Nachrichten

Sie sind nicht eingeloggt.

Werbung

Banner

Letzte Themen

  • Keine Beiträge vorhanden

Site-Statistic

  • 7433 private projects
  • 378 public projects
  • 16180353 lines compiled
  • 58212 builds
NIBO @ facebook YouTube Twitter
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:

THEMA: Brauche idee zur Umsetzung meines Programms

Brauche idee zur Umsetzung meines Programms 11 Jahre 7 Monate her #1446

  • Henry
  • Henrys Avatar
  • OFFLINE
  • Senior Boarder
  • Beiträge: 37
Hallo,

in meinen Programm habe festgelegt,wenn sich vor den Sensoren ein nahes Objekt befindet+LED rot dann soll copro stoppen und soll erst weiterfahren,wenn Objekt entfernt ist und LED erloschen ist(bzw.bei mir orange oder grün leuchtet). Das kann man sich vorstellen,wenn etwas vor dem Nibo vorbeiläuft.Das funkitoniert auch soweit.

Nun möchte ich noch: Wenn nur der vordere Sensor rot leuchtet und copro stop besteht, dann soll der Nibo nach 10 sec. ,wenn sich das Objekt nicht weiter bewegt, sich dann um 180° drehen und wieder die selbe Strecke(über Linie) wieder zurückfahren.

Meine Idee dazu ist:(Auszug aus meinen Programm)
if (distances_quantitative[1]==2 //Sensor vorne rechts,(rot LED)
||distances_quantitative[2]==2 //oder Sensor vorne,(rot LED)
||distances_quantitative[3]==2) //oder Sensor vorne links,(rot LED)
{
copro_stop(); //Motor Stop!
}
//**Ab hier ??**//
if (distances_quantitative[2]==2&&copro_stop()) //wenn Sensor vorne und Copro stop
{
switch (counter++) //dann zählen(soll warten)
{
case200: //Sprungmarke 200
copro_setTargetRel(0x35,-0x35,20); //linke Rad vor,rechte zurück,20Tick
break; //Anweisung unterbrechen
}
}
Leider funkioniert das nicht,wie gewünscht.Und ohne counter,case und break nur solange,bis meine LED rot(Sensor vorne)erloschen ist.Ich möchte aber,das er komplett 180°sich umdreht.Wie kann ich das lösen?
Evtl. mit "delay" oder "copro_setTargetAbs" oder.....?
Mir fehlt die Idee dazu.

Hoffe ihr habt alles soweit verstanden!
Gruß
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Brauche idee zur Umsetzung meines Programms 11 Jahre 7 Monate her #1447

  • Georg
  • Georgs Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 290
Hallo,

in der <nibo/copro.h> ist die Externe Variable uint16_t copro_target_distance definiert.

Verbleibende Distanz zum Ziel bei Durchführung von copro_setTargetAbs() bzw. copro_setTargetRel() Die Distanz ist der maximale Wert von den verbleibenden linken und rechten Ticks.

Georg
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Brauche idee zur Umsetzung meines Programms 11 Jahre 7 Monate her #1448

  • Henry
  • Henrys Avatar
  • OFFLINE
  • Senior Boarder
  • Beiträge: 37
Hallo Georg,

OKKKKK?Sorry,hab nur Bahnhof verstanden.
Hab das zwar gelesen gehabt, konnte aber damit nichts anfangen.
Ich wollte gern bestimmen,mit copro_setTargetReldie Zeit,wie lange der Nibo brauch um auf 180° zu drehen.Aber da lag ich falsch,oder?
Könnte ich das mit copro_setSpeedermöglichen oder mit bestimmten Zeiten?

Henry
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Brauche idee zur Umsetzung meines Programms 11 Jahre 7 Monate her #1449

  • BirgerT
  • BirgerTs Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 325
Hi Henry,

vermutlich nur verkehrt abgetippt..
if ((distances_quantitative[2]==2)&&copro_stop()) //wenn Sensor vorne und Copro stop
..vielleicht fehlen die beiden Klammern.

In der pwm.h sind zwei Variablen pwm_timer_ms und pwm_timer_sec definiert.
..main..
uint8_t status = 0;
uint32_t zeitstempel = 0;
..
while(1==1)..
 
if ((distances_quantitative[2]==2)&&copro_stop())
{
if(status == 0)// Wenn die Wartezeit noch nicht läuft
{
status = 1;
zeitstempel = pwm_timer_sec+10; //Weiter jetzt + 10Sekunden
}
}else{ // Hindernis wieder verschwunden (auch wenn er sich gedreht hat)..
if(status==1)// .. und Wartezeit läuft noch
{
status = 0; // dann Abbruch des Drehmanövers
}
}
 
switch(status)
case 1: // Wartezeit läuft
if(zeitstempel <= pwm_timer_sec) status = 2;
break;
case 2: // Kommando drehen
copro_setTargetAbs(0x35,-0x35,20); // Absolut - bei Rel wird aufaddiert
status = 3;
break;
case 3: // Warten auf Drehung zu Ende
if(copro_target_distance == 0) status = 0;
 
Vielleicht hilft Dir das..
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Brauche idee zur Umsetzung meines Programms 11 Jahre 7 Monate her #1450

  • Henry
  • Henrys Avatar
  • OFFLINE
  • Senior Boarder
  • Beiträge: 37
Hallo BirgerT,

ich teste das mal in den kommenden Tagen aus.Ich kenn zwar nicht alle Variablen(pwm.....) die es so gibt,aber....probier´s mal aus, ob sich das umsetzen lässt.

Für weitere Ideen bin ich Euch dankbar!

Danke Birger ;)

Henry
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Aw: Brauche idee zur Umsetzung meines Programms 11 Jahre 7 Monate her #1451

  • Georg
  • Georgs Avatar
  • OFFLINE
  • Gold Boarder
  • Beiträge: 290
Hallo Henry,

deinen Code habe ich ergänzt.

void copro_ready(void) {
do {
delay(500);
copro_update();
} while (copro_target_distance != 0);
}


case200: //Sprungmarke 200
copro_setTargetRel(0x35,-0x35,20); //linke Rad vor,rechte zurück,20Tick
copro_ready();
break; //Anweisung unterbrechen


Die Schleife wird erst nach der erfolgten 180° Drehung verlassen.

Georg
Letzte Änderung: 11 Jahre 7 Monate her von Georg.
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Ladezeit der Seite: 0.087 Sekunden

Werbung