- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 40 von 40

Thema: einfache tests mit der lib 2.7

  1. #31
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Anzeige

    Powerstation Test
    Aus Kompatibilitätsgründen sollte man Funktionen belassen, wie sie sind, sonst wird man einsam.
    ich bin schon sehr froh hier die comunity gefunden zu haben und aus kompatibilitätsgründen habe ich ja die extrafunktionen, wie die für die US-erseiterung schon in der inka.h untergebracht...
    Aber zurück zum PrintInt / SerPrint bzw. Serwrite. Vielleicht/sehr wahrscheinlich sogar rühren meine probleme damit daher, dass ich die funktion nicht genau kenne:
    SerWrite("\r\n distanz in cm ",16);
    PrintInt(abstand);
    hier werden ja die 16 zeichen gedruckt/ausgegeben. Von wo fange ich an zu zählen? Was genau bedeutet diese \r\n? Wo genau beginnt bei der obigen konstaltion der PrintInt mit der ausgabe?

    vielleicht könnte ich das auch irgendwo nachlesen, hier direkt zu fragen zu dürfen und eine - für einen anfänger verständliche - antwort fände ich vieel besser...
    thx...
    gruß inka

  2. #32
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    69
    Beiträge
    699
    ... hier werden ja die 16 zeichen gedruckt/ausgegeben. Von wo fange ich an zu zählen? Was genau bedeutet diese \r\n?
    Dein Problem sind ernsthafte Defizite in der Programmiersprache C.
    Du sendest mit SerWrite(...) einen sogenannten String, das ist eine Folge von char, die in einem Array angeordnet sind. Details siehe: http://www.henkessoft.de/C++/C/arrays_pointer.htm
    Schaue Dir den ASCII-Zeichencode an: http://de.wikipedia.org/wiki/ASCII
    ... und die Steuerzeichen: http://de.wikipedia.org/wiki/Steuerzeichen

    Die Steuerzeichen sind genau ein Zeichen:
    \r 13 0x0D ^M \r CR Carriage Return Wagenrücklauf/Druckkopfrücklauf
    \n 10 0x0A ^J \n LF Line Feed Zeilenvorschub

    Das r kommt von return und das n von newline.

    d.h. diese Steuerzeichen werden als jeweils ein Zeichen mitgezählt.

    Wenn ich das oben richtig zähle, sind das 17 Zeichen. PrintInt(...) fängt direkt dahinter an. Willst Du eine Zeile tiefer beginnen, sendest Du vorher ein \r\n, manchmal reicht auch schon ein \n (MS Windows) alleine.

  3. #33
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    danke ehenkes,
    die ensthaften defizite in c sind mir durchaus bewusst. Ich habe schon vieles in meinem leben gemacht, bin von hause aus feinwerktechnik-ing, habe aber auch schon 1981 basic mit dem ZX81 programmiert, php-webseiten erstellt (zumindest die eigene), mit c beschäftige ich mich erst seit januar 2007, von dem zeitpunkt an, wo ich meine an alzheimer erkrankte ehefrau nach 8 jahren pflege in einem pflegeheim unterbringen musste, aber auch wollte...
    werde also noch öfters noch dumme frage stellen - und auf hilfreiche antworten hoffen...
    gruß inka

  4. #34
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    69
    Beiträge
    699
    werde also noch öfters noch dumme frage stellen - und auf hilfreiche antworten hoffen...
    Kein Problem. Hier findest Du ein wirklich gutes C-Tutorial: http://www.pronix.de/pronix-652.html

  5. #35
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    man kann doch alles in strings umwandeln (itoa(zahl,string,zahlensystem) und dann alle strings verketten und im stück senden, oder?
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  6. #36

  7. #37
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    hi allerseits,

    habe wieder ein paar fragen...
    das programm aus dem band 2 lässt sich fehlerfrei kompilieren, der asuro fährt auch schön geradeaus:
    Code:
    /* Geradeausfahren mit Initialisierung "geradeausplus.c"*/
    #include "asuro.h"
    #include "eeprom.h"
    #include "inka.h"
    
    // Schwellwert für die Hell/Dunkel-Unterscheidung
    // Eventuell muss damit etwas variiert werden
    #define TRIGGERLEVEL 600
    #define HYSTERESIS 10
    #define LOW 0
    #define HIGH 1
    
    int main(void) {
    unsigned int data[2];
    signed int status[2]={0,0};
    signed int difference=0;
    unsigned int distance=0;
    unsigned int eeread,eewrite;
    char eewriteflag=0;
    
    Init();
    WaitforStart();
    
    // liest ein wort aus EEPROM
    eeread=eeprom_read_word ((uint16_t*)0);
    
    // Wert auf Plausibilität prüfen
    if (eeread<512) {difference=(signed)eeread-256;}
    MotorDir(FWD, FWD);
    while(1)
    {
    // Helligkeitswerte der Lichtschranken auslesen
    OdometrieData(data);
    
    // Wechsel linker Sensor von niedrig auf hoch?
    if ((status[0]==LOW) && (data[0]>TRIGGERLEVEL+HYSTERESIS)) {
    status [0] = HIGH;
    difference++;
    distance++;
    eewriteflag=1;
    }
    
    // Wechsel linker Sensor von hoch auf niedrig?
    if ((status[0]==HIGH) && (data[0]<TRIGGERLEVEL-HYSTERESIS)) {
    status [0] = LOW;
    difference++;
    distance++;
    eewriteflag=1;
    }
    
    // Wechsel rechter Sensor von niedrig auf hoch?
    if ((status[1]==LOW) && (data[1]>TRIGGERLEVEL+HYSTERESIS)) {
    status[1]=HIGH;
    difference-- ;
    }
    
    // Wechsel rechter Sensor von hoch auf niedrig?
    if ((status[1]==HIGH) && (data[1]<TRIGGERLEVEL-HYSTERESIS)) {
    status[1]=LOW;
    difference-- ;
    }
    
    // zur Sicherheit: verhindern, dass der Differenzzähler
    // den erlaubten Wertebereich veriässt
    if (difference<-255 ) difference=-255;
    if (difference>255) difference=255;
    
    // status-LED noch entsprechend der erkannten Segmente
    // aufleuchten lassen, grün für links, rot für rechts
    StatusLED(status[0]+status[1]*2);
    
    // Zähldifferenz passend, auf die Motoren verteilen
    if (difference>0) MotorSpeed(255-difference,255);
    else MotorSpeed(255, 255+difference);
    
    // Alle 128 Odo-Ticks den Wert ins EEPROM schreiben
    if ((distance%128==0) && (eewriteflag==1)) {
    eewrite=(unsigned) (difference+256);
    eeprom_write_byte ((uint8_t * )0,eewrite&0xFF);
    eeprom_write_byte ((uint8_t * )1,eewrite>>8);
    eewriteflag=0;
    }
    return 0;
    }
    }
    auf veränderungen bei TRIGGERLEVEL, auch ins extreme (2000 bzw. 200) reagiert er nicht und fährt weiter geradeaus. Ist das ok? Wozu dann diese variable überhaupt?

    zweite frage: kann ich irgendwie überprüfen was da ins EEPROM geschrieben wird, und ob überhaupt???

    danke euch
    gruß inka

  8. #38
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    trigge bezeichnet einen schwellwert, beidem eine aktion ausgeführ wird. it dieser zu hoch/iedrig,kommen fehler da die aktion zu of bzw. selten ausgeführt wird.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  9. #39
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    hi damaltor,
    danke für die antwort, würde also bei diesem code
    ----------------------
    // Schwellwert für die Hell/Dunkel-Unterscheidung
    // Eventuell muss damit etwas variiert werden
    #define TRIGGERLEVEL 600
    #define HYSTERESIS 10
    ----------------------

    bedeuten, dass die variierung in welchem bereich stattfinden sollte? 1er? 10er?
    gruß inka

  10. #40
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    die werte gehen von 0 bis 1023. wie weit du gehen musst, wirst du selbst rausfinden müssen, versuche es mit änderungen um 10-20.

    die hysterese beschreibt den "variablen bereich". es geht also in deinem beispiel um den wert "600 +- 10".
    Read... or die.
    ff.mud.de:7600
    Bild hier  

Seite 4 von 4 ErsteErste ... 234

Berechtigungen

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

Labornetzteil AliExpress