microcontroller und roboteransteuerung für anfänger



  • hey leute,

    ich bin totaler neuling im c++ programmieren, habe aber große ziele 😉 ...
    ich habe auch schon diverse dateien, bücher und sonstiges durchgestöbert, aber leider bin ich nie richtig fündig geworden...
    meine lehrer (pseudo c++ profis) konnten mir überhaupt nicht weiterhelfen

    ich nutze den c++ builder 6.0 von borland und habe dazu folgende problemstellungen:

    1. in borland soll es doch möglich sein, befehle, wie cin, cout, str, usw. zu nutzen, aber wenn ich damit anfange beispiele zu compilieren, will borland diese befehle nicht erkennen (habe auch brav die header hinzugefügt).

    2.ich habe vor über ein c++ programm einen microcontroller und/oder einen roboter a la fischertechnik anzusteuern, habe aber bisher auch keinerlei lektüre dazu gefunden und noch weniger ahnung davon oder erfahrung damit...
    mein grundprogramm steht schon fast, aber ich habe noch nicht mal ansätze, wie ich mit die hardware programmieren soll (ne webcam soll auch mit rein 🙂 ). hätte da jemand rat?

    ich hoffe ihr könnt mir helfen!
    vielen Dank
    lg, BlackBird



  • Hallo,

    zu 1.
    cin und cout sind kein Problem. Was soll str sein?
    Welche Fehler kommen denn?

    zu 2. keine Ahnung



  • in einem beispielprogramm, dass ich mir heruntergeladen hab, indem die exe auch wunderbar funzt, kommen z.b. folgende meldungen nach dem compilieren:

    [C++ Error] iostream.h(26): E2282 Namespace name expected
    [C++ Error] Unit1.cpp(71): E2303 Type name expected
    [C++ Error] Unit1.cpp(114): E2451 Undefined symbol 'cout'
    [C++ Error] Unit1.cpp(132): E2451 Undefined symbol 'endl'
    [C++ Error] Unit1.cpp(360): E2451 Undefined symbol 'cin'

    muss man da evtl. was am compiler verstellen? ich habe bisher auch nur gelernt, buttons, labels, etc. funktionen zuzuweisen, die form mit iostream, habe ich leider nie proggen müssen 😞 ...

    sorry, sollte std heißen 🙂

    schade, soll auch komplex sein, aber irgendwie möglich 🙂



  • Hallo,

    vielleicht solltest Du erstmal mit einem leeren Kosolenprogramm anfangen, um zu lernen wie das mit cin und cout funktioniert.

    Im C++-Builder 6

    Datei -> Alle schliessen
    Datei -> Neu -> Weitere -> Auf der Lasche Neu -> Konsolen Experte

    Aus den geposteten Fehlermeldungen kann man nur vermuten, was Dein Problem ist.

    Um Dich an ein so komplexes Problem zu wagen, solltest Du schon noch etwas Grundlagen lernen, sonst wirst Du schnell frustriert aufgeben.

    Zu Deinen Hardwarefragen solltest Du mal einen Blick in ein paar andere Foren werfen.

    In roboternetz.de treffen sich die Hobby-Roboterbastler.

    Und in roboterforum.de hauptsächlich Leute, die beruflich oder an Uni/Berufsschule mit (Industrie-) Robotern zu tun haben.



  • alles klar,

    danke schon mal für die anderen seiten.

    ich habs mal mit dem konsolen experten probiert, aber leider kein erfolg...
    kann es sein, das mein borland auf ide eingestellt ist oder mir gar ein compiler fehlt? die :int main, cout, using namespace, etc. sind doch befehlszeilen-copmpiliert, oder liege ich damit nun voll daneben?

    also irgendwelchen dingen funktionen zuweisen klappt ja recht gut, aber ich habe das gefühl, dass wir damit in meiner schule an dem ziel vorbeigeschossen sind...

    das sieht ja auch ganz anders aus als in den büchern

    hier mal ein beispiel indem ich einen button programmirt hab, was bei mir prima funktioniert, aber so ganz anders ausieht...

    void __fastcall TFcube::BshuffClick(TObject *Sender)
    {
    String var;
    var = StrToInt(Cshuff->Text); //Ließt die Zahl der ComboBox aus

    do //Schleife für die Shuffle-Funktion
    {
    int shuffle;

    shuffle = random(11);

    switch (shuffle)
    {
    case 0: Bui->Click(); break;
    case 1: Bu->Click(); break;
    case 2: Bl->Click(); break;
    case 3: Bfi->Click(); break;
    case 4: Bf->Click(); break;
    case 5: Br->Click(); break;
    case 6: Bb->Click(); break;
    case 7: Bli->Click(); break;
    case 8: Bdi->Click(); break;
    case 9: Bri->Click(); break;
    case 10: Bbi->Click(); break;
    }
    var = var - 1; //Subtrahiert von der Variablen pro
    } //Durchlauf 1 ab, bis 1 erreicht wurde
    while(var >= 1);

    }



  • Oh Mann :xmas2:

    Dir fehlt vermutlich kein Compiler, sondern die Grundlagen damit umzugehen.

    Ich hab jetzt nur einen C++-Builder 2009 hier, aber ich versuchs mal:

    Auf C++Builder-Projekte -> Konsolenanwenung klicken,
    das entspricht bei Dir wie oben geschrieben "Datei ... Konsolenexperte".

    Bei mir kommt dann ein Dialog wo man C++ als Typ auswählen kann und ein Häkchen bei VCL verwenden entfernen sollte.

    Dann macht er eine neue cpp-Datei auf.

    Wenn man die jetzt so ergänzt:

    //---------------------------------------------------------------------------
    #include <windows.h>
    #include <iostream>
    #pragma hdrstop
    
    #include <tchar.h>  // Diese Zeile brauchst Du im BCB6 nicht
    //---------------------------------------------------------------------------
    
    using namespace std;
    
    #pragma argsused
    // Bei Dir steht hier int main(int argc, char* argv[]) , bitte so lassen
    int _tmain(int argc, _TCHAR* argv[])
    {
      cout << "Hello World" << endl;
    
      getchar();
    
      return 0;
    }
    //---------------------------------------------------------------------------
    

    Bitte achte auf meine Kommentare im Quelltext, diese Beispiel wurde mit einem neueren C++Builder geschrieben. Lass die Zeile mit dem Main so wie sie bei Dir aussieht.

    Lässt sich das Programm dann übersetzen ?
    Wenn man es startet, erscheint dann ein Konsolenfenster mit Hello World, das weggeht, wenn man eine Taste drückt ?

    Und ja, das Programm sieht anders aus, als die Programme mit Deinem Button.
    Und nein, Du kannst beides nicht so einfach mischen.

    Entweder Du schreibst ein VCL-Programm mit Buttons oder ein Konsolenprogramm mit cin und cout. Aber nicht beides gleichzeitig.



  • das mir einige/viele Grundlagen fehlen, will ich nicht bestreiten...
    hoffe aber, dass das trotzdem bald mal klappt.

    ich hab diese Anwendung mal über New->Console Wizard(habs nur in englisch) (Häkchen bei VLC entfernt, Häkchen bei C++, bei CLX und Console Application drin) geöffnet. Ich habe auch die Kommentare beachtet, aber leider wurden mir wieder folgende Fehler angezeigt 😡 :

    [C++ Error] Unit1.cpp(14): E2451 Undefined symbol 'cout'
    [C++ Error] Unit1.cpp(14): E2451 Undefined symbol 'endl'
    [C++ Error] Unit1.cpp(16): E2268 Call to undefined function 'getchar'

    das ist doch fürn Kanal... das ich nicht mal die simpelsten Konsolenanwendungen hinkriege.
    zumindest bin ich schon mal weiter, was die Schreibweisen angeht.



  • Die

    #include <windows.h>
    #include <iostream>
    

    und das

    using namespace std;
    

    sind auch da wo sie hingehören ?

    Lass das getchar() eventuell mal weg, bin nicht sicher ob der BCB6 das hat.



  • Mein Programm sieht in etwa so aus:

    //---------------------------------------------------------------------------
    
    #include <windows.h>
    #include <iostream>
    
    #pragma hdrstop
    
    //---------------------------------------------------------------------------
    
    using namespace std;
    
    #pragma argsused
    int main(int argc, char* argv[])
    {
    
            cout << "Hello World" << endl;
    
            return 0;
    
    }
    //---------------------------------------------------------------------------
    

    Jetzt kommt nur noch:
    [C++ Error] Unit1.cpp(16): E2451 Undefined symbol 'cout'
    [C++ Error] Unit1.cpp(16): E2451 Undefined symbol 'endl'

    Und wenn ich

    getchar();
    

    drin hab, kommt halt noch der andere Fehler.

    total blöd 😞



  • So, die Version habe ich gerade nochmal mit dem BCB6 getestet, geht ohne Probleme.

    Sorry für die Verwechslung mit dem getch(), dachte das geht nur bei VC.

    //---------------------------------------------------------------------------
    #include <iostream>
    #include <conio.h>
    #pragma hdrstop
    
    //---------------------------------------------------------------------------
    
    using namespace std;
    
    #pragma argsused
    int main(int argc, char* argv[])
    {
      cout << "Hello World" << endl;
    
      getch();
    
      return 0;
    }
    //---------------------------------------------------------------------------
    


  • kein Ding, ich bin über jegliche Hilfe froh!

    funzt aber auch nicht.

    Das muss doch aber nun langsam an meiner Borland Version liegen...
    Hab soweit alles probiert, aber immer und immer wieder kommen diese Fehler.

    Gabs evtl. Versionen, die nur VCL tüchtig waren? Denn das läuft ja ohne Probleme...



  • Du willst Robos und anderen Krimskrams ansteuern...

    das mir einige/viele Grundlagen fehlen, will ich nicht bestreiten...

    dann kommst du so aber nicht sehr weit. Um das zu machen was du vorhast werden noch Jahre vergehen. Arbeite dich mal langsam vor

    funzt aber auch nicht.

    Das muss doch aber nun langsam an meiner Borland Version liegen...
    Hab soweit alles probiert, aber immer und immer wieder kommen diese Fehler.

    Gabs evtl. Versionen, die nur VCL tüchtig waren? Denn das läuft ja ohne Probleme...

    Jede Borland C++ Version untersützt seit frühster Zeit die Konsolenanwendungen da sie Grundlage jeder Programmierung sind



  • wow, solange 😮 ???
    hab von jetzt an noch genug Zeit, bis die Kiste stehen soll (Der Robo soll auch nur drei Aktionen ausführen und kein Auto bauen können). Man wächst schließlich mit seinen Aufgaben 😉 .

    Mein Grundprogramm für die spätere Aufgabe steht ja schon fast (in VCL), aber da ich noch nicht herausfinden konnte, auf welche Art man mit µC oder Robotern kommunizieren kann, wollte ich mich mal an die Konsolenanwendung wagen.

    Glaub ich ja, aber warum erkennt er diese Befehle dann bei mir nicht? Ich habe ja alles soweit wie beschrieben ausgeführt.



  • Hm,

    ich fürchte auch, vom Robotersteuern bist Du noch weit weg, aber das wollte ich nicht so deutlich sagen. 😉

    Aber, auf allen Versionen vom C++-Builder gehen Kommandozeilenprogramme.

    Ich wüsste jetzt auch nicht, wie man einen sollen Fehler hinbekommen könnte, außer vielleicht in den Headerdateien herumzuschreiben.

    Er findet iostream, aber nicht was drin ist ? Sehr merkwürdig.

    Die Fehlermeldung deutet eigentlich auf ein vergessenes using namespace std; aber das scheint ja drin zu sein.



  • Also um es mal so zu sagen, ich habe davon noch gar keinen Plan 😃 .
    Aber was noch nicht is...

    Richtig. Ich hab mir auch schon spaßeshalber diverse andere cpp-Dateien heruntergeladen, aber immer waren Meldungen dabei, dass er die Konsolenbefehle nicht kenne. Ich würde den Fehler auch immer zuerst beim Benutzer suchen, aber bei solch einer kleinen Anwendung mit so wenig Fehlerquellen und richtigem Code...



  • lad dir mal zum testen dev++ runter und hack mal da ein

    #include <iostream>
    using namespace std;
    int main()
    {
    cout<<"hallo welt";
    getchar();
    return 0;
    }
    

    bist du dir auch sicher das du bei der auswahl von konsollenprogramm auf c++ und konsolenanwendung geklickst hast 😮 ?



  • also mit dev++ klappt das wunderbar...

    Ich bin unter Borland auf New-> unter "New Items" ->New-> Console Wizard (alles leider in englisch).

    Dort konnte ich den Source Type C oder C++ auswählen (C++ ausgewählt).

    Dann standen mir noch zur Auswahl:

    Use VCL (nix)

    Use CLX (markiert)

    MultiThreaded (stand nicht zur Auswahl, ist aber ebnfalls markiert)

    ConsoleApplication (markiert)

    Specify project source (nix)

    Nachdem ich OK gedrückt habe, kam eine Unit.cpp, indem folgendes stand:

    //---------------------------------------------------------------------------
    
    #include <clx.h>
    #pragma hdrstop
    
    //---------------------------------------------------------------------------
    
    #pragma argsused
    int main(int argc, char* argv[])
    {
            return 0;
    }
    //---------------------------------------------------------------------------
    

    Dort habe ich dann den "Hello World" Code eingeben und dann kamen die Fehler.

    Aber unter Dev++ funktioniert es ohne Probleme...
    Basiert der auch auf C++? Dann kann ich ja den zum probieren nehmen, oder?



  • Solange du keinen Grafikdesinger brauchst kannst du auch den nehmen.



  • CLX darf auch nicht markiert sein, da du ja kein Kylix-Derivat programmieren willst. CLX ist quasi die Linux-Variante der VCL, also in deinem Fall nicht notwendig.



  • Gut zu wissen, hatte aber leider auch keinen positiven Effekt gehabt... Ich versuche mich einfach mal weiter am dev++


Anmelden zum Antworten