PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Linienverfolgung mit Stopp bei Kollision



JustusPeterB
12.01.2011, 11:47
Servus!

Ich arbeite gerade an einem Programmcode bei dem der Asuro erst die Linienverfolgung fahren soll und wenn ein Taster, durch eine Kollision, betätigt wird soll der Asuro komplett stoppen.
Leider läuft mein Programm nicht, kann mir eventuell jemand helfen?
Ich habe Probleme mit den If/Else Schleifen, ich denke da liegt der Fehler.

Hier der Programmcode:


/************************************************** *****************************
*
* File Name: LineDemo.c
* Project : Demo
*
* Description: This file contains LineDemo features
*
* Ver. Date Author Comments
* ------- ---------- -------------- ------------------------------
* 1.00 14.08.2003 Jan Grewe build
* 2.00 22.10.2003 Jan Grewe angepasst auf asuro.c Ver.2.10
*
* Copyright (c) 2003 DLR Robotics & Mechatronics
************************************************** ***************************/
/************************************************** *************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* any later version. *
************************************************** *************************/
#include "asuro.h"

#define SPEED 0x8F

int speedLeft,speedRight;
unsigned int lineData[2];
int ADOffset;

void LineLeft (void)
{
speedLeft += 1; /* links mehr Gas geben */
if (speedLeft > 0xFE) speedLeft = 0xFF;
}

void LineRight (void)
{
speedRight += 1; /* rechts mehr Gas geben */
if (speedRight > 0xFE) speedRight = 0xFF;
}

int main(void)
{
int i;
unsigned char j;
unsigned char t1, t2;

Init();
while (1)

t1 = PollSwitch();
t2 = PollSwitch();
if (t1 == 0 && t2 == 0) /* keine Taste */
{
FrontLED(ON);
for (j = 0; j < 0xFF; j++) LineData(lineData);
LineData(lineData);
ADOffset = lineData[LEFT] - lineData[RIGHT];
speedLeft = speedRight = SPEED;
for(;;) {
LineData(lineData);
i = (lineData[LEFT] - lineData[RIGHT]) - ADOffset;
}
{
if ( i > 4) {
StatusLED(GREEN);
LineLeft();
}
else if ( i < -4) {
StatusLED(RED);
LineRight();
}
else {
StatusLED(OFF);
speedLeft = speedRight = SPEED;
}
MotorSpeed(speedLeft,speedRight);

if (t1 && t2 && t1 == t2)
{
MotorDir(BREAK,BREAK);
}
}
return 0;
}
}

Valen
12.01.2011, 13:31
...
for(;;) {
LineData(lineData);
i = (lineData[LEFT] - lineData[RIGHT]) - ADOffset;
}
...Das funktioniert wie ein Endlöss-schleife. Er kommt nicht mehr raus. Die letzte "}" steht dort nicht in dem originale Datei linedemo.c von das Asuro Selftest Projekt. Hast du die selbe zugefügt?

Hier ist die originale quelcode:

http://arexx.com/downloads/asuro/asuro_src.zip

JustusPeterB
17.01.2011, 10:16
Trotz des Versetzens der Klammer fährt er immernoch nicht los.

Ich habe versucht die vorgefertigte Linedemo mit teilen aus dem Kollisionstest zu verbinden. Aber leider immernoch ohne Erfolg.

Hat jemand vielleicht noch einen Tipp?

Valen
17.01.2011, 18:56
Wie genau hast du dein Programm geändert? Wo steht den Klammer nun?