-         

Ergebnis 1 bis 4 von 4

Thema: Warum funktioniert dieser einfache Syntax nicht??

  1. #1

    Warum funktioniert dieser einfache Syntax nicht??

    Anzeige

    Hallo!
    Verwende ein C-Control Pro 32Board!
    Versuche schon seit über einer Stunde! ein einfaches Programm zu schreiben,
    es geht mir vorerst nur darum das ich mit einem Taster (1mal drücken) LED an und ein weiterer Tastendruck die LED wieder ausschaltet.
    Das Einschalten funktioniert ja auch aber das Auschalten nicht!
    Taster habe ich durchgemessen, unbetätigt habe ich 5V auf dem Eingangsport, betätigt 0V.

    Hier das Programm
    Code:
    void main(void)
    {
        Port_DataDirBit(PORT_SW1,PORT_IN);
        Port_DataDirBit(PORT_LED1,PORT_OUT);
        Port_WriteBit(PORT_LED1,PORT_OFF);
    
        while (1)
        {
    
                while (Port_ReadBit(PORT_SW1));{
                Port_WriteBit(PORT_LED1,PORT_ON);}
                AbsDelay(500);
                while(Port_ReadBit(PORT_SW1));{
                Port_WriteBit(PORT_LED1,PORT_OFF);}
    
    
    }
    }
    Code Tags eingefügt. Sieht hübscher aus (PicNick)

    Währe über Hilfe sehr dankbar.
    MFG
    Markus Wimmer

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    26.09.2008
    Ort
    Wien
    Alter
    31
    Beiträge
    94
    Hallo,

    obwohl ich absolut keine Ahnung von einem C-Control Board habe (kenne also die Befehle nicht) fällt mir eines bei deinem Code auf:

    Hinter deinen beiden "while" Schleifen innerhalb der while(1) sind Semikolons, die da nicht hingehören.
    Sprich:
    while(Port_ReadBit(PORT_SW1))
    {
    Also ohne das ;
    Das ganze auch beim Zweiten.

    Probier es einfach mal...
    Im Übrigen wäre es schöner Codes in den Code-Tag zu schreiben.
    Und main sollte immer einen Wert zurück liefern, sprich int main(void) und am Ende return 0;

    PS: Ich werde aus dem Code zwar überhaupt nicht schlau, aber sollten Tastendrücke nicht normalerweise mit "if" abgefragt werden?
    while (!asleep()) sheep++;
    RP6 und Asuro Befehlsübersicht

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.07.2008
    Ort
    NRW
    Alter
    45
    Beiträge
    169
    Ich hab gar keine Ahnung von C, aber trotzdem ne idee:

    Du fragst zweimal DIREKT hintereinander den Taster ab, mit einer Verzögerung von stolten 0,5 s
    Das einfachste wäre z.B. beim Einschalten der variable A (z.B.) den Wert 1 zu geben.

    So, jetzt drückst Du den Taster, ist A=1 UND der Taster gedrückt dann die LED ausschalten und A wieder auf 0 setzen.

    So würd ich es machen (als Basom Nutzer )

    Gruß
    Jens

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Wie Nil.at schon sagte:
    Code:
                while (Port_ReadBit(PORT_SW1))       // ;
                {
                     Port_WriteBit(PORT_LED1,PORT_ON);
                }
                AbsDelay(500);
                while(Port_ReadBit(PORT_SW1))         // ;
                {
                        Port_WriteBit(PORT_LED1,PORT_OFF);
                }
    (Rein sytaktisch, ohne über sinn und unsinn nachzudenken)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

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