PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Geschwindigkeit einstellen für Dummys



pinsel120866
29.12.2007, 14:33
Hallo Miteinander,

nachdem mein neuer ASUMO alle Tests bestanden hat habe ich gleich voller Freude die LineDemo (sh. Anhang) geflasht und meine erste Entäuschung erlebt. Der kleine Kerl ist viiiiiiel zu schnell unterwegs um seinen Weg auf der extra ausgedruckten Linientestarena zu finden. Da ich (noch) kein Programmierer bin wäre ich froh wenn mir vorab ein Profi verraten könnte, wie ich bei dem Programm die Geschwindigkeit einstellen kann.

Danke mal im voraus und bitte Nachsicht üben *schäm*

liggi
29.12.2007, 15:42
hallo pinsel120866

du musst define speed änderen am besten auf ca. 150.

mfg liggi

pinsel120866
29.12.2007, 20:02
Hallo Liggi,

danke für die Antwort. Ich habe den Code jetzt folgendermaßen abgeändert:


#include "asuro.h"

#define SPEED 150

int main(void)
{
LineDemo();
return 0;
}

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

void LineLeft (void)
{
speedLeft += 1;
if (speedLeft > 150) speedLeft = 151;
}

void LineRight (void)
{
speedRight += 1;
if (speedRight > 150) speedRight = 151;
}

void LineDemo(void)
{
int i;
unsigned char j;

Init();

FrontLED(ON);
for (j = 0; j < 255; j++) LineData(lineData);
LineData(lineData);
ADOffset = lineData[0] - lineData[1];
speedLeft = speedRight = SPEED;
for(;;) {
LineData(lineData);
i = (lineData[0] - lineData[1]) - ADOffset;
if ( i > 4) {
StatusLED(GREEN);
LineLeft();
}
else if ( i < -4) {
StatusLED(RED);
LineRight();
}
else {
StatusLED(OFF);
speedLeft = speedRight = SPEED;
}
MotorSpeed(speedLeft,speedRight);
}
}



War anscheinend nichts, der ASURO fährt jetzt schnurgeradeaus - hab ich's falsch gemacht?

pinsel120866
02.01.2008, 15:25
Ich wünsche allen Forums-Usern ein gutes neues Jahr!

Ich wäre sehr dankbar wenn sich einer der geschätzten Programmierprofis den o.a. Code ansehen und mir einen Tip geben könnte.

Herzlichen Gruß

liggi
02.01.2008, 15:40
das ganze wird nur einmal durch laufen du musst das Programm ungefähr so ändern:



#include "asuro.h"

#define SPEED 150

int main(void)
{
LineDemo();
return 0;
}

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

void LineLeft (void)
{
speedLeft += 1;
if (speedLeft > 150) speedLeft = 151;
}

void LineRight (void)
{
speedRight += 1;
if (speedRight > 150) speedRight = 151;
}

void LineDemo(void)
{
int i;
unsigned char j;

Init();
while(1) //Endlosschleife
{
FrontLED(ON);
for (j = 0; j < 255; j++) LineData(lineData);
LineData(lineData);
ADOffset = lineData[0] - lineData[1];
speedLeft = speedRight = SPEED;
for(;;) {
LineData(lineData);
i = (lineData[0] - lineData[1]) - ADOffset;
if ( i > 4) {
StatusLED(GREEN);
LineLeft();
}
else if ( i < -4) {
StatusLED(RED);
LineRight();
}
else {
StatusLED(OFF);
speedLeft = speedRight = SPEED;
}
MotorSpeed(speedLeft,speedRight);
}
}
}

radbruch
02.01.2008, 16:08
Hallo Pinsel

Versuche es mal so:

#include "asuro.h"

#define SPEED 150

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

void LineLeft (void)
{
if (speedLeft < SPEED) speedLeft += 1;
else if (speedRight > 0) speedRight -= 1;
}

void LineRight (void)
{
if (speedRight < SPEED) speedRight += 1;
else if (speedLeft > 0) speedLeft -= 1;
}

void LineDemo(void)
{
int i;
unsigned char j;

Init();

FrontLED(ON);
for (j = 0; j < 255; j++) LineData(lineData);
LineData(lineData);
ADOffset = lineData[0] - lineData[1];
speedLeft = speedRight = SPEED;
for(;;) {
LineData(lineData);
i = (lineData[0] - lineData[1]) - ADOffset;
if ( i > 4) {
StatusLED(GREEN);
LineLeft();
}
else if ( i < -4) {
StatusLED(RED);
LineRight();
}
else {
StatusLED(OFF);
speedLeft = speedRight = SPEED;
}
MotorSpeed(speedLeft,speedRight);
}
}

int main(void)
{
LineDemo();
return 0;
}



for(;;) ist eine Endlosschleife. Beim Start sollten beide Sensoren etwa den selben Untergrund sehen (beide hell oder beide dunkel) damit der Offset (Empfindlichkeitsunterschied) halbwegs richtig ermittelt wird.

Gruß

mic

pinsel120866
05.01.2008, 11:59
Danke für die Tipps.

Wenn ich den Code von Radbruch kompiliere, kommt folgendes heraus:



C:\Dokumente und Einstellungen\Administrator.EMSNB008\Desktop\ASURO \ASURO_src\FirstTry>make all
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
[ -s test.d ] || rm -f test.d
test.c:14:78: ../inc/ir-asuro.h: No such file or directory
test.c:15:30: ../inc/ir-asuro.c: No such file or directory
-------- begin --------
avr-gcc --version
avr-gcc (GCC) 3.3.1
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
test.c:14:78: ../inc/ir-asuro.h: No such file or directory
test.c:15:30: ../inc/ir-asuro.c: No such file or directory
test.c: In function `main':
test.c:21: warning: implicit declaration of function `Init'
test.c:22: warning: implicit declaration of function `StatusLED'
test.c:22: error: `RED' undeclared (first use in this function)
test.c:22: error: (Each undeclared identifier is reported only once
test.c:22: error: for each function it appears in.)
test.c:22: warning: implicit declaration of function `Msleep'
test.c:22: error: `GREEN' undeclared (first use in this function)
test.c:23: warning: implicit declaration of function `FrontLED'
test.c:23: error: `ON' undeclared (first use in this function)
test.c:24: warning: implicit declaration of function `MotorDir'
test.c:24: error: `FWD' undeclared (first use in this function)
test.c:27: error: `DDRD' undeclared (first use in this function)
test.c:27: error: `DDD1' undeclared (first use in this function)
test.c:28: error: `PORTD' undeclared (first use in this function)
test.c:28: error: `PD1' undeclared (first use in this function)
test.c:29: error: `OCR2' undeclared (first use in this function)
test.c:32: error: `PIND' undeclared (first use in this function)
test.c:32: error: `PD0' undeclared (first use in this function)
test.c:34: warning: implicit declaration of function `LineData'
test.c:35: warning: implicit declaration of function `MotorSpeed'
test.c:37: warning: implicit declaration of function `BackLED'
test.c:37: error: `OFF' undeclared (first use in this function)
test.c:41: error: `RWD' undeclared (first use in this function)
test.c:46: error: `BREAK' undeclared (first use in this function)
test.c:48: error: `YELLOW' undeclared (first use in this function)
test.c:50: warning: implicit declaration of function `Sleep'
test.c:60:2: warning: no newline at end of file
make: *** [test.o] Error 1

> Process Exit Code: 2


Ich verwenden noch die Orginal-Libery von der CD - muss ich upgraden?

radbruch
05.01.2008, 12:26
Hallo Pinsel,

schön dass dein asuro wieder läuft.

Das Programm funktioniert auch mit der orginalen CD-Lib, allerdings verwende ich verschiedene Versionen davon die ich (Anfängerfehler meinerseits) in einem extra Verzeichniss verwalte.

Meine Version heist ir-asuro.c und liegt bei mir in ../inc/. ich habe das oben im Code schon geändert, aber du hast wohl schon vor der Änderung das Programm kopiert. Lösung: Nochmal kopieren.

Übrigends schwingt sich mein asuro mit diesem Programm gelegentlich recht heftig auf. Je geringer der Wert für Speed ist, umso schöner folgt er der Linie.

Gruß

mic

oberallgeier
05.01.2008, 18:44
Hallo, ihr Beiden,

jetzt dachte ich, wär schön, so (m)ein erstes asuro-Programm durchs Wohnzimmer zu blitzen, aber - nix da:

1) Der code von mic von oben,
2) asuro.h von der CD
3) Knopf [F7] von AVRStudio.

Dabei kommt raus:
Build started 5.1.2008 at 19:36:53
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT line-demo.o -MF dep/line-demo.o.d -c ../line-demo.c
In file included from ../asuro.h:34,
from ../line-demo.c:7:
c:/programme/winavr-20070525/bin/../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."
../line-demo.c: In function 'main':
../line-demo.c:13: warning: implicit declaration of function 'LineDemo'
../line-demo.c: At top level:
../line-demo.c:34: warning: conflicting types for 'LineDemo'
../line-demo.c:13: warning: previous implicit declaration of 'LineDemo' was here
avr-gcc.exe -mmcu=atmega8 -Wl,-Map=line-demo.map line-demo.o -o line-demo.elf
line-demo.o: In function `LineDemo':
../line-demo.c:38: undefined reference to `Init'
../line-demo.c:41: undefined reference to `FrontLED'
../line-demo.c:42: undefined reference to `LineData'
../line-demo.c:43: undefined reference to `LineData'
../line-demo.c:47: undefined reference to `LineData'
../line-demo.c:50: undefined reference to `StatusLED'
../line-demo.c:54: undefined reference to `StatusLED'
../line-demo.c:58: undefined reference to `StatusLED'
../line-demo.c:61: undefined reference to `MotorSpeed'
make: *** [line-demo.elf] Error 1
Build failed with 9 errors and 4 warnings...
Wenn ich nun zusätzlich die <avr/interrupt.h> benutze, dann gibts noch mehr Ärger :(.

Was blick ich denn da schon wieder nicht ?

robo.fr
05.01.2008, 20:29
Hast Du asuro.c und asuro.h ins Projekt eingebunden? Die Files müssen auf der linken Seite im sichtbar sein.

Gruß,
robo

oberallgeier
06.01.2008, 00:27
Grüß Dich, robo.fr,

asuro.h - ja, wenn ich dazu noch die asuro.c genommen hatte, waren aber auch noch Warnungen da - moment, gleich kommen sie:

rm -rf line-demo.o line-demo.elf dep/* line-demo.hex line-demo.eep line-demo.lss line-demo.map
Build succeeded with 0 Warnings...
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT line-demo.o -MF dep/line-demo.o.d -c ../line-demo.c
In file included from ../asuro.h:34,
from ../line-demo.c:7:
c:/programme/winavr-20070525/bin/../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."
../line-demo.c: In function 'main':
../line-demo.c:14: warning: implicit declaration of function 'LineDemo'
../line-demo.c: At top level:
../line-demo.c:35: warning: conflicting types for 'LineDemo'
../line-demo.c:14: warning: previous implicit declaration of 'LineDemo' was here
avr-gcc.exe -mmcu=atmega8 -Wl,-Map=line-demo.map line-demo.o -o line-demo.elf
avr-objcopy -O ihex -R .eeprom line-demo.elf line-demo.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex line-demo.elf line-demo.eep || exit 0
c:\Programme\WinAVR-20070525\bin\avr-objcopy.exe: there are no sections to be copied!
avr-objdump -h -S line-demo.elf > line-demo.lss

AVR Memory Usage
----------------
Device: atmega8

Program: 4508 bytes (55.0% Full)
(.text + .data + .bootloader)

Data: 19 bytes (1.9% Full)
(.data + .bss + .noinit)


Build succeeded with 4 Warnings...

Ich muss das morgen ausgeschlafen mal durchgehen. Aber erstmal danke für die Hilfe

radbruch
06.01.2008, 00:52
Hallo Joe


1) Der code von mic von oben,
Das kann irgendwie nicht stimmen, die Zeilennummer in den Fehlermeldungen (auch in deinem vorherigen Posting) decken sich überhaupt nicht mit meinem Programm (https://www.roboternetz.de/phpBB2/viewtopic.php?p=340220#340220) (Verfasst am: 02.01.2008, 17:08) Ich kann das ohne Probleme kompilieren. Wenn du eine eigene Variante verwendest, solltest du mal den Code posten.

Gruß

mic

pinsel120866
06.01.2008, 08:42
Morgen, mal eine grundsätziche Frage zum Lib-Upgrade:

Ich packe die Dateien nach c:\ASURO_src aus. Wie binde ich nun die neue Lib ein? Muss ich im Programmers Notepad "make" und "clean" (zeigen derzeit nach FirstTry) anpassen?

Gruß Pinsel

oberallgeier
06.01.2008, 11:15
Hallo Joe... kann irgendwie nicht stimmen, die Zeilennummer in den Fehlermeldungen ... decken sich überhaupt nicht mit meinem ... Programm ...Klar - ich habe als Vorspann auch immer die Quelle (Name, Datum, url etc) angegeben.

Mittlerweile läuft der asuro. Ich habe die vier Warnungen missachtet und den Maschinencode geflasht - und DEIN Programm fährt MEINEN asuro brav eine Blattkante entlang (bei reduzierter Speed: 100). Danke - nun gehts daran, den Quellcode zu verstehen :( :( :( - der Lernteil der Übung. Meist mach ich es andersrum (erst lern, dann tu) - aber es ist ja Wochenende :). Danke noch für die Hilfe