PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro PCDemo Programm



meddie
29.09.2009, 12:42
Hallo Leute,

ich habe gestern einen Asuro bekommen. Und nun bin ich schon ganz fleißig am experementieren. Allerdings habe ich so die ersten Startschwierigkeiten, und hoffe auf Eure Hilfe

Ich habe das Programm PCDemo erfolgreich compiliert und habe es geflasht. Allerding steht nach dem Start der suro nur da und mach seine selbsttest. Der sollte doch auf die Eingaben auf die Ziffern reagieren und entsprechend fahren. In dem Terminal sehe ich Ausgaben wie
Line Test
Switch Test Odometrie Test usw.

Wie löse ich den nun die Fernsteuerung aus das er losfährt?

Danke im Voraus

meddie
29.09.2009, 13:03
Hier der Code den ich verwende


#include "asuro.h"
#include <stdlib.h>

#define OFFSET 0x3F
#define STEP 5

#define RWD_KEY '2'
#define FWD_KEY '8'
#define LEFT_KEY '4'
#define RIGHT_KEY '6'
#define STOP_KEY '5'

volatile unsigned char switchPressed;
int speedLeft,speedRight;

SIGNAL (SIG_INTERRUPT1)
{
unsigned int i;

DDRD |= SWITCHES; // Switches as Output
SWITCH_ON; // Output HIGH for measurement
ADMUX = (1 << REFS0) | SWITCH; // AVCC reference with external capacitor
for (i = 0; i < 0xFE; i++);

ADCSRA |= (1 << ADSC); // Start conversion
while (!(ADCSRA & (1 << ADIF))); // wait for conversion complete
ADCSRA |= (1 << ADIF); // clear ADCIF
i = ADCL + (ADCH << 8);

// und ab gehts --- fahr zurьck
MotorDir(RWD,RWD);
MotorSpeed(200,200);
FrontLED(ON);
BackLED(ON,ON);
for (i = 0; i < 0xFFFD; i++); // Sleep does not work here

switchPressed = TRUE;
SWITCH_OFF;
DDRD &= ~SWITCHES; // Switches as Input => ext. Int 1
}

void PCFwd(void)
{
speedRight += STEP;
speedLeft += STEP;
if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
FrontLED(ON);
BackLED(OFF,OFF);
}

void PCRwd(void)
{
speedRight -= STEP;
speedLeft -= STEP;
if (speedRight > 0 && speedRight <= OFFSET) speedRight = -1;
if (speedLeft > 0 && speedLeft <= OFFSET) speedLeft = -1;
FrontLED(OFF);
BackLED(ON,ON);
}

void PCLeft (void)
{
speedLeft -= STEP;
if (speedLeft > 0 && speedLeft <= OFFSET) speedLeft = -1;
speedRight += STEP;
if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
FrontLED(OFF);
BackLED(ON,OFF);
}

void PCRight (void)
{
speedLeft += STEP;
if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
speedRight -= STEP;
if (speedRight > 0 && speedRight <= OFFSET) speedRight = -1;
FrontLED(OFF);
BackLED(OFF,ON);
}


void PCStop(void)
{
speedRight = speedLeft = 0;
FrontLED(OFF);
BackLED(OFF,OFF);
}


void PCDemo(void)
{
unsigned char cmd;
unsigned char leftDir = FWD, rightDir = FWD;

Init();
StartSwitch();
sei();
for(;;) {
cmd = 0;
SerRead(&cmd,1,0xFFFE);
switch (cmd) {
case RWD_KEY : PCRwd(); break;
case FWD_KEY : PCFwd(); break;
case LEFT_KEY : PCLeft(); break;
case RIGHT_KEY : PCRight(); break;
case STOP_KEY : PCStop(); break;
}
if (speedLeft > 0 && speedLeft < OFFSET) speedLeft += OFFSET;
if (speedLeft < 0 && speedLeft > -OFFSET) speedLeft -= OFFSET;
if (speedRight > 0 && speedRight < OFFSET) speedRight += OFFSET;
if (speedRight < 0 && speedRight > -OFFSET) speedRight -= OFFSET;

if (switchPressed) {
speedLeft = 0;
speedRight = 0;
switchPressed = FALSE;
}

leftDir = rightDir = FWD;
if (speedLeft < 0) leftDir = RWD;
if (speedRight < 0) rightDir = RWD;

if (speedLeft > 255) speedLeft = 255;
if (speedLeft < -255) speedLeft = -255;
if (speedRight > 255) speedRight = 255;
if (speedRight < -255) speedRight = -255;

MotorDir(leftDir,rightDir);
MotorSpeed(abs(speedLeft),abs(speedRight));
}
}

Ceos
29.09.2009, 13:10
füge doch bitte vor den code ein [ c o d e ] und dahinter ein [ / c o d e ] ein (natürlich ohne leerzeichen) macht den text ungemein lesbarer als zentriert ... bekommt man ja fast augenweh ^^ aber interessanter vesuch die einrückung zu umgehen

kann es sein dass du deine textdatei vor dem compilieren nicht gespeichert hast ^^ ... wenn er noch immer das demoprogramm abfährt, hast du ihm näcmlich garnichts geflasht

meddie
29.09.2009, 13:31
Ich habe den CODE Tag benutzt. Und bei mir zeigt er auch alles sauber an!

meddie
29.09.2009, 13:37
Ich nutze das Win AVR und er erstellt mir dann eine hex Datei, diese tu ich dann ja via flash.exe übertragen. Davor war da ein anderes Programm drauf. Und dieses ist nun weg. Also hat er etwas geflasht.

Ich sehe das was mit Interrupt und Funktion StartSwitch() kann es sein dass ich etwas bestimmtes drücken muss, damit er das Programm startet?

Valen
29.09.2009, 15:16
Hallo,

Wie du in dem code lesen kannst steht dar gar keinen "Line Test" oder "Switch Test" tekst-zeile drin. Entweder dein program ist nicht richtig compiliert oder du hast den falschen Hex datei im Asuro geflasht. (sieht aus wie die selbtest hex datei) Versuchs nochmal zu flaschen mit den richtigen hex, oder poste den compiler error report bitte wenn das fehlt.

radbruch
29.09.2009, 15:18
Hallo


In dem Terminal sehe ich Ausgaben wie
Line Test
Switch Test
Odometrie Test usw.

In deinem PCDemo-Programm finde ich nirgends diese Ausgaben. Wie du schon richtig vermutest scheint das der Selbsttest zu sein. Weil der asuro immer nur ein Programm im Speicher haben kann ist wohl das Flashen von PCDemo fehlgeschlagen. Oder du hast die falsche Hex-Datei geflusht. Einfach nochmal versuchen oder ein kleines Testprogramm flashen.

Gruß

mic

[Edit] Bin mal wieder zu langsam :)