- SF800 Solar Speicher Tutorial         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 43

Thema: strukturen, ein- und ausstieg

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    Hi,
    @fabqu
    also an der miesen Lösung mit den Tastern haben wir ja auch ein Anteil, die Platine und ihre Möglichkeiten haben wir den ja hier besprochen. Keiner hat eine bessere Lösung gedacht.
    Der Hinweis mit dem vorbereiteten Stecker bringt ja nichts, denn auch hier ist ja nur eine Abfrage wie mit den 4 Tastern der MIO oder der 5 Taster der M32 möglich. Ich habe da manchmal eine 4x4 Matrix Tastatur dran, aber der ständige Wechsel der Lib nervt dann.
    Wenn dann eine Matrix wie beim Asuro, aber da braucht man dann freie 2 Ports. Ich glaube Mic wollte da mal was machen.

    @inka
    Ja Danke für die Genesungs Wünsche, irgendwann habe ich die Scheiss Dinger besiegt.
    Ich muss mich gleich mal endschuldigen, ich komme hier mit dem Touchpad nicht klar und habe auch nur eine Hand wirklich frei, Antworte also mal ohne zu zitieren.
    Ja ich kann mich erinnern Du hast Deine Platinen gegenüber, schon klar dann kommst du nicht an die Taster der M32.
    Die Änderung der Taster Abfrage musst Du alleine machen, es wär ja möglich dass Du andere Werte hast. Messe einfach mal am ADC Port nach und passe die Werte an.
    Abgefragt wird ja in etwa so: if(keys <100)
    return 1;
    if(keys < 700)
    return 2; u.s.w
    ich bilde mir ein besseres Ergebnis gehabt zu habe wenn ich das Eingrenze. Also >90 und < wie 105 zum Beispiel. Aber bin mir nicht wirklich sicher.
    Ich verstehe nicht warum Du da ein Stop in Deinem Programm brauchst.
    Ein Programm läuft doch ständig durch. Das Programm startet und "guckt" ob Du eine Taste gedrückt hast. Ja Du hast Button 1 gedrückt. Der Servo fährt also in der genannten Position. Fertig und schon ist das Programm wieder an der Tastaturabfrage und Du hast Button 2 gedrückt der Servo fährt zurück oder eine LED geht an oder was weiss ich und Du weisst was jetzt kommt, Dein Programm steht wieder an der Tastaturabfrage........
    Ich versteh nicht wirklich Dein Problem, aber ich bin selber noch Azubi in diesen Dingen. Vielleicht kann dir unser Guru - Hallo Dirk - das besser erklären.
    So jetzt gibts Abendbrot, haha ans Bett gebracht, schönen Abend noch.
    Gruß TrainMen

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @TrainMen:
    Vielleicht kann dir unser Guru - Hallo Dirk Bild hier   - das besser erklären.
    Guru??? GURU???
    Sei froh, dass du krank bist,- sonst würde ich ...

    Nein, besser hätte ich das auch nicht erklären können.

    Gute Besserung!
    Gruß
    Dirk

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    Hi inka,
    wie versprochen hier das Programm zur Tasterabfrage der M32.
    Du musst das natürlich anpassen, ich habe es nur schnell überflogen und überflüssiges gelöscht. So das es deutlich wird was ich in meinte.
    Angehängte Dateien Angehängte Dateien
    Gruß TrainMen

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    danke TrainMen,

    die nächste frage:

    die abfrage taucht mehrmals in meinem programm auf, kann ich diese abfrage zu einer funktion "void abbruch (void)" machen, oder wird es wegen der schleife und der if abfrage nicht funktionieren?

    Code:
    do
    {
      pressedMultiIOButtonNumber = checkMultiIOPressedButtonEvent();
      task_I2CTWI();
      if (pressedMultiIOButtonNumber == 4)
      main();
     }
    while (pressedMultiIOButtonNumbe
    gruß inka

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @inka:
    Der Aufruf der main() und auch noch ohne Abbruch der do-while Struktur ist keine gute Idee!
    Das dürfte irgendwann zu einem Stacküberlauf und zum Programmende führen.
    Das sind dann schwer zu findende Fehler!

    Was du ja wohl machen willst ist eine Art "Menüstruktur". Du drückst eine Taste und ein Programmteil startet. Dann beendet man das wieder durch einen Tastendruck und kommt zurück ins Auswahlmenü.
    Das braucht etwas mehr Aufwand, als per brute-force in die main zurückzuspringen.
    Du kannst aber z.B. im RP6Base_SELFTEST.c sehen, wie man ein solches Menü bauen kann.
    Gruß
    Dirk

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von Dirk Beitrag anzeigen
    Was du ja wohl machen willst ist eine Art "Menüstruktur". Du drückst eine Taste und ein Programmteil startet. Dann beendet man das wieder durch einen Tastendruck und kommt zurück ins Auswahlmenü.
    Der Aufruf der main() und auch noch ohne Abbruch der do-while Struktur ist keine gute Idee!
    genau. und wenn es mit "brutaler kraft" sein muss - ich hatte keine idee und dachte eher an das gute alte "goto" aus basic-zeiten. Würde das ein eingesetztes break abmildern, oder ist die ganze idee für die katz?


    Zitat Zitat von Dirk Beitrag anzeigen
    Das braucht etwas mehr Aufwand, als per brute-force in die main zurückzuspringen.
    Du kannst aber z.B. im RP6Base_SELFTEST.c sehen, wie man ein solches Menü bauen kann.
    meinst Du das hier?
    Code:
    test = receiveBuffer[0] - 48; 
             
            if(receiveBuffer[0] == 's') 
            { 
                speed_control(); 
            } 
            else if(receiveBuffer[0] == 'd') 
            { 
                testMoveDistance(); 
            } 
            else if(receiveBuffer[0] == 'c') 
            { 
                testEncoderDutyCycle(); 
            } 
            else if(test > 8) 
            { 
                writeString_P("You need to enter a single number from 0 to 8, s, d or c!"); 
                continue; 
            } 
            else 
            {
    
    switch(test) 
                { 
                    case 0:  
                        testPowerOn(); 
                        testLEDs(); 
                        testVoltageSensor();  
                        testBumpers();  
                        testLightSensors();  
                        testACS();  
                        testRC5();  
                        testMotorsAndEncoders(); 
                    break;      
                    case 1: testPowerOn();                 break;  
                    case 2: testLEDs();                 break;  
                    case 3: testVoltageSensor();        break;          
                    case 4: testBumpers();                 break;     
                    case 5: testLightSensors();         break; 
                    case 6: testACS();                      break; 
                    case 7: testRC5();                       break; 
                    case 8: testMotorsAndEncoders();     break;     
                }
    }
    ich erkenne hier eher eine einstufige abfragesituation und innerhalb der einzelnen cases oder if-abfragen läuft hier keine while-schleife...
    gruß inka

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @inka:
    ...und dachte eher an das gute alte "goto" aus basic-zeiten. Würde das ein eingesetztes break abmildern, oder ist die ganze idee für die katz?
    Goto gibt's immer noch,- ist aber ziemlich verpönt. Es läßt sich auch sehr gut umgehen ...
    ...ich erkenne hier eher eine einstufige abfragesituation und innerhalb der einzelnen cases oder if-abfragen läuft hier keine while-schleife...
    Das sieht nur so aus. In den einzelnen Funktionen des Testprogramms wird teilweise auch eine Abbruchbedingung abgefragt.
    D.h.: Die Einzelfunktionen bestimmen selbst, ob sie einmalig durchlaufen oder dauerhaft bis zu einer Abbruchbedingung. Daher braucht es in der case Struktur keine do-while Schleife.
    Gruß
    Dirk

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    danke erstmal für die antworten...

    hier mein problem noch einmal (etwas detailierter):

    RP6Control_08_I2CMaster.c , auskommentierter bereich:
    /** * This is a new Event Handler and it gets called when the Battery Voltage
    * is getting low! The Parameter isVoltageLow is true, when the voltage
    * is low and false, when the voltage is OK.
    */
    /*
    void batteryVoltageLow(uint8_t isVoltageLow)
    {
    if(isVoltageLow)
    {
    writeString_P("\nBattery Voltage low: ");
    // Send Battery voltage to UART:
    writeIntegerLength((((adcBat/102.4f)+0.1f)), DEC, 2);
    writeChar('.');
    writeIntegerLength((((adcBat/1.024f)+10)), DEC, 2);
    writeString_P("V\n");
    }
    else
    {
    writeString_P("\nBattery Voltage is OK!\n");
    }
    }
    */

    standard.c, funktion hinzugefügt:


    /************battery_voltage_low******************* ******/



    void batteryVoltageLow(uint8_t isVoltageLow)
    {
    if(isVoltageLow)
    {

    writeString_P("\nBattery Voltage low: ");
    // Send Battery voltage to UART:
    writeIntegerLength((((adcBat/102.4f)+0.1f)), DEC, 2);
    writeChar('.');
    writeIntegerLength((((adcBat/1.024f)+10)), DEC, 2);
    writeString_P("V\n");
    }
    else
    {
    writeString_P("\nBattery Voltage is OK!\n");
    }
    }


    standard.h, deklaration (die zeile, die moniert wird hervorgehoben):


    //void receiveRC5Data(void (RC5data_t) (rc5data));

    //void batteryVoltageLow(void);
    void batteryVoltageLow (uint8_t isVoltageLow);
    //void printAllSensorValues(void);
    //void task_LCDHeartbeat(void);
    //void watchDogRequest(void);


    erstellungsprotokoll beim kompilieren:


    -------------- Erstellen: RP6Control_08_I2CMaster in m32_samples ---------------


    Compiliere: ../../RP6Lib/RP6common/RP6I2CmasterTWI.c
    ../../RP6Lib/RP6common/RP6I2CmasterTWI.c: In function ‘I2CTWI_requestedDataReady_DUMMY’:
    ../../RP6Lib/RP6common/RP6I2CmasterTWI.c:55:46: warning: unused parameter ‘requestID’
    ../../RP6Lib/RP6common/RP6I2CmasterTWI.c: In function ‘I2CTWI_transmissionError_DUMMY’:
    ../../RP6Lib/RP6common/RP6I2CmasterTWI.c:62:45: warning: unused parameter ‘requestID’
    Compiliere: ../../RP6Lib/RP6common/RP6uart.c
    Compiliere: ../../RP6Lib/RP6control/RP6ControlLib.c
    Compiliere: ../../RP6Lib/RP6control/RP6Control_I2CMasterLib.c
    ../../RP6Lib/RP6control/RP6Control_I2CMasterLib.c: In function ‘IRCOMM_RC5dataReady_DUMMY’:
    ../../RP6Lib/RP6control/RP6Control_I2CMasterLib.c:62:42: warning: unused parameter ‘rc5data’
    ../../RP6Lib/RP6control/RP6Control_I2CMasterLib.c: In function ‘BATTERY_lowVoltage_DUMMY’:
    ../../RP6Lib/RP6control/RP6Control_I2CMasterLib.c:93:39: warning: unused parameter ‘isVoltageLow’
    Compiliere: ../../RP6Lib/RP6mio/RP6Control_MultiIOLib.c
    Compiliere: ../../RP6Lib/standard/standard.c
    In file included from ../../RP6Lib/standard/standard.c:1:0:
    ../../RP6Lib/standard/standard.h:38:33: error: expected ‘)’ before ‘isVoltageLow’

    Prozess wurde mit Status 1 beendet. (0 Minuten, 0 Sekunden)
    1 Fehler, 4 Warnungen
    ich kann keinen fehler erkennen, wüsste ich auch nicht wo ich dort die ")" hinzufügen soll?
    gruß inka

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo inka,

    Das ist eine schwäche von C.
    Der Fehler ist immer zwischen dem Anfang der Datei und der Stelle welche der Compiler angibt!

    BTW: woher kennt der Compiler uint8_t ??
    Da müsste irgendwo eine Definition davon ein, vielleicht in einer Headerdatei, welche vergessen wurde?

    MfG Peter(TOO)

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    uint8_t kennt der Compiler in diesem Fall.
    Der Fehler liegt VOR dieser Fehlerzeile.
    Such mal die ganze Header-Datei ab oder poste sie hier (keine Ausschnitte, sondern den kompletten Header, so wie er kompiliert wurde).
    Gruß
    Dirk

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 23.03.2012, 22:36
  2. Probleme feine Strukturen zu drucken für Platine
    Von Hellmut im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 12
    Letzter Beitrag: 20.12.2010, 13:35
  3. Antworten: 11
    Letzter Beitrag: 07.09.2008, 16:56
  4. Probleme bei Strukturen (Projekt Funkuhr)
    Von Wasserkäfer im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 19.07.2008, 15:10
  5. Ein Quarz für ein ATMEGA8 und ein ATMEGA16
    Von boeseTURBO-CT im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 14.06.2004, 16:07

Berechtigungen

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

Labornetzteil AliExpress