- 3D-Druck Einstieg und Tipps         
Seite 8 von 9 ErsteErste ... 6789 LetzteLetzte
Ergebnis 71 bis 80 von 89

Thema: 1 Servo mit 2 Tasten ansteuer, aber wie :-(

  1. #71
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Die letzte Frage habe ich übersehen.
    Es geht auch
    Code:
    if(rxwert==0x38){
    tu was 
      }
     else if(rxwert==0x32){
    tu was anderes
     }
    else if.........
    ich kann nur nicht sagen was den kleineren Code erzeugt, aber switch case ist für mich übersichtlicher

  2. #72
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    63
    Beiträge
    534
    Code:
    typedef unsigned char byte;
    byte rx = 'a';
    switch(rx)
    {
       case '0' : tuewas(); break;
       case '5' : tuewasanderse(); break;
       case '6': // wie bei 'b' - absichtlichkein break;
       case 'b': nochwasanderes(); break;
       case 0x38: 
       {
          waslosbei8(); 
          mach();
          egal();
       }
       break;
       default: nixlos(); // <- da haste Dein "else" sprich 
       // wenn sonst nix gewählt wurde
    }
    switch/case ist mächtig aber geht nur für konstante Wertabfragen, if kann auch variablen vergleichen.
    Ich kann mir keine Signatur leisten - bin selbständig!

  3. #73
    Benutzer Stammmitglied
    Registriert seit
    11.10.2007
    Beiträge
    77
    Danke euch beiden!!!

    Habe mal folgendes geschrieben:

    Code:
    while(1){
    
    switch(rxwert){
     
    case 0x38 : 
         PORTD |= (1<<PD5);/* Setzt Pin PB3 auf High */
         break;  
    default:
         PORTD &= ~ (1<<PD5);/* Setzt Pin PB3 wieder auf low */
         break; 
        } 
    }
    return(0);
    }
    Jetzt bleibt die Led dauernt an, wenn ich Ziffer8 1-mal drücke.
    Will aber die Led nur solange an sein wie auch der Taster gedrückt wird!
    Wenn ich Ziffer8 gedrückt halte, geht die Led in intervall an uns aus.
    Dachte, das mit default würde auch gehen. Oder habe ich da einen Denkfehler?

  4. #74
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Da hast du einen Denkfehler. Wenn du am PC die 8 drückst, wird diese nur einmal übertragen. Bleibst du aber auf der Taste, dann wird die 8 im, auf dem PC eingestellten Rythmus wiederholt.
    Wenn du das so willst wie geschildert, dann brauchst du eine Zeitschleife die sagt, Taste gedrückt, gewisse Zeit warten, Taste wieder gedrückt, weiterwarten, Taste nicht mehr gedrückt, Zeit abgelaufen, rücksetzen.
    Das Steuern eines Bot über den PC ist für mich ohne entsprechenden PC-Programm nicht sehr sinnvoll. Speziell wenn man über das Hyper-Terminal steuern muss. Eine IR-Fernbedienung ist da sicher Sinnvoller, aber natürlich auch etwas aufwendiger.

  5. #75
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    63
    Beiträge
    534
    Wie sieht jetzt Deine USART-RX-funktion aus - wird da auch noch auf den Port zugegriffen?

    Ist Dir bewusst, daß die Datenübertragung zum uC langsamer als die Abarbeitungsgeschwindigkeit im uC ist?

    Ist Dir bewusst, daß wenn Du kein Zeichen sendet, auch kein Zeichen übertragen wird?

    Typischerweise, würde ich ein WindoofProgramm dann so schreiben, daß ein Steuerzeichen gesendet wenn "Taste gedrückt" und ein weiteres, wenn Taste wieder losgelassen wird.

    Sprich im uC den Port nicht im switch.default löschen, sondern eben durch einen anderen Steuercode.

    Je nachdem welche Daten Du noch übertrage willst, gehen Dir die Steuerzeichen irgendwann aus Also sollte aus den Steuerzeichen einen Befehlssequenz werden, typ. weise inkl. prüfsumme.

    Auf uC-Seite würde ich nicht das vorhandensein von Zeichen im Puffer via Timer prüfen. Sondern ein flag setzen, wenn die Empfangssequenz vollständig ist ....
    Ich kann mir keine Signatur leisten - bin selbständig!

  6. #76
    Benutzer Stammmitglied
    Registriert seit
    11.10.2007
    Beiträge
    77
    Hi,

    danke euch beiden für die Antwort!

    Also, mein bot soll alle input´s über den PC bekommen.
    Dachte da an einen Visualbasic Programm zu erstellen, wo ich dann Daten über den Hyperterminal zum µC sende. (Später wenn diese Funktion funktioniert, dann die Daten per Funk schicken)

    Wenn das so realisierbar ist mit VB und HT?
    Oder gibt es eine andere Methode, die einfacher wäre?

    Zu Hubert:
    …auf dem PC eingestellten Rhythmus wiederholt.
    - Was wäre, wenn man den Stoppit auf 0 setzten würde?

    …Zeitschleife…
    - meinst du die mit _delay_ms(10); ?

    …ohne entsprechenden PC-Programm nicht sehr sinnvoll.
    - Welches Programm meinst du?



    Zu vajk:

    …noch auf den Port zugegriffen?
    - Nein wird es nicht, meinst das hier oder?
    ISR(USART_RXC_vect){
    rxwert= UDR;
    }

    …Befehlssequenz werden, typ. weise inkl. prüfsumme.
    - Wie meinst du das?

  7. #77
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    63
    Beiträge
    534
    @SimLock

    > Wenn das so realisierbar ist mit VB und HT?

    entweder - oder ! Nur eines der Programm kann auf die serielle Schnittstelle zugreifen ...

    > …auf dem PC eingestellten Rhythmus wiederholt.
    hä?

    > - Was wäre, wenn man den Stoppit auf 0 setzten würde?
    nonsense

    > …Zeitschleife…
    > - meinst du die mit _delay_ms(10); ?

    ohhh neiiiinnnn ... ganz falscher Weg!

    >…ohne entsprechenden PC-Programm nicht sehr sinnvoll.
    > - Welches Programm meinst du?
    na das was Du in VB schreiben willst .. menno


    > …Befehlssequenz werden, typ. weise inkl. prüfsumme.
    > - Wie meinst du das?[/quote]
    aua²
    sorry.

    Also ... Du sprechen mit uns, nutzen nicht nur Buchstaben sondern Sätze und Wörter ...

    .. Du sprechen mit Robby, Du nutzen nicht nur Einzelzeichen sondern Steuerbefehle die aus mehr "Zeichen" bestehen .. = Befehlssequenzen

    ... und die eben - besonders, wenn Du das per Funk machen willst - muß auch geprüft werden .. typisch ist hier zumindest einen Prüfsumme / CRC über das was übertragen wird angehängt ...

    z.B. <34><234><fr434wdae>[crc] ...
    - die 34 ist zb. ein Ausführungsbefehl, auf den eine Antwort erwartet wird
    - die 234 der Befehl
    - fr.. die Daten, die zum Befehl gehören

    z.B: 234 = fahren, fr... = vorwärte 27 cm ....

    Besonders wenn Du per funk steuerst, solltest Du auch Rückmeldungen an den PC liefern können, ob ein Befehl auch ausgeführt wird oder wurde, oder auch Abfragen, wie die Motortemperatur ist die Betriebsspannung ...

    Dazu reichen nicht 0.255 Bit = 1 Byte !!!!

    Kapischi?
    Ich kann mir keine Signatur leisten - bin selbständig!

  8. #78
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    > …auf dem PC eingestellten Rhythmus wiederholt.
    hä?
    Damit meinte ich die Zeichenwiederholung wenn man auf der Taste bleibt.

    Aber auf den PC bin ich nicht so zuhause, da bin ich nur Anwender und werde mich daher aus der Diskussion ausklinken.

    Hubert

  9. #79
    Benutzer Stammmitglied
    Registriert seit
    11.10.2007
    Beiträge
    77
    Hi, danke euch beiden!!!

    Werde erstmal fleißig weiter lesen uns später zurück kommen mit gezielten fragen. Bring ja nichts, wenn ich dauernt frage

    Edit:

    Eine Frage hätte ich noch:
    ...eins verstehe ich nicht so ganz, wenn ich diesem Code benutzt und Daten zum PC schicke, funktioniert es, an PC wird ein W angezeigt + solange ich den Taster drücke leuchtet die Led. Warum kann man das nicht genau so einfach umgekehrt realisieren. Dann müsste es doch auch gehen, nur wenn ich statt Taster drücke, eine PC Taste drücke.



    Code:
        while (1) 
        {
    	
    	  if (!( PIND & (1<<PIND2)))  /* mache was wenn PinD2 low ist */ 
          {  
    	  PORTB |= (1<<PB1);  /* Led auf hig setzten */  
    	  x = 'W'; 
          UDR = x;
        _delay_ms(20); 
    	  PORTB &= ~ (1<<PB1);  /* Led auf low setzten */
    	}
    	}
    	return 0;
    	}
    Werde erstmal weiter lesen und in paar Tagen, wenn ich wieder Fragen habe, die Fragen aufteilen und in Forum neue Themen erstellen.

    Danke alle die mir bis jetzt geholfen haben!

  10. #80
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Die PC-Tastatur ist zu schreiben ausgelegt, jeder Tastendruck ein Zeichen. Wenn du das so willst wie du geschrieben hast, dann musst du dir ein PC-Programm schreiben das den Tastendruck in deinem Sinne auswertet. Du musst dem Kontroller mitteilen: jetzt Taste gedrückt, jetzt Taste nicht mehr gedrückt.
    In meinem Programm wird das "Taste nicht mehr gedrückt" durch das drücken der Taste 0 signalisiert.

Seite 8 von 9 ErsteErste ... 6789 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests