- LiFePO4 Speicher Test         
Seite 9 von 26 ErsteErste ... 789101119 ... LetzteLetzte
Ergebnis 81 bis 90 von 255

Thema: IR-bake

  1. #81
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    Anzeige

    LiFePo4 Akku selber bauen - Video
    hi,

    erkenntnisse aus zahllosen tests:

    die IR bake verursacht nach wie vor reflektionen die den empfänger irritieren. Sie sind schwächer als der direkter strahl und der empfang der reflektionen am RP6 ist unregelmässig. Dies habe ich in folgenden änderungen versucht zu berücksichtigen.

    hardware:
    strahlbegrenzung an der bakeKlicke auf die Grafik für eine größere Ansicht

Name:	bake_IR-strahl_begrenzung.jpg
Hits:	26
Größe:	57,4 KB
ID:	27355

    hat eigentlich nichts gebracht...

    abschirmung des IR-empfängers am RP6Klicke auf die Grafik für eine größere Ansicht

Name:	abschirmung_IR_empfänger.jpg
Hits:	28
Größe:	69,4 KB
ID:	27356

    entstand sukzessive, zuerst der hintere reflektor am IR-empfänger, dann das dickere rohr (ist innen schwarz ausgekleidet), dann der zweiter reflektor mit der kleineren öffnung zum sender hin, dann das kleinere röhrchen, um die eintrittsöffnung noch ein bischen zu verkleinern. Wahrscheinlich funktioniert die hindernissmessung nun nicht mehr, aber darum kümmere ich mich später.
    Der IR-empfang ist bei direkter ausrichtung auf die sendende bake noch gut, die empfansfrequenz unverändert, abfrage per software erfolgt immer noch im 50ms rhythmus. Bei einer ausrichtung weg von der bake ist kein empfang, wenn der Rp schräg zu bake steht kommt immer noch ab und zu mal was durch.

    software:

    Code:
    case 3://
                    setLEDs(0b0100);
    
                    writeString_P("\n\n Suche der bake\n\n");
                    writeChar('\n');
                    initRP6Control();
                    initLCD();
                    startStopwatch3();
    
                    while(true)
                    {
    
    
                        while(true)
                        {
    
                            if(getStopwatch3() > 50)
                            {
                                temp = read_IR_value();
                                /********************/
    
                                uint8_t i = 0;
                                for(i = 0; i < 199; i++)
                                {
    //                            writeIntegerLength(temp,DEC,4);
                                writeInteger(getStopwatch3(), DEC);
                                if(i % 12 == 0)
                                {
                                    writeChar('\n');
                                    setStopwatch2(0);
                                }
                                else
                                {
                                    writeString_P(" | ");
                                    setStopwatch2(0);
                                }
                                }
    
                                /*******************/
    
                                if (temp == 0)
                                {
                                    setMultiIOLED3(1);
                                    setMultiIOLED3(0);
                                    if (t<10)
                                    {
                                    t++;
                                    setStopwatch3(0);
                                    if (t == 10)
                                    {
                                    move(100, FWD, DIST_MM(100), false);
                                    setStopwatch3(0);
                                    t=0;
                                    }
                                    }
                                }
    /*
                                else
                                {
                                    setMultiIOLED1(1);
                                    setMultiIOLED1(0);
                                    rotate(80, RIGHT, 1, false);
                                    setStopwatch3(0);
                                }
    */
                            }
                        }
                            /**************************/
                            uint8_t key_1;
                            key_1 = getMultiIOPressedButtonNumber();
                            if(key_1 != 0) break;
                            /**************************/
                    }
    
    
    
                        break;
    der code - so wie er ist (also mit auskommentierter else-zeilen mit dem rotate befehl) - bewirkt, dass der RP6 nach jeweils 10 empfangenen signalen 100mm fährt, die abfrage der 10 empfangegen signale möchte ich noch zeitabhängig prüfen (t soll <10*51ms sein), ich müsste also die stopwatches vor der schleife und nach der schleife in zwei variablen speichern, diese dann voneinander abziehen und die weiterfahrt davon abhängig machen ob die 10 signale innerhalb der ca. 520ms empfangen wurden. Da bastle ich noch dran

    könnte die abfrage so aussehen -- if ((t==10) && (tg<520)) --? Ich werde sicher auch noch die passenden stellen für das speichern (und rücksetzen) der zwei variablen t1 und t2 finden, bisher klappte das nicht so ganz

    was mir mehr sorgen bereitet ist das zusammenspiel mit dem rotate befehl...

    Wenn ich die else zeilen wieder einschalte, leuchtet nur noch die LED1 auf der multiIO und der RP6 dreht sich im kreis. Nur ganz sporadisch komt ein- zwei- mal ein auifleuchten der LED3, mehr aber nicht. Hängt das wieder mit den stopwatches zusammen?

    ich habe mir folgendes im terminal ausgeben lassen, werde daraus aber nicht schlau:
    Code:
    Suche der bake (ohne rotate)
    
    51
    51 | 53 | 54 | 55 | 57 | 58 | 59 | 61 | 62 | 63 | 64 | 66
    67 | 68 | 69 | 70 | 72 | 73 | 74 | 76 | 77 | 78 | 80 | 81
    82 | 83 | 84 | 86 | 87 | 88 | 89 | 91 | 92 | 93 | 95 | 96
    97 | 98 | 99 | 101 | 102 | 104 | 105 | 107 | 108 | 110 | 112 | 113
    114 | 116 | 117 | 119 | 120 | 122 | 124 | 125 | 127 | 128 | 130 | 131
    132 | 134 | 135 | 137 | 139 | 140 | 142 | 143 | 145 | 146 | 148 | 150
    151 | 152 | 154 | 155 | 157 | 158 | 160 | 161 | 163 | 165 | 166 | 168
    169 | 170 | 172 | 173 | 175 | 177 | 178 | 180 | 181 | 183 | 184 | 186
    187 | 189 | 190 | 192 | 193 | 195 | 196 | 198 | 199 | 201 | 203 | 204
    205 | 207 | 208 | 210 | 211 | 213 | 215 | 216 | 218 | 219 | 221 | 222
    223 | 225 | 226 | 228 | 230 | 231 | 233 | 234 | 236 | 237 | 239 | 241
    242 | 243 | 245 | 246 | 248 | 249 | 251 | 252 | 254 | 256 | 257 | 259
    260 | 261 | 263 | 264 | 266 | 268 | 269 | 271 | 272 | 274 | 275 | 277
    278 | 280 | 281 | 283 | 284 | 286 | 287 | 289 | 290 | 292 | 294 | 295
    296 | 298 | 299 | 301 | 302 | 304 | 306 | 307 | 309 | 310 | 312 | 313
    314 | 316 | 317 | 319 | 321 | 322 | 324 | 325 | 327 | 328 | 330 | 332
    333 | 334 | 336 | 337 | 339 | 340 | 343
    343 | 345 | 346 | 348 | 349 | 351 | 353 | 354 | 356 | 357 | 359 | 360
    361 | 363 | 364 | 366 | 368 | 369 | 371 | 372 | 374 | 375 | 377 | 379
    380 | 381 | 383 | 384 | 386 | 387 | 389 | 390 | 392 | 394 | 395 | 397
    398 | 399 | 401 | 402 | 404 | 406 | 407 | 409 | 410 | 412 | 413 | 415
    416 | 418 | 419 | 421 | 422 | 424 | 425 | 427 | 428 | 430 | 432 | 433
    434 | 436 | 437 | 439 | 440 | 442 | 444 | 445 | 447 | 448 | 450 | 451
    452 | 454 | 455 | 457 | 459 | 460 | 462 | 463 | 465 | 466 | 468 | 470
    471 | 472 | 474 | 475 | 477 | 478 | 480 | 481 | 483 | 485 | 486 | 488
    489 | 490 | 492 | 493 | 495 | 497 | 498 | 500 | 501 | 503 | 504 | 506
    507 | 509 | 510 | 512 | 513 | 515 | 516 | 518 | 519 | 521 | 523 | 524
    525 | 527 | 528 | 530 | 531 | 533 | 535 | 536 | 538 | 539 | 541 | 542
    543 | 545 | 546 | 548 | 550 | 551 | 553 | 554 | 556 | 557 | 559 | 561
    562 | 563 | 565 | 566 | 568 | 569 | 571 | 572 | 574 | 576 | 577 | 579
    580 | 581 | 583 | 584 | 586 | 588 | 589 | 591 | 592 | 594 | 595 | 597
    598 | 600 | 601 | 603 | 604 | 606 | 607 | 609 | 610 | 612 | 614 | 615
    616 | 618 | 619 | 621 | 622 | 624 | 626 | 627 | 629 | 630 | 632 | 633
    634 | 636 | 637 | 639 | 641 | 642 | 644
    645 | 647 | 648 | 650 | 651 | 653 | 654 | 656 | 657 | 659 | 661 | 662
    663 | 665 | 666 | 668 | 669 | 671 | 673 | 674 | 676 | 677 | 679 | 680
    681 | 683 | 685 | 686 | 688 | 689 | 691 | 692 | 694 | 695 | 697 | 699
    700 | 701 | 703 | 704 | 706 | 707 | 709 | 711 | 712 | 714 | 715 | 717
    718 | 719 | 721 | 722 | 724 | 726 | 727 | 729 | 730 | 732 | 733 | 735
    736 | 738 | 739 | 741 | 742 | 744 | 745 | 747 | 748 | 750 | 752 | 753
    754 | 756 | 757 | 759 | 760 | 762 | 764 | 765 | 767 | 768 | 770 | 771
    772 | 774 | 776 | 777 | 779 | 780 | 782 | 783 | 785 | 786 | 788 | 790
    791 | 792 | 794 | 795 | 797 | 798 | 800 | 802 | 
    
    Suche der bake (mit rotate)
    
    51
    52 | 53 | 54 | 55 | 57 | 58 | 59 | 61 | 62 | 63 | 65 | 66
    67 | 68 | 69 | 70 | 72 | 73 | 74 | 76 | 77 | 78 | 80 | 81
    82 | 83 | 84 | 86 | 87 | 88 | 89 | 91 | 92 | 93 | 95 | 96
    97 | 98 | 99 | 101 | 102 | 104 | 105 | 107 | 108 | 110 | 112 | 113
    114 | 116 | 117 | 119 | 120 | 122 | 124 | 125 | 127 | 128 | 130 | 131
    132 | 134 | 135 | 137 | 139 | 140 | 142 | 143 | 145 | 146 | 148 | 150
    151 | 152 | 154 | 155 | 157 | 158 | 160 | 161 | 163 | 165 | 166 | 168
    169 | 170 | 172 | 173 | 175 | 177 | 178 | 180 | 181 | 183 | 184 | 186
    187 | 189 | 190 | 192 | 193 | 195 | 196 | 198 | 199 | 201 | 203 | 204
    205 | 207 | 208 | 210 | 211 | 213 | 215 | 216 | 218 | 219 | 221 | 222
    223 | 225 | 226 | 228 | 230 | 231 | 233 | 234 | 236 | 237 | 239 | 241
    242 | 243 | 245 | 246 | 248 | 249 | 251 | 252 | 254 | 256 | 257 | 259
    260 | 261 | 263 | 264 | 266 | 268 | 269 | 271 | 272 | 274 | 275 | 277
    278 | 280 | 281 | 283 | 284 | 286 | 287 | 289 | 290 | 292 | 294 | 295
    296 | 298 | 299 | 301 | 302 | 304 | 306 | 307 | 309 | 310 | 312 | 313
    314 | 316 | 317 | 319 | 321 | 322 | 324 | 325 | 327 | 328 | 330 | 332
    333 | 334 | 336 | 337 | 339 | 340 | 51
    51 | 53 | 54 | 55 | 57 | 58 | 59 | 61 | 62 | 63 | 64 | 66
    67 | 68 | 69 | 70 | 72 | 73 | 74 | 76 | 77 | 78 | 80 | 81
    82 | 83 | 84 | 86 | 87 | 88 | 89 | 91 | 92 | 93 | 95 | 96
    97 | 98 | 99 | 101 | 102 | 104 | 105 | 107 | 108 | 110 | 112 | 113
    114 | 116 | 117 | 119 | 120 | 122 | 124 | 125 | 127 | 128 | 130 | 131
    132 | 134 | 135 | 137 | 139 | 140 | 142 | 143 | 145 | 146 | 148 | 150
    151 | 152 | 154 | 155 | 157 | 158 | 160 | 161 | 163 | 165 | 166 | 168
    169 | 170 | 172 | 173 | 175 | 177 | 178 | 180 | 181 | 183 | 184 | 186
    187 | 189 | 190 | 192 | 193 | 195 | 196 | 198 | 199 | 201 | 203 | 204
    205 | 207 | 208 | 210 | 211 | 213 | 215 | 216 | 218 | 219 | 221 | 222
    223 | 225 | 226 | 228 | 230 | 231 | 233 | 234 | 236 | 237 | 239 | 241
    242 | 243 | 245 | 246 | 248 | 249 | 251 | 252 | 254 | 256 | 257 | 259
    260 | 261 | 263 | 264 | 266 | 268 | 269 | 271 | 272 | 274 | 275 | 277
    278 | 280 | 281 | 283 | 284 | 286 | 287 | 289 | 290 | 292 | 294 | 295
    296 | 298 | 299 | 301 | 302 | 304 | 306 | 307 | 309 | 310 | 312 | 313
    314 | 316 | 317 | 319 | 321 | 322 | 324 | 325 | 327 | 328 | 330 | 332
    333 | 334 | 336 | 337 | 339 | 340 | 51
    51 | 53 | 54 | 55 | 57 | 58 | 59 | 61 | 62 | 63 | 64 | 66
    67 | 68 | 69 | 70 | 72 | 73 | 74 | 76 | 77 | 78 | 80 | 81
    82 | 83 | 84 | 86 | 87 | 88 | 89 | 91 | 92 | 93 | 95 | 96
    97 | 98 | 99 | 101 | 102 | 104 | 105 | 107 | 108 | 110 | 112 | 113
    114 | 116 | 117 | 119 | 120 | 122 | 124 | 125 | 127 | 128 | 130 | 131
    132 | 134 | 135 | 137 | 139 | 140 | 142 | 143 | 145 | 146 | 148 | 150
    151 | 152 | 154 | 155 | 157 | 158 | 160 | 161 | 163 | 165 | 166 | 168
    169 | 170 | 172 | 173 | 175 | 177 | 178 | 180 | 181 | 183 | 184 | 186
    187 | 189 | 190 | 192 | 193 | 195 | 196 | 198 | 199 | 201 | 203 | 204
    205 | 207 | 208 | 210 | 211 | 213 | 215 | 216 | 218 | 219 | 221 | 222
    223 | 225 | 226 | 228 | 230 | 231 | 233 | 234 | 236 | 237 | 239 | 241
    242 | 243 | 245 | 246 | 248 | 249 | 251 | 252 | 254 | 256 | 257 | 259
    260 | 261 | 263 | 264 | 266 | 268 | 269 | 271 | 272 | 274 | 275 | 277
    278 | 280 | 281 | 283 | 284 | 286 | 287 | 289 | 290 | 292 | 294 | 295
    296 | 298 | 299 | 301 | 302 | 304 | 306 | 307 | 309 | 310 | 312 | 313
    314 | 316 | 317 | 319 | 321 | 322 | 324 | 325 | 327 | 328 | 330 | 332
    333 | 334 | 336 | 337 | 339 | 340 | 51
    gruß inka

  2. #82
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi inka,
    ...könnte die abfrage so aussehen -- if ((t==10) && (tg<520)) --? Ich werde sicher auch noch die passenden stellen für das speichern (und rücksetzen) der zwei variablen t1 und t2 finden, bisher klappte das nicht so ganz
    Ich verstehe leider nicht so ganz, was du im Detail machen willst.

    Ein Ablaufschema zum Finden der Bake könnte ja so aussehen:
    1. Geht mein Akku zur Neige oder habe ich nichts mehr zu tun?
    2. Nein: Meine Aufgabe erledigen oder herumstehen, weiter bei 1.
    3. Ja: Zur Ladestation fahren:
    4. Auf der Stelle so lange drehen, bis die Bake maximal zu empfangen ist.
    5. Geradeaus fahren.
    6. Bake erreicht?
    7. Ja: Weiter bei 13.
    8. Hindernis erkannt?
    9. Ja: Ausweichen, dann weiter bei 4.
    10. Signal weiter gut zu empfangen?
    11. Ja: Weiter bei 5.
    12. Nein: Weiter bei 4.
    -------------------------------------------
    13. Ladestation erreicht, Akku laden!
    14. Akku voll geladen?
    15. Ja: Losfahren und weiter bei 1.
    16. Weiter bei 14.
    -------------------------------------------

    Mit weniger als das wird es nicht gehen...

    ich habe mir folgendes im terminal ausgeben lassen, werde daraus aber nicht schlau:
    In der Hauptschleife (Suchen der Ladestation) würde ich das machen:
    1. task_IR-Empfang -> Einlesen der IR-Empfängerwerte z.B. alle 50ms per Stopwatch. Die Task gibt in einer Variablen z.B. eine 1 aus, wenn die Bake (z.B. mehr als 3x hintereinander) empfangen wird und 0, wenn nicht. In dieser Task keine Ausgaben ans Terminal oder sonstwo, keine Pausen. Die Task ist z.B. eine eigene Funktion, die in der Hauptschleife aufgerufen wird.
    2. task_FahreZurLadestation -> Sucht nach der IR-Quelle und steuert dahin. Braucht intern Regeln, die sich nach o.g. Schema richten, und natürlich die permanenten Infos: IR sichtbar oder nicht (aus der task_IR-Empfang), Hindernis erkannt (ACS o.ä.), Ladestation erreicht, Akkustand.
    3. task_Ladung -> Akku wird geladen, Ende erkannt. Braucht permanente Info: Akkustand.
    Alle Tasks arbeiten autonom (jede z.B. mit eigener/eigenen Stopwatch(es) und teils abhängig von Infos der anderen 2 Tasks:
    - task_IR-Empfang läuft immer
    - task_FahreZurLadestation läuft nur, wenn task_Ladung gerade nicht läuft und umgekehrt
    - Weitere Tasks können gebraucht werden für das hier:
    -- Anzeige von Daten (z.B. zum Debuggen). Immer auch mit Stopwatch (0,5 oder 1s, schneller kann man eh nicht lesen)
    -- Eigentliche Aufgabe des autonomen Roboters (wenn er nicht gerade zur Ladung muss oder lädt)
    -- ...
    Gruß
    Dirk

  3. #83
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hi Dirk,
    danke für Deine ausführliche antwort...

    ich habe wahrscheinlich, nein, sogar ziemlich sicher eine andere herangehensweise an die aufgabe, die ich mir hier gestellt habe, als ein erfahrener programmierer oder elektroniker - beides bin ich auch nicht, auch wenn ich schon einiges gelernt habe... leider geht das viel zu langsam...

    Zitat Zitat von Dirk Beitrag anzeigen
    Ich verstehe leider nicht so ganz, was du im Detail machen willst.
    meine induktive ladestation besteht aus drei komplexen:

    - ladestation - funktioniert soweit...

    - ir-bake - an sich funktioniert sie auch...

    - das zusammenspiel beim finden der ladestation mit hilfe des IR-empfängers am RP6 - fdunktioniert nicht...

    ich kann jetzt einen ablaufplan erstellen wie Du es in Deinem post fantastisch gemacht hast - danke - so in groben zügen hatte ich es mir auch schon skizziert...
    Nach Deiner erklärung weis ich (nein, ich ahne es nur) was ein Task ist - ich würde mich aber hier lächerlich machen, wenn ich ernsthaft über "Tasks" und ähnliches reden würde...
    Es hilft mir nicht weiter mich mit dem großen plan (den ich ja im prinzip hab!) zu beschäftigen, wenn mir das handwerkszeug fehlt um eine funktionierende verschachtelte if-abfragen-schleife zu erstellen. Beispielsweise move- und rotate- funktion, in abhängigkeit von IR-empfang und abgelaufener zeit, ohne acs, accustand, hindernisse und ähnliches, in der skizzenhaft klar wird, ob meine ir-bake so bleiben kann, oder eben nicht. Zu diese erkenntnis muss ich ab zu mal auch ein paar sachen auf dem terminal ausgeben - das sind alles nur versuche die dinge "im kleinen" zu verstehen. Mit den worten eines feinwerktechnikers - ich kann kein flugzeug bauen, wenn ich von aerodynamik keine ahnung habe...

    Und wenn ich ansatzweise weiss, dass die drei komponenten, die ich oben genannt habe auch funktionieren und zusammenspielen, können wir uns gerne über Tasks unterhalten
    gruß inka

  4. #84
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi,
    Es hilft mir nicht weiter mich mit dem großen plan (den ich ja im prinzip hab!) zu beschäftigen, wenn mir das handwerkszeug fehlt um eine funktionierende verschachtelte if-abfragen-schleife zu erstellen. Beispielsweise move- und rotate- funktion, in abhängigkeit von IR-empfang und abgelaufener zeit,...
    Ich denke, es geht vielleicht nicht nur ums Handwerk.
    Erklär doch mal (als "Ablaufschema" oder Wenn-Dann-Abfolge), was du in der "verschachtelten if-abfragen-schleife" machen willst! Wenn (auch) ich die Logik verstehe, dann kommt die Umsetzung im 2. Schritt schon ... ... irgendwie ... ... oder ...
    Gruß
    Dirk

  5. #85
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hallo Dirk,


    ich habe den code von vorhin mit kommentaren versehen, so wie sie mir zutreffend scheinen...

    der roboter steht zunächst im raum, ist eingeschaltet, weiss nicht wo er ist, weisst nicht wo die IR-bake ist.

    und das sollte er tun:

    - misst nach 50ms zuerst ob er IR empfang hat
    - hat er empfang, misst er weiter bis er 10x empfang hatte
    - dann prüft er, ob er diese 10 signale innerhalb von 520ms (tg) empfangen hat
    - ist tg<520 fährt er 100mm
    - ist tg>520 rotiert er um 1 grad
    - fängt wieder mit IR messung an


    Code:
    case 3://
                    setLEDs(0b0100);
    
                    writeString_P("suche der bake   \n");
                    writeChar('\n');
                    initRP6Control();
                    initLCD();
                    startStopwatch3();
                    t=0; //t, t1, t2, tg sind am programmanfang definiert (unint_8)
    
                    while(true) //schleife bis button gedrückt
                    {
    
    
                        while(true) //dauerschleife - wie komme ich da raus?
                        {
    
                            if(getStopwatch3() > 50) //wenn stopwatch3 > 50ms messe IR empfang
                            {
                                temp = read_IR_value(); //Ir empfang (PB2) messen
    
    
                                if (temp == 0) //wenn IR empfang dann schleifendurchlauf, sonst rotate
    
                                {
                                    t1 = getStopwatch3(); // stopwatch3 wert beim ersten "treffer"
                                    setMultiIOLED3(1);
                                    setMultiIOLED3(0);
                                    if (t<10) // schleife für 10 treffer
                                    {
                                    t++;
                                    setStopwatch3(0); // stopwatch nach treffern 1 - 9 auf 0
                                    if (t == 10) // wenn t=10 dann
                                    {
                                    t2 = getStopwatch3(); // stopwatch3 wert für den 10. treffer
                                    tg = t2-t1;
                                    if (tg<520) // wenn tg < 520 move
                                    {
                                    move(100, FWD, DIST_MM(100), false);
                                    setStopwatch3(0); //stopwatch3 na 10 treffern auf 0
                                    t=0;
                                    }
    
                                    }
    
                                    }
                                }
    
                                else
                                {
                                    setMultiIOLED1(1);
                                    setMultiIOLED1(0);
                                    rotate(80, RIGHT, 1, false); // drehe rechts um 1 grad, nicht blockierend
                                    setStopwatch3(0); //stopwatch3 nach rotate auf 0
                                }
    
                            }
                        }
                            /**************************/
                            uint8_t key_1;
                            key_1 = getMultiIOPressedButtonNumber();
                            if(key_1 != 0) break;
                            /**************************/
                    }
    
    
    
                        break;
    gruß inka

  6. #86
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi inka,
    der roboter steht zunächst im raum, ist eingeschaltet, weiss nicht wo er ist, weisst nicht wo die IR-bake ist.
    und das sollte er tun: ...
    Ok, das wären ja so etwa die Schritte 4,5,10,11,12 von meinem Ablaufschema. Klingt gut ...

    Code:
    while(true) //dauerschleife - wie komme ich da raus?
    Du kannst die DO-WHILE Schleife nehmen, wenn in der Schleife irgendein Ergebnis zum Abbruch vor dem nächsten Durchlauf führen soll:
    Code:
    do
    {
       // ...
    }
    while (Bedingung);
    Als "Bedingung" schreibst du dann den Test rein, der FALSE wird, wenn die Schleife verlassen werden soll.

    Code:
    rotate(80, RIGHT, 1, false); // drehe rechts um 1 grad, nicht blockierend
    Geht, funktioniert aber nur mit der task_motionControl() der RP6 Library, die in der Hauptschleife dauernd aufgerufen werden muss. Das Drehen um 1° dürfte auch schwierig werden, fang mal mit 5° an.
    Gruß
    Dirk

  7. #87
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hi Dirk,
    Zitat Zitat von Dirk Beitrag anzeigen
    Code:
    rotate(80, RIGHT, 1, false); // drehe rechts um 1 grad, nicht blockierend
    Geht, funktioniert aber nur mit der task_motionControl() der RP6 Library, die in der Hauptschleife dauernd aufgerufen werden muss. Das Drehen um 1° dürfte auch schwierig werden, fang mal mit 5° an.
    mein programm läuft ja auf der m32. Läuft dieser "task_motionControl()" nicht schon in der slavesoftware der base?
    gruß inka

  8. #88
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi,
    mein programm läuft ja auf der m32. Läuft dieser "task_motionControl()" nicht schon in der slavesoftware der base?
    Stimmt, ...
    Gruß
    Dirk

  9. #89
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hi Dirk,

    im code werden die variablen t1, t2 und tg verwendet

    wenn ich diese variablen t1, t2 und tg als uint8_t definiere (so wie sie im code nachher verwendet werden) passieren die seltsamsten dinge:

    auch wenn diese variablen nur den abschnitt im case3 bertreffen, haben sie einfluss auf das verhalten im abschnitt case1 und case2 und zwar NUR die reine definition, auch wenn der code, wo sie verwendet werden auskommentiert wird!

    im case1 wird z.b. die IR bake überhaupt nicht erkannt, auch wenn sie direkt vor dem IR-empfänger steht

    im case2 werden im terminal statt 0000 (empfang) bzw. 0004 (kein empfang) die reinsten fantasiezahlen ausgegeben und die bake nicht erkannt

    definiere ich statt "t1" z.b. "x" und statt "t2" z.b. "y" passiert das nicht, das programm läuft ganz normal ab. Der neue abschnitt case3 läuft noch nicht richtig, aber case1 und 2 laufen ganz normal...

    ich konnte mir jetzt mit dem umdefinieren der variablen helfen, will Dich jetzt auch nicht mit dem ganzen code behelligen, gibt es aber dafür eine erklärung?
    gruß inka

  10. #90
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi inka,
    schau dir noch mal die Datentypen in GCC an!

    Hier die Wichtigsten:
    uint8_t -> 0..255
    int8_t -> -128..+127
    uint16_t -> 0..65535
    int16_t -> -32768..+32767
    uint32_t -> 0..4294967295
    int32_t -> -2147483648..+2147483647
    float -> -3.4E38..+3.4E38 (Fließkomma)

    Wenn du negative Zahlen brauchst, must du schon einen intX_t Typ nehmen, bei nur positiven Werten reicht ein uintX_t.
    Deine Werte liegen teils ja schon über/bis 520, also kommst du mit uint8_t nicht hin (Werte passen nicht in die Variablen und machen dann Mist).
    Gruß
    Dirk

Seite 9 von 26 ErsteErste ... 789101119 ... LetzteLetzte

Ähnliche Themen

  1. IR-Bake
    Von tornado im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 05.07.2007, 17:37
  2. IR-Bake
    Von Bernd-das-Brot im Forum Sensoren / Sensorik
    Antworten: 38
    Letzter Beitrag: 13.12.2005, 16:14
  3. ir-bake
    Von pebisoft im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 8
    Letzter Beitrag: 17.01.2005, 13:41
  4. ir-bake
    Von pebisoft im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 17.01.2005, 07:01
  5. Bake
    Von techboy im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 02.11.2004, 10:17

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad