- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 9 von 9

Thema: frage zu programm

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    36
    Beiträge
    220

    frage zu programm

    Anzeige

    LiFePo4 Akku selber bauen - Video
    hallo, hab grad nach einiger zeit mal wieder meinen rp6 ausgepackt und wieder angefangen zu programmieren.
    ich möchte mit den ldr- widerständen etwas programmieren. jetzt hab ich mal mit nem ganz einfachen programm angefangen, aber irgendwie geht da am rp6 noch gar nichts. weder die leds leuchten, wenn ich den linken ldr anleuchte, noch wird über das terminal eine textnachricht ausgegeben. wer kann mir sagen an was das liegt?
    hier mein programm:

    Code:
    #include "RP6RobotBaseLib.h"     
     
    
    #define RANGE 500  
    uint16_t left, right;
    void task_LDRinfo(void)
    {
    
    if(adcLSL >= RANGE)
    	{setLEDs(0b111111);
    	writeString_P("LDR_L: ");
    	writeIntegerLength(adcLSL, DEC, 4);
    		writeChar('\n');
    	}
    	
    }
    
    int main(void)
    {initRobotBase();
    
    
    while(true)
    {task_LDRinfo();
    }
    return 0;
    }
    mfg

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    Hallo,

    Tipp:
    ... der ADC liest sich nicht von selbst aus!
    Du musst in Deiner Hauptschleife noch eine bestimmte Funktion aufrufen... welche genau solltest Du aber besser versuchen selbst rauszufinden (Anleitung)

    MfG,
    SlyD

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    36
    Beiträge
    220
    danke. jetzt hab ich task_adc(); eingefügt. passiert mir hoffentlich nicht noch einmal. aber warum wird die task_adc(); in dem beispielprogramm lightdetection nie aufgerufen und die adc-kanäle arbeiten trotzdem?
    mfg

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    Hallo,

    in dem Beispielprogramm wird task_RP6System() verwendet und diese Funktion enthält schon den Aufruf von task_ADC().
    Genau wie alles andere was so benötigt wird (Motorregelung, ACS, IRCOMM, ADCs, Bumper).
    Eigentlich musst Du nur immer task_RP6System() in der Hauptschleife aufrufen.

    MfG,
    SlyD

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    36
    Beiträge
    220
    Zitat Zitat von SlyD
    Hallo,

    in dem Beispielprogramm wird task_RP6System() verwendet und diese Funktion enthält schon den Aufruf von task_ADC().
    Genau wie alles andere was so benötigt wird (Motorregelung, ACS, IRCOMM, ADCs, Bumper).
    Eigentlich musst Du nur immer task_RP6System() in der Hauptschleife aufrufen.

    MfG,
    SlyD
    wo wird denn dann in diesem programm task_RP6System() aufgerufen?


    Code:
    // Uncommented Version of RP6Base_LightDetection.c
    // written by Dominik S. Herwald
    // ------------------------------------------------------------------------------------------
    
    #include "RP6RobotBaseLib.h" 
    
    
    #define RANGE 15     
    
    void task_LDRinfo(void)
    {
    	uint16_t left, right;
    
    	if(getStopwatch1() > 200)
    	{
    		writeString_P("LDR_L: ");
    		writeIntegerLength(adcLSL, DEC, 4);
    		writeString_P(" ; LDR_R: ");
    		writeIntegerLength(adcLSR, DEC, 4);
    		
    		writeString_P(" ||");
    		if(adcLSL >= RANGE && adcLSR >= RANGE)
    		{
    			int16_t dif = ((int16_t)(adcLSL - adcLSR));
    			if(dif > 160) dif = 160;
    			if(dif < -160) dif = -160;
    
    			if(dif > 140)
    				setLEDs(0b111000);
    			else if(dif > 75)
    				setLEDs(0b011000);
    			else if(dif > 35)
    				setLEDs(0b001000);
    			else if(dif > -35)
    				setLEDs(0b001001);
    			else if(dif > -75)
    				setLEDs(0b000001);
    			else if(dif > -140)
    				setLEDs(0b000011);
    			else 
    				setLEDs(0b000111);
    				
    			if(adcLSL < (adcLSR - RANGE)) 
    				writeString_P("   L < R # ");
    			else if(adcLSR < (adcLSL - RANGE)) 
    				writeString_P(" # L > R   ");
    			else 
    				writeString_P("   L = R   ");
    		}
    		else  
    		{
    			writeString_P(" It is very dark!");
    			if(adcLSL < adcLSR) 
    			{
    				setLEDs(0b010110);
    				writeString_P("   L < R # ");
    			}
    			else if(adcLSR < adcLSL) 
    			{
    				setLEDs(0b110010);
    				writeString_P(" # L > R   ");
    			}
    			else 
    			{
    				setLEDs(0b011011);
    				writeString_P("   L = R   ");
    			}
    		}
    		
    		writeString_P(" || UBAT: ");
    		writeIntegerLength(adcBat, DEC, 3);
    		writeChar('\n');
    		if(adcBat < 600) 
    		{
    			writeString_P("WARNING: BAT IS LOW!\n");
    			writeChar('\n');
    		}
    		setStopwatch1(0);
    	}
    }
    
    int main(void)
    {
    	initRobotBase();
        writeString_P("\nRP6Loader - LDR Testprogram\n");
    	writeString_P("___________________________\n\n");
    
    	setLEDs(0b111111);
    	mSleep(1000);
    	setLEDs(0b000000);
    
    	startStopwatch1();
    
    	while(true) 
    	{
    		task_LDRinfo();
    	}
    	return 0;
    }
    mfg

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    BUG - aber *NUR* in der *unkommentierten* Version die ja nicht übersetzt wird vom Compiler daher ist das bis gerade eben leider nicht aufgefallen

    Schau Dir mal die kommentierte Version an!

    So sieht die Hauptschleife da nämlich aus:
    Code:
    	while(true) 
    	{
    		task_LDRinfo();
    		task_RP6System();
    	}
    MfG,
    SlyD

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    36
    Beiträge
    220
    is interessant. hast recht. ich hab bisher immer gedacht, dass das programm egal ob mit oder ohne kommentare immer das selbe ist.
    das hier ist jetzt das erste mal, dass ich einen unterschied feststellen kann.
    mfg

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    das hier ist jetzt das erste mal, dass ich einen unterschied feststellen kann.
    Das gilt auch für mich - sonst wäre das schon längst behoben ^^

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    36
    Beiträge
    220
    dann bin ich ja beruhigt. hab gerade schon gedacht, dass das öfter so ist^^^^

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad