- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 24

Thema: Asuroprojekt mit Odometrie und LCD-Display

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2011
    Beiträge
    9
    hm ich glaube wir reden an einander vorbei
    in dem programm gebe ich ja die variable speed zur funktion start und dort kann ich das ja mithilfe der taster rauf oder runter setzen
    das problem ist lediglich das er den wert speed nicht wieder zur main gibt, sondern nur mit dem definierten wert 100 nimmt.
    im internet habe ich gelesen das (int &speed) helfen sollte funktioniert aber nicht.
    das ist garnicht das fertige programm doch das problem ist mir beim schreiben des programmes aufgefallen das das nich funktioniert.
    bei bedarf kann ich hier das fertige programm poste

    mfg
    Hermann

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Upps, du hast recht, wir reden aneinander vorbei. Versuche es mal so:

    void start()
    {
    ....

    start() sollte dann die Variable speed von main() übenehmen. Wenn's dann immer noch nicht funzt:

    //Hauptprogramm

    int speed = 100;

    int main(void)
    {
    Init();
    ...

    So ist speed auf jeden Fall global

    Oder start() als Funktion mit Rückgabewert:

    int start(int speed)
    {
    ...
    }
    o--;
    return(speed);
    }

    und Aufruf mit Zuweisung:

    ...
    PrintIntLCD(speed);
    speed = start(speed);
    }
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2011
    Beiträge
    9
    hmm hab alles ausprobiert.. der arbeitet aber trotzdem mit 100

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Sind deine änderungen in das .c datei gespeichert und dannach neu ubersetzt? Das speichern wird oft vergessen.

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Oje, langsam wird's zäh. Versuche mal das:
    PHP-Code:
    #include "stdlib.h"
    #include "asuro.h"
    #include "lcd.h"
    #include "i2c.h"

    int o 1;

    //Geschwindigkeit
    int speed 100;

    void start(void)
    {
        
    int keys;
        
    int i 1;

        while(
    i)
        {
            
    keys PollSwitchLCD();
            if(!
    keys)
            {
                
    Msleep(100);
            }
            else
            {
                switch(
    keys)
                {
                   case 
    LCD_KEY_YELLOW:
                      if(
    speed 246speed speed +10;
                      break;
                   case 
    LCD_KEY_BLUE:
                       if(
    speed 9speed speed -10;
                       break;
                   case 
    LCD_KEY_RED:
                      
    0;
                      break;
                }
                
    ClearLCD();
                
    PrintSetLCD(0,0,"Geschwindigkeit");
                
    SetCursorLCD(01);
                
    PrintIntLCD(speed);
            }
        }
        
    o--;
    }

    //Hauptprogramm

    int main(void)
    {

        
    Init();
        
    InitI2C();
        
    InitLCD();
        
    GREEN_LED_ON;

        while(
    0)
        {
            
    PrintSetLCD(0,0,"Geschwindigkeit");
            
    SetCursorLCD(01);
            
    PrintIntLCD(speed);
            
    start();
        }
        
    MotorDir(FWD,FWD);
        
    MotorSpeed(speed,speed);

        while(
    1); // Das Programm darf nie beendet werden!
        
    return 0;

    Nicht getestet, aber mit diesen Dummy-Files fehlerfrei übersetzt:

    lcd.h:
    PHP-Code:
    #define LCD_KEY_YELLOW 1
    #define LCD_KEY_BLUE 2
    #define LCD_KEY_RED 4

    void InitLCD(void);
    int PollSwitchLCD(void);
    void ClearLCD(void);
    void SetCursorLCD(unsigned char columunsigned char line);
    void PrintIntLCD(int i);
    void PrintSetLCD(unsigned char columunsigned char linechar *data);

    void InitI2C(void); 
    lcd.c
    PHP-Code:
    #define LCD_KEY_YELLOW 1
    #define LCD_KEY_BLUE 2
    #define LCD_KEY_RED 4

    void InitLCD(void){}
    int PollSwitchLCD(void){return(0);}
    void ClearLCD(void){}
    void SetCursorLCD(unsigned char columunsigned char line){}
    void PrintIntLCD(int i){}
    void PrintSetLCD(unsigned char columunsigned char linechar *data){}

    void InitI2C(void){} 
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Aber dan wird es immer noch das selbe Zeichen auf dem LCD. (Geschwindigkeit 100) Weil am ende der erste Durchlauf von start wird die globale Variable o auf 0 gesetzt. (ist am Anfang 1) Das verhindert den zweite Durchlauf von den while-schleife in das main Programm. Und geht dann (nach der Motor Kommandos) in dem Endlos--schleife von Radbruch. Was genau bedeutet diese Variable "o". Was ist ihre Funktion in dein (Hermann Wessel) Logik? Wieso wird sie am ende von den start Funktion decrementiert?
    Geändert von Valen (01.04.2011 um 14:58 Uhr)

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Das Display wird auch in start() nach jedem Tastendruck aktualisiert. Sein Programm ist wohl ein Ausschnitt eines größeren Programms, vielleicht dient o dort zur Steuerung des Ablaufs? In meiner Version wird speed einmalig editiert und dann schwirrt der asuro davon ;)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Radbruch stimmt. Ohne Roten Taster wird es in dem Funktion start stecken bleiben und dem LCD aktualisieren.

    (Notiz an selb: NICHT 2 Quellcodes durcheinander liesen!!!!!!)

Ähnliche Themen

  1. Odometrie
    Von HAWK-Matze im Forum Asuro
    Antworten: 33
    Letzter Beitrag: 05.03.2008, 09:40
  2. Odometrie die 10.000
    Von NebuK im Forum Asuro
    Antworten: 5
    Letzter Beitrag: 10.11.2006, 13:02
  3. odometrie
    Von Toschtosch im Forum Asuro
    Antworten: 9
    Letzter Beitrag: 03.11.2006, 19:52
  4. Navigation mit Odometrie
    Von Rosowitsch im Forum Asuro
    Antworten: 1
    Letzter Beitrag: 07.06.2006, 16:36
  5. Odometrie LED
    Von Rosowitsch im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 30.05.2006, 20:29

Stichworte

Berechtigungen

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

Labornetzteil AliExpress