Hallo,


ich bin im moment an 2 Sachen dran, zum einen das geradeaus fahren und eine Fernsteuerung mittels einer Universalfernbedienung mit RC5-Codes.

Zuerst zum Odometrieprogramm, da habe ich das aus "Mehr Spaß mit dem Asuro II" ausprobiert und dafür auch die Odometriewerte in mehreren Testläufen gemessen:

Code:
246     657
 297     674
 307     687
 339     696
 366     699
 402     704
 444     702
 487     705
 532     701
 575     701
 627     689
 658     676
 696     660
 719     636
 746     617
 760     583
 773     559
 776     527
 776     503
 772     478
 763     458
 761     451
 740     427
 727     426
 704     399
 681     384
 660     362
 637     349
 618     336
 586     321
 562     347
 517     279

 732     585
 756     621
 777     638
 787     664
 802     683
 800     693
 803     704
 794     704
 785     714
 769     711
 751     714
 735     706
 706     699
 681     688
 649     676
 625     668
 594     645
 559     627
 523     598
 475     574
 438     549
 383     529
 341     510
 302     486
 270     479
 249     448
 216     428
 207     392
 182     352
 185     312
 168     266
 176     247
 183     200
 194     201
 204     188
 215     198
 248     206
 262     214
 297     235
 310     256
 342     300
 371     325
 404     371
 446     402
 488     441
 540     450
 579     459
 624     473
 653     489
 688     522
 710     550
 737     590
 751     611
 767     643
 774     664
 779     692
 780     704
 772     717
 771     725
 760     730
 755     733
 739     723
 724     719
 704     704
 679     697
 662     678
 633     657
 614     630
 584     602
 555     588
 516     569
 478     564
 446     540
 393     517
 360     488
 304     446
 274     405
 241     348
 211     313
 192     275
 168     263
 171     246
 144     242
 153     244
 137     246
 146     280
 151     296
 156     335
 173     347
 183     370
 208     389
 226     418
 271     444
 284     460
 314     479
 338     496
 374     525
 415     534
 452     559
 502     577
 544     604
 592     622
 628     644
 671     661
 695     671
 725     684
 739     683
 753     691
 761     688
 768     693
 774     688
 773     685
 779     678
 771     666
 782     653
 760     624
 752     601
 739     565
 722     534
 704     499
 673     458
 651     425
 619     368
 595     339
 564     284
 529     256
 495     221
 448     192
 414     174
 360     148
 321     155
 283     156
 252     205
 232     227
 202     283
 195     309
 171     341
 173     378
 158     408
 164     447
 167     475
 171     511
 177     539
 184     583
 217     606
 218     636
 258     660
 269     681
 300     694
 326     700
 359     710
 403     711
 450     721
 507     715

 557     468
 524     424
 499     391
 455     367
 420     343
 373     313
 338     313
 310     286
 269     280
 253     275
 217     275
 207     285
 185     289
 186     304
 180     302
 186     327
 209     315
 214     318
 249     313
 257     314
 288     326
 297     340
 325     373
 352     392
 389     424
 424     451
 470     499
 527     538
 569     577
 620     605
 655     628
 694     650
 721     667
 750     686
 768     693
 787     707
 793     705
 799     709
 803     704
 796     699
 791     690
 773     682
 760     676
 736     660
 565     503
 525     490
 478     463
 432     451
 397     426
 222     234
 241     251
 270     246
 285     260
 313     276
 330     301
 371     335
 396     365
 447     411
 482     435
 529     479
 572     502
 609     536
 644     560
 675     588
 706     610
 725     629
 748     650
 758     655
 776     675
 779     687
 773     684
 769     687
 764     683
 753     681
 747     676

 152     310
 182     342
 180     371
 209     398
 220     427
 247     468
 272     500
 298     544
 332     572
 361     605
 398     629
 433     654
 491     668
 530     679
 583     686
 622     690
 662     697
 692     695
 721     703
 741     695
 757     691
 769     678
 770     665
 773     648
 763     623
 757     603
 741     565
 727     534
 708     496
 684     466
 665     435
 637     402
 619     385
 586     352
 555     342
 518     307
 474     286
 434     255
 384     233
 355     226
 306     210
 277     217
 248     199
 224     209
 218     194
 199     193
 194     196
 186     244
 207     234
 208     264
 236     319
 258     353
 282     395
 310     418
 328     460
 363     491
 383     530
 431     562
 459     592
 509     622
 547     646
 590     672
 629     685
 667     701
 701     704
 730     713
 751     715
 758     719
 765     715
 760     708
 760     701
 750     681
 745     662
 736     628
 724     598
 713     567
 690     536
 675     506
 639     462
 612     434
 580     384
 552     350
 526     311
 489     278
 464     262
 419     241
 382     235
 341     220
 310     237
 287     225
 256     234
 240     241
 209     254
 205     276
 187     292
 188     325
 188     348
 200     399
 223     412
 233     437
 265     450
 275     469
 303     491
 315     515
 347     545
 376     567
 418     598
 458     621
 508     655
 564     669
 606     683
 653     686
 686     692
 721     695
 742     693
 767     687
 780     671
 795     667
 796     642
 799     618
 795     585
 783     549
 774     517
 753     480
 737     457
 711     416
 686     383
 660     347
 637     325
 621     307
 588     277
 561     262
 522     236
 483     236
 441     224
 394     236
 358     243
 313     257
 297     281
 254     295
 235     329
 214     352
 200     392
 198     419
 187     465
 199     496
 186     528
 199     557
 194     581
 216     606
 231     626
 250     652
 274     668
 290     687
 316     695
 335     708
 381     708
 405     710
 454     704
 497     695
 546     688
 589     674
 629     666
 664     645
 691     626
 719     595
 735     568
 756     546
 764     519
 775     505
 774     475
 775     455
 768     428
 763     403
 758     382
 744     357
 736     347
 712     316
 695     316
 671     290
 650     281
 630     268
 605     258
 584     252
 547     242
 511     249
 466     248
 425     278
 375     287
 324     316
 290     343
 244     375
 227     408
 188     440
 176     482
 162     512
 152     555
 153     581
 140     617
 156     637
Dadurch habe ich den Mittelwert 450 bekommen und diesen auch am Anfang des Programmes als Schwellwert deklariert, zudem habe ich schon die Odometriesensoren mit schwarzer Pappe abgedeckt und die Zahnräder mit etwas Pappe so fixiert, dass der Abstand zu den Sensoren konstant ist.
Dennoch fährt mein Asuro nicht geradeaus, ich weiß nicht woran es noch liegen könnte, er fährt zumeist einen Meter ziemlich genau geradeaus und dann driftet er nach rechts ab, manchmal fährt er aber auch von Beginn an kurvig.

Hier ist mein Programm, ich bin froh über jede Hilfe:

Code:
// *******************************************
// * Odometrie für ASURO                     *
// * Fährt exakt geradeaus                   *
// *                                         *
// *                                         *
// * (c) 2007 Robin Gruber                   *
// * Details zum Code in:                    *
// * "Mehr Spaß mit ASURO, Band II"          *
// *******************************************

#include "asuro.h"

// Schwellwert fr die Hell/Dunkel-Unterscheidung
// Eventuell muss damit etwas variiert werden
#define TRIGGERLEVEL 600
#define HYSTERESIS 10
#define LOW 0
#define HIGH 1

int main(void)
{
    unsigned int data[2];
    signed int status[2]={0,0};
    signed int difference=0;
    Init();
    MotorDir(FWD, FWD);
    while(1) {
        // Helligkeitswerte der Lichtschranken auslesen
        OdometrieData(data);
        // Wechsel linker Sensor von niedrig auf hoch?
        if ((status[0]==LOW) && (data[0]>TRIGGERLEVEL+HYSTERESIS)) {
            status[0]=HIGH;
            difference++;
        }
        // Wechsel linker Sensor von hoch auf niedrig?
        if ((status[0]==HIGH) && (data[0]<TRIGGERLEVEL-HYSTERESIS)) {
            status[0]=LOW;
            difference++;
        }
        // Wechsel rechter Sensor von niedrig auf hoch?
        if ((status[1]==LOW) && (data[1]>TRIGGERLEVEL+HYSTERESIS)) {
            status[1]=HIGH;
            difference--;
        }
        // Wechsel rechter Sensor von hoch auf niedrig?
        if ((status[1]==HIGH) && (data[1]<TRIGGERLEVEL-HYSTERESIS)) {
            status[1]=LOW;
            difference--;
        }
        // zur Sicherheit: verhindern, dass der Differenzz�ler
        // den erlaubten Wertebereich verl�st
        if (difference<-255) difference=-255;
        if (difference>255) difference=255;
        
        // Status-LED noch entsprechend der erkannten Segmente
        // aufleuchten lassen, grn fr links, rot fr rechts
        StatusLED(status[0]+status[1]*2);
        
        // Z�ldifferenz passend auf die Motoren verteilen
        if (difference>0) MotorSpeed(255-difference,255);
        else MotorSpeed(255,255+difference);
        
    }
    return 0;
}
Bei dem anderen Programm aus "Mehr Spaß mit Asuro II" bekomme ich beim compilieren folgende Fehlermeldung:

"../geradeaus.c:13:20: error: eeprom.h: No such file or directory"


Wo/Wie muss ich <eeprom.h> einbinden?

--------------------------------------

Das andere Problem betrifft folgendes Programm:

Code:
/*******************************************************************************
*
* File Name:   IRDemo.c
* Project  :   Demo
*
* Description: This file contains IRDemo 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
*****************************************************************************/
/*!
  /file 	IRDemo.c
  /brief 	Routinen fuer die Dekodierung von RC5-Fernbedienungs-Codes
  /author 	Benjamin Benz (bbe@heise.de), m.a.r.v.i.n

  /version      V001 - 14.08.2003 - Jan Grewe
                initial build
		V002 - 22.10.2003 - Jan Grewe
                angepasst auf asuro.c Ver.2.10
                V003 - 11.02.2007 - m.a.r.v.i.n
		c't-Bot RC5 Code portiert fuer den ASURO
*/
/***************************************************************************
 *                                                                         *
 *   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"
#include "rc5.h"
#include <stdlib.h>

#define DIARWD   0x1008
#define DIAFWD   0x1002
#define DIALEFT  0x1004
#define DIARIGHT 0x1006
#define DIASTOP  0x1029

#define TUNERRWD   0x1021
#define TUNERFWD   0x1020
#define TUNERLEFT  0x1011
#define TUNERRIGHT 0x1010
#define TUNERSTOP  0x1025

#define OFFSET	0x3F
#define STEP	5

int speedLeft,speedRight;

void IRFwd(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 IRRwd(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 IRLeft (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 IRRight (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 IRStop(void)
{
  speedRight = speedLeft = 0;
  FrontLED(OFF);
  BackLED(OFF,OFF);
}

int main(void)
{

  static unsigned int cmd;
  unsigned char leftDir = FWD, rightDir = FWD;
  char text[7];

  Init();
  InitRC5();

  SerPrint("RC5 Test\r\n");
  while (1)
  {
    cmd = ReadRC5();
    if (cmd)
    {
      cmd &= RC5_MASK;
      itoa(cmd, text, 16);
      SerPrint(text);
      SerPrint("\r\n");

      switch (cmd)
      {
      case TUNERRWD :
      case DIARWD :
        SerPrint("rwd\r\n");
        IRRwd();
        break;
      case TUNERFWD :
      case DIAFWD :
        SerPrint("fwd\r\n");
        IRFwd();
        break;
      case TUNERLEFT :
      case DIALEFT:
        SerPrint("lft\r\n");
        IRLeft();
        break;
      case TUNERRIGHT :
      case DIARIGHT:
        SerPrint("rgt\r\n");
        IRRight();
        break;
      case TUNERSTOP :
      case DIASTOP :
        SerPrint("stp\r\n");
        IRStop();
        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;

    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));
    Msleep(100);
  }
  return 0;
}
Dieses Programm "RC5-Test" habe ich im "Examples"-Ordner der "asuro_libv271" gefunden und es soll, soweit ich es verstanden habe, die Fernsteuerung des Asuros durch eine RC5-Codefähige Fernbedienung ermöglichen.

Ich habe eine gefunden, die das kann und das Programm funktioniert, es ist jedoch so, dass er sich durch einzelnes Tastendrücken nicht bewegt.
Er wird z.B. durch gedrückt halten der "Channel+" Taste auf der Fernbedienung immer schneller bis zum Erreichen des Maximums nach ~15-20sec ich möchte jedoch, dass er durch einzelnes Tastendrücken eine moderate Geschwindigkeit erreicht.
Weiß jemand hier, wie man das machen kann?

Ich selbst verstehe von dem Programm noch nicht besonders viel, allgemein habe ich nicht so viel Ahnung von C-Programmierung, deshalb frage ich hier!



Ich hoffe jemand kann mir helfen und ich bedanke mich im vorraus schon mal für jegliche Hilfe!


Gruß
Seuche