- 12V Akku mit 280 Ah bauen         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 30

Thema: Programmieren lernen

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71
    Anzeige

    E-Bike
    Hey, Danke für die schnelle Antwort.
    Und wenn man die Taste los lässt wird´s wieder rot?
    Und ich denke hier im Forum kann man beim DU bleiben.
    Gruß Frank

    P.S. werde im Laufe der Zeit bestimmt noch 1000 Fragen zum Programmieren haben

  2. #12
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Achtung! "=" ist nicht "==" !

    So könnte es funktionieren:
    Code:
    #include "asuro.h"
    
    int main(void)
    {
       int p, taste; // Variablen für Pausenschleife und Tastenwerte
    
       Init(); // muss immer aufgerufen werden!
       while(1) // endlos bis Akkus leer
       {
       	taste=PollSwitch(); // Tasten zweimal einlesen und Werte vergleichen
       	if((taste==PollSwitch()) && (taste>7)) // Taste auf der linken Seite gedrückt?
       	{
    			StatusLED(GREEN); // ja, dann grün leuchten
    			while(PollSwitch() > 0); // warten bis Taste wieder losgelassen wird
       		for(p=0;p<1000;p++) Sleep(72); // noch eine Sekunde grün bleiben
    		}
    		else StatusLED(RED); // keine linke Taste gedrückt, es wird rot angezeigt
       }
       return 0; // wird nie erreicht
    }
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Eimal allgemein gesehen.

    Es giebt hier sehr viele junge aber auch ältere welche sich
    ziemlich Mutig ans Programmieren machen ohne auch nur
    annähernd zu wissen was sie dabei tun.

    Am Anfang mag das sogar kleine Erfolge bescheren, aber die
    lassen schneller nach als es einem Lieb ist.

    Ich möchte deshalb allen den Rat geben sich etwas Zeit zu nehmen
    und die Datenblätter der Bauteile/µc's anzuschauen und versuchen
    diese auch zu iterprtieren. Verstehen kann ich die auch nicht, habe nie
    Englisch gelernt. Aber die Fachausdrücke habe ich mir hatt angeeignet.
    Die Arbeitsweise einer "von Neumann Maschine" angelesen.

    Wer es wiklich begreifen will, sollte auf alle Fälle mal ein Jahr
    oder gelegendlich in ASSEMBLER proggen, die einzigste Sprache
    wo man einen Prosessor verstehen lehrnt und auch weiß was man
    da letztendlich "anrichtet".

    Außerdem ist Assembler eher sau einfach, es gibt nur wenige Befehle
    und die kann man sehr schnell auswendig lernen. Nachteil, für jeden
    µc muß man neu lehrnen, läßtig, Zeitaufwändig, grenzenlos schnell.

    Fazit:

    Wer als Qereinsteiger mit einer Hochsprache anfängt wird schnell seine
    Grenzen erreichen und einen µc nie wirklich verstehen lenrnen.
    Mühseelig aber besser ist von vorne Anfangen, zumindest bis einige
    Grundlagen geklärt sind.

    Gruß Richard

  4. #14
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    grenzenlos schnell
    Kann sein, muss aber nicht.
    Ein weiterer nachteil von ASM ist, dass bei den Programmen sehr viel geschrieben werden muss (im Gegensatz zu z.B. C) und dadurch unübersichtlich werden kann. Teilweise gehen Programme schneller in C als in ASM. Ich programmiere in C. Habe es aber auch in der Schule zum Teil gelernt. Ein weiterer Vorteil von C ist, dass man z.B. Linux-, Windows-,... und µC Programme in C schreiben kann. Man kann C Programme leichter auf ein anderes Betriebssystem bzw µC portieren als z.B. Basic oder ASM.

    MfG Hannes

  5. #15
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.686
    Zitat Zitat von Richard
    ... Wer es wiklich begreifen will, sollte auf alle Fälle mal ein Jahr oder gelegendlich in ASSEMBLER proggen, die einzigste Sprache wo man einen Prosessor verstehen lehrnt und auch weiß was man da letztendlich "anrichtet" ...
    Kann ich nur völlig bestätigen. Und da ATMEL nicht für jeden Controller einen neuen Istruction Set erstellt und auch andere Hersteller in dieser Hinsicht nicht gerne innovativ sind, sehe ich meine Kenntnisse in ASM schon als gute Anschaffung. Selbst meine prähistorischen Kenntnisse in Z80-Assembler hatten mir bei Atmel geholfen.

    Im Übrigen bezeichne ich mein Programmiergestammel meist als C.
    Ciao sagt der JoeamBerg

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71
    So, endlich läuft er (fährt natürlich) wieder. Selbsttest bestanden, und promt will ich jetzt wieder programmieren.
    folgenden Text eingegeben:

    #include "asuro.h"
    int main(void)
    {
    Init();
    int p;
    int taste=PollSwitch();
    StatusLED(RED);
    while(taste>2)
    {StatusLED(GREEN);
    for(p=1;p<300;p++)
    {Sleep(72);}
    }
    while(1);
    return 0;
    }
    Geh´t nicht. Brennt nur die rote LED.
    Was mach ich denn falsch?????????

    Bei dem mit if else hab ich´s verstanden, und es funzt auch:

    include "asuro.h"

    int main(void) {
    unsigned char t;
    Init();
    int p;
    while (1) {

    t=PollSwitch();

    if (t > 1)
    {
    StatusLED(RED);
    for(p=1;p<300;p++)
    {Sleep(72);}

    }

    else
    {
    StatusLED(YELLOW);
    }

    }
    return 0;
    }
    Ich will doch nur die WHILE Schleife verstehen. Und mit dieser Funktion genau so die LED´s steuern--um´s zu begreifen.

  7. #17
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Eine einfache Variante deines Programms (ungetestet):
    Code:
     #include "asuro.h"
    int main(void)
    {
       int p;
    
       Init(); // muss immer aufgerufen werden!
       while(1) // Endlosschleife
       {
          StatusLED(RED);
          while(PollSwitch()>2) // Tasten immer wieder neu einlesen und auswerten
          {
             StatusLED(GREEN);
             for(p=1;p<300;p++) Sleep(72);
             StatusLED(YELLOW);
             for(p=1;p<300;p++) Sleep(72);
          }
       }
       return 0; // wird nie erreicht
    }
    Was mach ich denn falsch?
    Du verwendest kein Code-Tag und zuviele "?" ;)

    Deine Programmversion wurde nur einmal ausgeführt und blieb dann in der Endlos-While()-Schleife vor dem return stecken. Außerdem wurde bei while(taste>2) der Wert für taste nicht mehr neu eingelesen. Wenn die Schleife einmal betreten wurde, konnte sie nie mehr abgebrochen werden:

    Code:
    #include "asuro.h"
    int main(void)
    {
    	int p;
    	int taste;
    
    	Init(); // muss immer aufgerufen werden!
    	while(1) // Endlosschleife
    	{
    		StatusLED(RED);
    		taste=PollSwitch(); // Tasten einlesen
    		while(taste>2) // in dieser Schleife wird taste nicht mehr aktuallisiert!
    		{
    			StatusLED(GREEN);
    			for(p=1;p<300;p++) Sleep(72);
    			// taste=PollSwitch(); // nur wenn die Tasten erneut eingelesen werden
    		}                         // kann die Schleife wieder verlassen werden!
    	}
    	return 0; // wird nie erreicht
    }
    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71
    Hi Danke für die schnelle Hilfe. Ich denke da kann ich was mit anfangen.
    Gruß Frank

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71
    Hi, ich hab mal wieder ein Problem:
    folgendes Programm läuft nicht so wie ich es will
    Code:
    #include "asuro.h"
    
    int main(void)
    {
    int p;
    int a=400;
    
    Init();
    	
    
    		while(1)
    	{	MotorDir(FWD,FWD);
    		BackLED(OFF,OFF);
    		MotorSpeed(175,175);
    		BackLED(OFF,OFF);
    		
    		while(PollSwitch()>==8)
    		{		BackLED(ON,OFF);
    			MotorDir(BREAK,BREAK);
    			MotorSpeed(0,0);
    			for(p=1;p<200;p++)Sleep(255);
    			MotorDir(RWD,RWD);
    			MotorSpeed(120,170);
    			for(p=1;p<a;p++)Sleep(255);
    			MotorSpeed(0,0);
    			for(p=1;p<300;p++)Sleep(72);
    			a=a+20;
    		}
    		while((PollSwitch()<8)&&(PollSwitch()>1))
    		{		BackLED(OFF,ON);
    			MotorDir(BREAK,BREAK);
    			MotorSpeed(0,0);
    			for(p=1;p<200;p++)Sleep(255);
    			MotorDir(RWD,RWD);
    			MotorSpeed(170,120);
    			for(p=1;p<a;p++)Sleep(255);
    			MotorSpeed(0,0);
    			for(p=1;p<300;p++)Sleep(72);
    			a=a-50;
    		}
    		while(a<200)
    		{	break;
    			FrontLED(ON);
    		}
    	
    	
    	}
    return 0;
    }
    Was es bewirken soll ist denke ich ersichtlich. Aber ich kann so oft ich will die rechten Taster drücken--break und FrontLED treten nicht ein . Wo liegt mein Fehler
    Gruß Frank

  10. #20
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Code:
          while(a<200)
          {   break;
             FrontLED(ON);
          }
    Das break ist hier ein C-Befehl und bewirkt, dass die aktuelle while-Schleife sofort verlassen wird. Dadurch wird der FrontLED(ON)-Befehl nie ausgeführt. Vermutlich meinst du MotorDir(BREAK,BREAK).

    Was es bewirken soll ist denke ich ersichtlich.
    ??? Ein paar Kommentare im Programm wären echt hilfreich.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress