- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 44

Thema: RP6_M32 - M32 soll das was per uart geschick wird im Display ausgeben !?!

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    > wenn ich 12 schreibe, steht im LCD auch 12,

    Klar, Das LCD versteht ja auch ASCII Codes also muss da nix umgewandelt werden


    s. z.B. RP6Base_Selftest.c ab Zeile 1265

    Code:
            if(getInputLine()) 
            {
    ...
    ...
                { 
                    pwm_tmp = atoi(receiveBuffer); 
                   
    ... fehlercheck ... 
    
                    if(pwm_tmp > 120){pwm_tmp = 120; writeString_P("\n--> Power limited to 120!");} 
                    else if(pwm_tmp < 0) {pwm_tmp = 0;} 
                    pwm = pwm_tmp; 
                     
                    writeString_P("\n--> Change speed to:"); 
                    writeInteger(pwm_tmp,DEC); 
                    writeChar('\n'); 
                                 
                    setMotorPower(pwm,pwm); 
                }


    MfG,
    SlyD

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    Danke, hat geklappt ;->

    Kann ich auch mehrere Servos so steuern?

    Also wenn ich sende "1:100" soll der erste Servo auf 100 und wenn ich "2:50" sende der 2. auf 50, oder geht das nicht, bzw. anders?

    mfG
    Philip

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    Zitat Zitat von AsuroPhilip Beitrag anzeigen

    Also wenn ich sende "1:100" soll der erste Servo auf 100 und wenn ich "2:50" sende der 2. auf 50, oder geht das nicht, bzw. anders?
    Keiner ne Idee?

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Zitat Zitat von AsuroPhilip Beitrag anzeigen
    Keiner ne Idee?
    Der Thread heist "RP6_M32 - M32 soll das was per UART geschick wird im Display ausgeben !?!"
    und nicht "Also wenn ich sende "1:100" soll der erste Servo auf 100 und wenn ich "2:50" sende der 2. auf 50,"

    Meine Idee wäre.. du versuchst es mal selbst mit nachdenken...

    Und nein ich bin nicht unfreundlich - aber das Du nach nicht mal 24 h schon off topic und ungeduldig nachstocherst ... ist unfein - und mit Verlaub - macht mich stinke stock sauer.
    Sind Sie auch ambivalent?

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    Zitat Zitat von RolfD Beitrag anzeigen
    Der Thread heist "RP6_M32 - M32 soll das was per UART geschick wird im Display ausgeben !?!"
    und nicht "Also wenn ich sende "1:100" soll der erste Servo auf 100 und wenn ich "2:50" sende der 2. auf 50,"
    Soll ich den für eine frage nen neuen Thread aufmachen?

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Les mal noch nen kleines Stück weiter.. da steht meine Empfehlung...
    Sind Sie auch ambivalent?

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    Okay habe das so erstmal geschaft, aber es gibt schon wieder ein neues problem.
    Wenn ich es so mache:

    Code:
    void task_befehle(void)
        {
            Eingabe();
            
            long pos = atoi(Buffer);
    
        
                    if(pos < 180 && pos > 0)
                    {
                        servo1_position =  pos;
                    }
                    else
                        if(pos < 360 && pos > 180)
                    {
                        servo2_position =  pos - 180;
                    }
                        else
                            if(pos < 540 && pos > 360)
                        {
                            servo3_position =  pos - 360;
                        }
                            else
                                if(pos == -1)
                                {
                                    I2CTWI_transmitByte(PCF, 0);
                                }
                                else
                                    if(pos == -2)
                                    {
                                        I2CTWI_transmitByte(PCF, 3);
                                    }
            
        }
    
    void task_sensoren(void)
        {
            getAllSensors();
            writeIntegerLength((((adcBat/102.4f)+0.1f)), DEC, 2);
            writeString_P(".\n");
            writeIntegerLength((((adcBat/1.024f)+10)), DEC, 2);
            writeString_P("V\n");
            writeIntegerLength(adcLSL,DEC,4);
            writeString_P("L\n");
            writeIntegerLength(adcLSR,DEC,4);
            writeString_P("R\n");
        }
    
    uint32_t Eingabe(void){
    
                static buffer_pos = 0;
                
                if(getBufferLength())
                {
                    Buffer[buffer_pos]=readChar();
    
                if(Buffer[buffer_pos]=='\n')
                {
                    Buffer[buffer_pos] = '\0';
                    buffer_pos = 0;
    
                return 1;
                }
            
                else if(buffer_pos >= UART_RECEIVE_BUFFER_SIZE) 
                {
                    Buffer[UART_RECEIVE_BUFFER_SIZE] = '\0'; 
                    buffer_pos = 0;
    
                return 2;
                }
                
                buffer_pos++;
            }        
        return 0;
    }
    
    int main(void)
    {  
    
        initRP6Control();
        initLCD();
        initSERVO(SERVO1  |  SERVO2   |   SERVO3);
    
        WDT_setRequestHandler(watchDogRequest); 
    
        I2CTWI_initMaster(100);
        I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady);
        I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
        
        
        setLEDs(0b111111);
        mSleep(500);
        setLEDs(0b000000);
        
        I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT, true);
        I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT_RQ, true);
        I2CTWI_transmitByte(PCF, 0);
    
    
        
        while(true)  
        {
            task_I2CTWI();
            task_befehle();
            task_sensoren();
            task_SERVO();
         }
        return 0;
    }
    Zappeln die Servos nur rum und die Sensordaten ändern sich nicht.

    Empfangen mache ich in Visual C# so :

    Code:
            public void Daten_Empfangen()
            {
                string[] Volt = serialPort1.ReadLine().Split('.');
                string[] LVolt = serialPort1.ReadLine().Split('V');
                string[] Licht = serialPort1.ReadLine().Split('L');
                string[] LLicht = serialPort1.ReadLine().Split('R');
                string Akku = Volt[0] + LVolt[0];
                string Licht_L = Licht[0];
                string Licht_R = LLicht[0];
    
                label9.Text = Volt[0].Replace("0", "") + "." + LVolt[0] + " Volt";
    
                if (Convert.ToInt32(Akku) > progressBar1.Maximum)
                {
                    progressBar1.Maximum = Convert.ToInt32(Akku);
                }
                else
                    progressBar1.Value = Convert.ToInt32(Akku);
    
                if (Convert.ToInt32(Licht_R) > progressBar2.Maximum)
                {
                    progressBar2.Maximum = Convert.ToInt32(Licht_R);
                }
                else
                    progressBar2.Value = Convert.ToInt32(Licht_R);
    
    
                if (Convert.ToInt32(Licht_L) > progressBar3.Maximum)
                {
                    progressBar3.Maximum = Convert.ToInt32(Licht_L);
                }
                else
                    progressBar3.Value = Convert.ToInt32(Licht_L);
    
            }
    
     private void timer2_Tick(object sender, EventArgs e)
            {
                if (checkBox1.Checked)
                {
                    Daten_Empfangen();
                }
            }
    Hoffe ihr könnt mir nochmal helfen.

    mfG
    Philip
    Geändert von AsuroPhilip (29.05.2011 um 16:40 Uhr)

Ähnliche Themen

  1. Asuro soll an Matlab ausgeben
    Von blueyo im Forum Asuro
    Antworten: 1
    Letzter Beitrag: 05.03.2011, 19:14
  2. Antworten: 75
    Letzter Beitrag: 12.12.2010, 21:34
  3. Antworten: 13
    Letzter Beitrag: 21.11.2010, 18:41
  4. Crash Bobby soll Text auf Monitor ausgeben
    Von palermo im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 7
    Letzter Beitrag: 11.12.2006, 14:09
  5. Asuro soll Text ausgeben :D
    Von R3ð_BuLL© im Forum Asuro
    Antworten: 4
    Letzter Beitrag: 09.11.2006, 10:26

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress