- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 13

Thema: Scheinwerfer mit Front-LDR steuern - geht (noch) nicht

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    131
    Zitat Zitat von Dirk Beitrag anzeigen
    im Programm 10_Move2 erfolgt die Abfrage der Sensorwerte schon regelmäßig in den Funktionen printAllSensorValues() und printAllSensorValues_WIFI().
    Die werden wieder in displayBehaviour() und task_LCDHeartbeat() aufgerufen.
    Wenn du also adcLSL im Hauptprogramm von 10_Move2 liest, müßten darin wechselnde Werte erkennbar sein.

    Definierst du adcLSL in deinem neuen Programm?
    Hi Dirk,
    genau das, was du hier oben schreibst habe ich versucht in meinem erste Post darzustellen:
    Ich habe kein NEUES Programm! Ich lass das gute alte 10_Move2 laufen, nur mit ein paar zusätzlichen Programmzeilen. Ich sehe die sich ändernden adcLSL-Werte im Terminal. Das ist alles so, wie es soll.
    "adcLSL" gibt es also schon und die Werte werden auch richtig im Terminal dargestellt! Der Aufruf "getAllSensors()" existiert damit natürlich auch schon und funktioniert für die zwei Terminal-Print Funktionen.
    Ich habe nun eben gerade meinen Code als neue Funktion "controlHeadlights()) vorne bei den bereits vorhandenen Funktionen mit eingebaut. Also nicht mehr in der "Main"!
    Hier ist der Code der Funktion, wie er im Moment aussieht:

    Code:
    void controlHeadlights(void)
    
    {
    	DDRL |= IO_PL5_OC5C;		// PL5 = Ausgang (Scheinwerferanschluß)
    	
    	getAllSensors();
    	uint16_t licht = adcLSL;
    	if(licht < 500)
    		PORTL &= ~IO_PL5_OC5C;	// PL5-low = Scheinwerfer an
    	else
    		PORTL |= IO_PL5_OC5C;	// PL5-high = Scheinwerfer aus
    }
    Aufgerufen wird er mit
    Code:
    controlHeadlights();
    aus dem "main". Der Aufruf funktioniert, aber die Lichter sind immer an, unabhängig von dem im Terminal angezeigten adcLSL Wert.
    Und nein, ich habe adcLSL nicht noch mal selbst definiert, die Variable ist doch schon definiert im Programm!?

    ratlos Uwe

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Auch ratlos: Dirk

    Kannst du in Main mal die Variable adcLSL z.B. alle 500ms ausgeben?
    Geändert von Dirk (23.02.2016 um 20:39 Uhr)
    Gruß
    Dirk

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    131
    Zitat Zitat von Dirk Beitrag anzeigen
    Auch ratlos: Dirk

    Kannst du in Main mal die Variable adcLSL z.B. alle 500ms ausgeben?
    Kann ich versuchen, weiß aber nicht recht was du meinst!? Ausgeben wo/wie?

    Hier ist die "Main", wie sie im Moment bei mir aussieht (rot meine Einfügungen):
    Code:
    /*****************************************************************************/
    // Main function - The program starts here:
    
    int main(void)
    {
    	initRP6M256(); 
    	initLCD();
    	
    	// UART1 Initialisierung für Steuerung Speakjet
    	cli();			// Disable global interrupts.
    
    	UBRR1H = UBRR_BAUD_LOW_WIFI >> 8; // Setup UART1: Baud is Low Speed (9600)
    	UBRR1L = (uint8_t) UBRR_BAUD_LOW_WIFI;
    	UCSR1A = 0x00;
    	UCSR1C = (0<<UMSEL10) | (0<<UMSEL11) | (1<<UCSZ11) | (1<<UCSZ10);
    	UCSR1B = (1 << TXEN1) | (1 << RXEN1) | (1 << RXCIE1);
    
    	clearReceptionBuffer1();
    
    	sei();			// Enable Global Interrupts
    	// Ende der UART1 Initialisierung
    
        
    	writeString_P("\n\nRP6 CONTROL M32 I2C Master Example Program!\n"); 
            writeString_P("\nMoving...\n"); 
    
    	// ---------------------------------------
    	WDT_setRequestHandler(watchDogRequest); 
    	BUMPERS_setStateChangedHandler(bumpersStateChanged);
    	ACS_setStateChangedHandler(acsStateChanged);
    	BATTERY_setLowVoltageHandler(batteryVoltageLow);
    
    	// ---------------------------------------
    	I2CTWI_initMaster(100);  
    	I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady);
    	I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
    
    
    	setLEDs(0b1111);
    		
    	// I2C auf der Basis sicher wecken
    	I2CTWI_transmitByte(0, 0);
    	mSleep(200);
            I2CTWI_transmitByte(0, 0);
    	
    		
    	showScreenLCD("################", "################");
    	mSleep(500);
    	showScreenLCD("I2C-Master", "Behaviours");
    	mSleep(1000);
    	setLEDs(0b0000);
    	
    	// sende Begrüßung zum SpeakJet
    	sound_rp6_ready();
    	mSleep(2000);
    	
    	// Scheinwerfer-Steuerung
    	controlHeadlights();
    		
    	// ---------------------------------------
    	// Setup ACS power:
    	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_ACS_POWER, ACS_PWR_MED);
    	// Enable Watchdog for Interrupt requests:
    	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT, true);
    	// Enable timed watchdog requests:
    	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT_RQ, true);
    	
    	startStopwatch1();
    	startStopwatch2();
    	startStopwatch3();
    	
    	showScreenLCD("Active Behaviour", "");
    	
    	while(true) 
    	{ 
    	    task_LCDHeartbeat();
    	    task_checkINT();
    	    task_I2CTWI();
    	    behaviourController();
    	}
    	return 0;
    }
    Meinst du, ich soll die adcLSL auf dem LCD ausgeben? Wenn ja, wie?
    Sorry für viel dumm

    Uwe

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi Uwe,

    vergiss das mit der Ausgabe erstmal.

    In Main werden alle Befehle VOR der Hauptschleife, also vor while(true) {...} nur EINMAL und nie wieder ausgeführt ("Initialisierungen").

    D.h., dass auch deine Funktion controlHeadlights() nur EINMAL ausgeführt wird.
    Was du willst ist ja aber, dass sich die Frontscheinwerfer je nach Lichtverhältnissen während der Fahrt an- oder ausschalten.
    Dann gehört deine Funktion IN die while(true) {...} Schleife.

    Ich würde sie dann aber nicht bei JEDEM Durchlauf der schnellen Hauptschleife aufrufen, sondern in Abständen (z.B. jede Sekunde) mithilfe einer Stopwatch.
    Gruß
    Dirk

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    131
    Hi Dirk,
    Zitat Zitat von Dirk Beitrag anzeigen
    In Main werden alle Befehle VOR der Hauptschleife, also vor while(true) {...} nur EINMAL und nie wieder ausgeführt ("Initialisierungen").
    D.h., dass auch deine Funktion controlHeadlights() nur EINMAL ausgeführt wird.
    Das verstehe ich! Auf jeden Fall müsste die Funktion aber EINMAL richtig funktionieren, oder nicht?
    Ich kann aber das Programm bei völliger Dunkelheit starten oder bei prallem Licht, IMMER geht der Scheinwerfer an! Ich bekomme im Moment gar keine Abhängigkeit von adcLSL hin. Nur wenn ich der Variablen "licht" von Hand verschiedene Werte zuweise, schaltet er richtig!

    Uwe

    P.S. Ich werde die Funktion aber trotzdem IN der Schleife aufrufen, nur helfen wird es im Moment wohl nicht. Der Fehler liegt woanders, denke ich.
    Geändert von basteluwe (24.02.2016 um 10:16 Uhr)

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Wenn du getAllSensors () einmal vorher aufrufst, könnte es auch schon da klappen. Keine Garantie .
    Gruß
    Dirk

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied Avatar von basteluwe
    Registriert seit
    15.11.2012
    Beiträge
    131
    Nun brat mir einer 'nen Storch!
    Der Aufruf für die Funktion musste nur IN die Main-Schleife. Jetzt geht es!


    Danke für die Hilfe
    Uwe

Ähnliche Themen

  1. Pololiu A4988 STEP-Eingang mit PWM steuern - geht das?
    Von acrobat88 im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 10.10.2011, 21:57
  2. problem mit K6 (geht, geht nicht...)
    Von ijjiij im Forum Asuro
    Antworten: 3
    Letzter Beitrag: 17.12.2010, 17:19
  3. Asuro Front LED funktioniert nicht
    Von RoninShooter im Forum Asuro
    Antworten: 6
    Letzter Beitrag: 29.12.2009, 20:06
  4. Nicht-invertierender OpAmp, Rechnung geht nicht
    Von Crock im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 26.06.2008, 13:51
  5. Front LED tot?
    Von gtacelt im Forum Asuro
    Antworten: 5
    Letzter Beitrag: 21.01.2007, 20:13

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad