Den Quellcode für eine NIBO2-Linienfolge findest Du inkl. der Hex-Files auf der RoboterCC Seite:
Kalibrierung: http://www.roboter.cc/index.php?opti...&projectid=127
Linienfolge 2: http://www.roboter.cc/index.php?opti...&projectid=128
Druckbare Version
Den Quellcode für eine NIBO2-Linienfolge findest Du inkl. der Hex-Files auf der RoboterCC Seite:
Kalibrierung: http://www.roboter.cc/index.php?opti...&projectid=127
Linienfolge 2: http://www.roboter.cc/index.php?opti...&projectid=128
Danke, für die schnellen antworten. Ich hab die Programme ausprobiert und sie laufen auf meinen nibo2. Kann mir jemand mit dem programm für das ausweichen von Gegenständen helfen?
Hallo, noch Interesse an Nibo und C?
Ich werde versuchen, meine Erkenntnisse mitzuteilen.
Ich benutze das Atmel Studio und die aktuelle Library.
Ich versuche, den Code zu kommentieren!
Viele Grüße auch Workwind, der offensichtlich fleißig mitliest!
Lisbeth
Zitat:
Zitat von Lisbeth2010
Code:/* Linie einfachst. Erstmal Bodensensoren */
#include <avr/interrupt.h>
#include <nibo/niboconfig.h>
#include <nibo/iodefs.h>
#include <nibo/bot.h>
#include <nibo/i2cmaster.h>
#include <nibo/leds.h>
#include <nibo/delay.h>
#include <nibo/motco.h>
#include <nibo/irco.h>
#include <nibo/floor.h>
#include <nibo/adc.h>
#include "utiliw.h"
#define WHILE_1_TIME_GRID 20
uint8_t counter_1ms;
uint8_t speed_left = 40; // Ticks/Sekunde
uint8_t speed_right = 40; // Ticks/Sekunde
// ------------------------------------------------------------
// ---------- init timer2 -------------------------------------
// ------------------------------------------------------------
void init_timer2(void) {
TCCR2 = 0x00; // normal port operation
TCNT2 = 0x83; // set count value (131)
}
// ------------------------------------------------------------
// ---------- start timer2 ------------------------------------
// ------------------------------------------------------------
void start_timer2(void) {
cli(); // disable global interrupts
counter_1ms = 0;
TCCR2 |= 0x05; // CS02 = 1; CS01 = 0; CS00 = 1 -> clk/128
TIMSK |= (1<<TOIE2); //0x01; // enable timer overflow interrupt
sei(); // enable global interrupts
}
// ------------------------------------------------------------
// ---------- stop timer2 -------------------------------------
// ------------------------------------------------------------
void stop_timer2(void) {
cli(); // disable global interrupts
TCCR2 &= ~0x05; // stop timer
TIMSK &= ~(1<<TOIE2);//0x01; // disable timer overflow interrupt
sei(); // enable global interrupts
}
// ------------------------------------------------------------
// ---------- timer2 ISR --------------------------------------
// ------------------------------------------------------------
ISR(TIMER2_OVF_vect) { // timer2 overflow
// reload counter value high byte; 0x83 corresponds to 1ms
// clk/128 entspricht 125 kHz entspricht 8 us
TCNT2 = 0x83; // 131 bis 256 also 125 mal 8 us
counter_1ms++;
if (counter_1ms >= WHILE_1_TIME_GRID) {
stop_timer2(); // Zeitdauer unbekannt, deshalb stoppen
// Bodensensoren messen
floor_measure_iw();
//zahlausgabe(floor_mw[2]); // da kein Display!
if (floor_mw[2] < 32) { // schwarz = 0, weiß = 1023
motco_stop();
motco_update();
leds_set_status(LEDS_RED,0);
} else {
leds_set_status(LEDS_GREEN,0);
// delta_motco ms nach vorn fahren
motco_setSpeed(speed_left,speed_right);
motco_update(); // jetzt fährt er erst los!
} // end if floor
counter_1ms = 0;
start_timer2(); // alles abgearbeitet
} // end if counter
} // end ISR
/* die main */
int main() {
sei();
bot_init();
i2c_init();
leds_init();
floor_init();
init_timer2();
delay(2000); // damit er nicht gleich losrast!
motco_setSpeedParameters(5,4,6); // Empfehlung vom "Chef"
start_timer2();
while (1) {
// tu was
delay(10000);
}
return 0;
}
Hallo,
hab das Programm ausprobiert wo der nibo2 der line folgen soll aber irgendwie haut das nicht. Wollte ihn auf weißen Untergrund fahren lassen, also sprich so das er eben ner line folgt aber er fährt an satzweise auf ihr entlang und dann irgendwo anders hin aber nicht mehr auf ihr. Kann mir bitte jemand helfen?
Gruß Leila
Hallo
so wie du es beschreibst macht der Nibo nicht was du willst. Würde erst mal vorschlagen, du gibst ein paar weitere Infos bekannt. Ein Programm zum folgen einer Linie ist schon was besseres. Wie steht es den mit C? Anfänger, Fortgeschritten oder Profi? Als was würdest du dich bezeichnen? Hast du die Programme auch dem Tutorial abgetippt und ausprobiert oder sogar verstanden? Der Sinn dieser Seiten ist die Hilfe. Das bedeutet aber nicht das du alles bis ins kleinste Beschrieben und ausgearbeitet bekommst. Fast jeder von uns hat mal ganz klein angefangen und sich durch die Programmierung gelesen. Wir können dir helfen - kein Problem. Aber machen musst du es allein. Ich habe einige Programme zum Testen der einzelnen Funktionen. Dein Programm, so wie du es haben willst, steht unmittelbar vor dem Bildschirm und wartet auf dich (hat so um die 100 Tasten zur freien Auswahl).
Achim
Ich hab alle Programme abgetippt und auch verstanden. Bezeichnen würd ich mich als fortgeschritten mehr aber auch nicht. Das Programm zum Linienfolgen bereitet mir trotzdem ein paar Probleme und ich weiß nicht woran es liegt.
Hi leilahasi
Hast Du bei deinem NIBO2 auch die Bodensensoren kalibriert? Wie das geht steht u.a. im Nibo2Tutorial_20091126.pdf (von der nicai-homepage downladen), das dafür benötigte *.hex file ist bei der lib im directory hex....
dann müßte (müßte!) es funktionieren; ein funktionierendes c-file findest Du auch in http://www.roboter.cc/index.php?opti...&projectid=128 (sollte gemäß Workwind - da Author - funktionieren...)
Nachtrag - Du mußt das *.zip file runterladen, wenn Du es auf deinem PC kompilieren willst!
viel Glück
mfg
Hero_123
Hallo
deine Aussage ist recht dünn. Was macht er den oder nicht? Bekommst du Fehlermeldungen beim kompilieren? Welche Funktion soll er machen und was macht er wirklich. Wenn du das Prg verstanden hast, kannst du doch an den entsprechenden Stellen was verändern. Ansonsten kann ich nur das wiederholen was an anderer Stelle steht. " Sorry, habe gerade mein Glaskugel nicht zur Hand, " den ohne sie bin recht blind. Also Hilfe bedeutet an dieser Stelle Infos.
Achim
Beim Kompillieren tritt kein Fehler auf und der Roboter bewegt sich auch, d.h. er fährt einfach nur vorwärts gegen irgendwas gegen und probiert immer weiter zu fahren. Ich had dann seine Linien- und Bodensensoren nochmal konfiguriert und gehofft das es dadurch funktioniert aber auch dann hat es nicht hin gehauen.
Ich hab ihn am Sonntag das Programm zum Linienfolgen schon einmal rauf gespielt und dann hat sich der nibo2 so bewegt das er gegen was gegen gefahren ist, hat dann den rückwärtsgang rein gehauen und ist wo anders lang gefahren, bis er wieder irgendein hindernis hatte wo er gegen gefahren ist und dann hat sich das spiel wiederholt.
Ich hab jetzt im nibo2 tutorial nochmal nach geguckt und hab meine Werte des ATmega128 mit dieser Aussage verglichen.
Wählen Sie nun im angezeigtem Dialog ATmega128 aus und testen Sie die
Verbindung indem Sie Read Signature drücken.
Im Tabsheet Fuses dürfen keine Änderungen vorgenommen werden! Die
Fuse-Bits des ATmega128 sind standardmäßig auf folgende Werte
eingestellt: EXTENDED=0xFF, HIGH=0xC1, LOW=0xFF. Diese Werte dürfen
nicht geändert werden, da man sich sonst aus dem Controller aussperrt!!!
Meine Werte sind sind andere als da stehen. Könnte das damit zusammenhängen?