Ergebnis 1 bis 2 von 2
  1. #1
    Mitglied

    Registriert seit
    07.05.2017
    Beiträge
    18
    Renommee-Modifikator
    0

    Licht/Hupe oder Blinker/Warnblinker mit einem PICAXE 08M2

    Hi,

    die RC-Schalter die es zu kaufen gibt machen nicht wirklich das was man möchte, am meisten ärgert mich das bei geringer Bewegung des Steuerhebel sie schon schalten. So eine ruhige Hand habe ich nicht wenn blinken und fahren auf einem Steuerhebel liegen, und/oder Licht und Hupe mit der Lenkung auf einem Steuerhebel sind.

    Also musste mal wieder ein PICAXE 08M2 herhalten ;-), das kleine Ding ist für meine Spielereien ausreichend und es erstaunt mich immer wieder was man damit alles machen kann :-). Da "time" im Sekundentakt arbeitet wurde eine dritte Multitask Routine erstellt die ca. im Zehntel Sekundentakt arbeitet, so wird nach 4 mal blinken auf Warnblinken umgeschaltet. O.K. das mit Sekunden funktioniert auch, dauerte mir aber zu lange ;-).

    Das Programm kann leicht an eigene Bedürfnisse angepasst werden, oder auch komplett durch ein anders Programm ersetzt werden. Vielleicht hat ja Jemand eine andere Idee was man bei einem RC-Modell mit dieser Platine bewegen kann.

    Die aktuelle Elektrik (Stromlaufplan und Platinenplan:
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Schaltplan.jpg 
Hits:	5 
Größe:	28,3 KB 
ID:	52532
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Platine.jpg 
Hits:	5 
Größe:	43,6 KB 
ID:	52533
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Beleuchtung.jpg 
Hits:	5 
Größe:	42,6 KB 
ID:	52534

    Das Programm:
    ; picaxe08m2 ; automatische Compilerauswahl für gedit
    ; Dateiname: 08M2 RC-Modul.axe
    ; Funktion: Das Signal von einem RC-Empfänger auswerten und verarbeiten (Licht/Hupe oder Blinker/Warnblinker für z.B. RC-Autos)
    ; Datum: Start 30.01.2016, Stand 25.02.2016
    ; Von: Naubaddi
    ;
    ; PICAXE 08M2 Alle Pin Funktionen (C.0 nur Ausgang, C.3 nur Eingang)
    ;
    ; +---v---+
    ; +V |1 8| 0V
    ; RxD/I C.5 |2 7| C.0 O/TxD/hserout/DAC
    ; Touch/ADC/O/I C.4 |3 6| C.1 I/O/ADC/Touch/hserin/SRI/hi2c/scl
    ; I C.3 |4 5| C.2 I/O/ADC/Touch/pwm/tune/SRQ/hi2c sda
    ; +-------+
    ;
    suspend 1 ; Multitask für den Blinker links stoppen
    suspend 2 ; Multitask für den Blinker rechts stoppen
    suspend 3 ; Multitask für den Zeitzähler stoppen
    ;
    pause 1000 ; x Milisekunden Pause damit das System sich beruhigen kann
    ;
    symbol links = C.2 ; Ausgang für den Blinker links
    symbol rechts = C.1 ; Ausgang für den Blinker rechts
    symbol Hupe = C.4 ; Ausgang für die Hupe oder Eingang für die Umschaltung auf Blinker/Warnblinker
    symbol RC_Kanal = C.3 ; Eingang für einen Kanal vom Empfänger
    symbol RC_Signal = w0 ; das Signal vom Empfänger, links > Mitte + xy, Mitte = X, rechts < Mitte - xy (75-225)
    symbol Mitte = b2 ; die Mittelstellung
    symbol Blinkinterval = b3 ; Blinkinterval in Milisekunden
    symbol links_ein = b4 ; Blinker links ein/aus
    symbol rechts_ein = b5 ; Blinker rechts ein/aus
    symbol Licht_ein = b6 ; Licht ein/aus
    symbol Zeit_z = b7 ; Zeitzähler für Warnblinker ein
    symbol xy = b8 ; Schaltpunkt plus/Minus von der Mittelstellung
    symbol dumm = b9 ; eine Variable für alles Mögliche
    ;
    Blinkinterval = 100 ; Blinkinterval auf x Milisekunden setzen
    links_ein = 0 ; Blinker links aus
    rechts_ein = 0 ; Blinker rechts aus
    low links ; Blinker links ausschalten
    low rechts ; Blinker rechts ausschalten
    Licht_ein = 0 ; Licht aus
    Zeit_z = 0 ; Zeitzähler für Warnblinker ein auf 0 setzen
    xy = 30 ; Schaltpunkt plus/Minus von der Mittelstellung
    ;
    pulsin RC_Kanal, 1, Mitte ; die Mittelstellung übernehmen (ca. 150)
    ;
    if pin4 = 1 then goto RC_Blinker_Warnblinker ; wenn eine Brücke von + auf C.4 gesteckt ist nach RC_Blinker_Warnblinker springen
    ;
    RC_Licht_Hupe: ; Hauptschleife Licht/Hupe (das RC Signal vom Empfänger auswerten)
    ;
    pulsin RC_Kanal, 1, RC_Signal ; RC Signal übernehmen
    dumm = Mitte + xy ; Mittelstellung + xy für Licht ein/aus
    ;
    if RC_Signal > dumm then ; gibt es ein RC Signal für Licht ein/aus?
    if Licht_ein = 0 then ; wenn das Licht aus ist
    Licht_ein = 1 ; Licht auf ein setzen
    high links ; Licht links einschalten
    high rechts ; Licht rechts einschalten
    else ; sonst
    Licht_ein = 0 ; Licht auf aus setzen
    low links ; Licht links ausschalten
    low rechts ; Licht rechts ausschalten
    endif ; Ende von: Licht_ein
    do ; Warteschleife
    pulsin RC_Kanal, 1, RC_Signal ; RC Signal übernehmen
    loop until RC_Signal < dumm ; Ende von: do (Warteschleife)
    endif ; Ende von: RC_Signal
    ;
    pulsin RC_Kanal, 1, RC_Signal ; RC Signal übernehmen
    dumm = Mitte - xy ; Mittelstellung - xy für Hupe ein
    ;
    if RC_Signal < dumm then ; gibt es ein RC Signal für die Hupe
    high Hupe ; Hupe einschalten
    do ; Warteschleife
    pulsin RC_Kanal, 1, RC_Signal ; RC Signal übernehmen
    loop until RC_Signal > dumm ; Ende von: do (Warteschleife)
    low Hupe ; Hupe ausschalten
    endif ; Ende von: RC_Signal
    ;
    goto RC_Licht_Hupe ; Ende von: RC_Licht_Hupe
    ;
    RC_Blinker_Warnblinker: ; Hauptschleife Blinker/Warnblinker (das RC Signal vom Empfänger auswerten)
    ;
    pulsin RC_Kanal, 1, RC_Signal ; RC Signal übernehmen
    dumm = Mitte - xy ; Mittelstellung - xy für links blinken
    ;
    if RC_Signal < dumm then ; wenn es ein RC Signal für links gibt
    if links_ein = 0 then ; wenn der Blinker links aus ist
    rechts_ein = 0 ; Blinker rechts auf aus setzen
    pause Blinkinterval ; x Milisekunden Pause damit nicht beide Blinker an sind
    links_ein = 1 ; Blinker links auf ein setzen
    restart 1 ; Multitask Blinker links neu starten
    else ; sonst
    links_ein = 0 ; Blinker links auf aus setzen
    rechts_ein = 0 ; Blinker rechts auf aus setzen (falls der Warnblinker ein ist)
    suspend 1 ; Multitask für den Blinker/Warnblinker stoppen, wird im Moment nicht gebraucht
    suspend 2 ; Multitask für den Blinker/Warnblinker stoppen, wird im Moment nicht gebraucht
    low links ; Blinker links ausschalten
    low rechts ; Blinker rechts ausschalten
    endif ; Ende von: links_ein
    Zeit_z= 0 ; Zeitzähler auf 0 setzen
    restart 3 ; Multitask Zeitzähler neu starten
    do ; Warteschleife
    if links_ein = 1 and Zeit_z > 4 then ; nach 4 mal blinken den Warnblinker einschalten
    rechts_ein = 1 ; Blinker rechts auf ein setzen
    restart 1 ; Multitask Blinker links neu starten
    restart 2 ; Multitask Blinker rechts neu starten
    endif ; Ende von: links_ein und Zeit_z
    pulsin RC_Kanal, 1, RC_Signal ; RC Signal übernehmen
    loop until RC_Signal > dumm ; Ende von: do (Warteschleife)
    suspend 3 ; Multitask Zeitzähler stoppen
    endif ; Ende von: RC_Signal_auswerten
    ;
    pulsin RC_Kanal, 1, RC_Signal ; RC Signal übernehmen
    dumm = Mitte + xy ; Mittelstellung + xy für rechts blinken
    ;
    if RC_Signal > dumm then ; wenn es ein RC Signal für rechts gibt
    if rechts_ein = 0 then ; wenn der Blinker rechts aus ist
    links_ein = 0 ; Blinker links auf aus setzen
    pause Blinkinterval ; x Milisekunden Pause damit nicht beide Blinker an sind
    rechts_ein = 1 ; Blinker rechts auf ein setzen
    restart 2 ; Multitask Blinker rechts neu starten
    else ; sonst
    rechts_ein = 0 ; Blinker rechts auf aus setzen
    links_ein = 0 ; Blinker links auf aus setzen (falls der Warnblinker ein ist)
    suspend 2 ; Multitask für den Blinker/Warnblinker stoppen, wird im Moment nicht gebraucht
    suspend 1 ; Multitask für den Blinker/Warnblinker stoppen, wird im Moment nicht gebraucht
    low rechts ; Blinker rechts ausschalten
    low links ; Blinker links ausschalten
    endif ; Ende von: rechts_ein
    Zeit_z = 0 ; Zeitzähler auf 0 setzen
    restart 3 ; Multitask Zeitzähler neu starten
    do ; Warteschleife
    if rechts_ein = 1 and Zeit_z > 4 then ; nach 4 mal blinken den Warnblinker einschalten
    links_ein = 1 ; Blinker links auf ein setzen
    restart 2 ; Multitask Blinker rechts neu starten
    restart 1 ; Multitask Blinker links neu starten
    endif ; Ende von: links_ein und Zeit_z
    pulsin RC_Kanal, 1, RC_Signal ; RC Signal übernehmen
    loop until RC_Signal < dumm ; Ende von: do (Warteschleife)
    suspend 3 ; Multitask Zeitzähler stoppen
    endif ; Ende von: RC_Signal
    ;
    goto RC_Blinker_Warnblinker ; Ende von: RC_Blinker_Warnblinker
    ;
    start1: ; Multitask für den Blinker links
    if links_ein = 1 then ; wenn der Blinker eingeschaltet ist
    high links ; Blinker links einschalten
    pause Blinkinterval ; x Millisekunden Pause
    low links ; Blinker links ausschalten
    pause Blinkinterval ; x Millisekunden Pause
    endif ; Ende von: links_ein
    goto start1 ; Ende von: start1
    ;
    start2: ; Multitask für den Blinker rechts
    if rechts_ein = 1 then ; wenn der Blinker eingeschaltet ist
    high rechts ; Blinker rechts einschalten
    pause Blinkinterval ; x Millisekunden Pause
    low rechts ; Blinker rechts ausschalten
    pause Blinkinterval ; x Millisekunden Pause
    endif ; Ende von: rechts_ein
    goto start2 ; Ende von: start2
    ;
    start3: ; Multitask Zeitzähler
    pause Blinkinterval ; x Millisekunden Pause
    Zeit_z = Zeit_z + 1 ; Zeitzähler um 1 erhöhen
    goto start3 ; Ende von: start3
    ;
    Grüßle

  2. #2
    Mitglied

    Registriert seit
    07.05.2017
    Beiträge
    18
    Renommee-Modifikator
    0

    AW: Licht/Hupe oder Blinker/Warnblinker mit einem PICAXE 08M2

    Hi,

    da die Anforderung sich minimal geändert hat wurde das RC-Modul mit geänderter Software gefüttert, die neuen/geänderten Funktionen sind Musik ein/aus und Hupe oder Blinker/Warnblinker.

    Vielleicht kann es ja Jemand gebrauchen.

    Der Quelltext für Musik-Hupe oder Blinker-Warnblinker:
    Code:
    ;picaxe08m2 ;	automatische Compilerauswahl für mein Skript
    ; Dateiname:	Musik-Hupe oder Blinker-Warnblinker RC-Modul.axe
    ; Funktion:	Das Signal von einem RC-Empfänger auswerten und verarbeiten (Musik/Hupe oder Blinker/Warnblinker für z.B. RC-Autos)
    ; Datum:	Start 30.01.2016, Stand 21.11.2019
    ; Von:		Naubaddi
    ;
    ; PICAXE 08M2 Alle Pin Funktionen (C.0 nur Ausgang, C.3 nur Eingang)
    ;
    ;                     +---v---+
    ;                  +V |1     8| 0V
    ;           RxD/I C.5 |2     7| C.0 O/TxD/hserout/DAC
    ;   Touch/ADC/O/I C.4 |3     6| C.1 I/O/ADC/Touch/hserin/SRI/hi2c/scl
    ;               I C.3 |4     5| C.2 I/O/ADC/Touch/pwm/tune/SRQ/hi2c sda
    ;                     +-------+
    ;
    suspend 1							; Multitask für den Blinker links stoppen
    suspend 2							; Multitask für den Blinker rechts stoppen
    suspend 3							; Multitask für den Zeitzähler stoppen
    ;
    pause 1000							; x Milisekunden Pause damit das System sich beruhigen kann
    ;
    symbol links = C.2						; Ausgang für den Blinker links
    symbol rechts = C.1						; Ausgang für den Blinker rechts
    symbol Hupe = C.4						; Ausgang für die Hupe oder Eingang für die Umschaltung auf Blinker/Warnblinker
    symbol RC_Kanal = C.3						; Eingang für einen Kanal vom Empfänger
    symbol RC_Signal = w0						; das Signal vom Empfänger, links > Mitte + xy, Mitte = X, rechts < Mitte - xy (75-225)
    symbol Mitte = b2						; die Mittelstellung
    symbol Blinkinterval = b3					; Blinkinterval in Milisekunden
    symbol links_ein = b4						; Blinker links ein/aus
    symbol rechts_ein = b5						; Blinker rechts ein/aus
    symbol Musik_ein = b6						; Musik ein/aus
    symbol Zeit_z = b7						; Zeitzähler für Warnblinker ein
    symbol xy = b8							; Schaltpunkt plus/Minus von der Mittelstellung
    symbol dumm = b9						; eine Variable für alles Mögliche
    ;
    Blinkinterval = 100						; Blinkinterval auf x Milisekunden setzen
    links_ein = 0							; Blinker links aus
    rechts_ein = 0							; Blinker rechts aus
    low links							; Blinker links ausschalten
    low rechts							; Blinker rechts ausschalten
    Musik_ein = 0							; Musik aus
    Zeit_z = 0							; Zeitzähler für Warnblinker ein auf 0 setzen
    xy = 30								; Schaltpunkt plus/Minus von der Mittelstellung
    ;
    pulsin RC_Kanal, 1, Mitte					; die Mittelstellung übernehmen (ca. 150)
    ;
    if pin4 = 1 then goto RC_Blinker_Warnblinker			; wenn eine Brücke von + auf C.4 gesteckt ist nach RC_Blinker_Warnblinker springen
    ;
    RC_Musik_Hupe:							; Hauptschleife Musik/Hupe (das RC Signal vom Empfänger auswerten)
    	;
    	pulsin RC_Kanal, 1, RC_Signal				; RC Signal übernehmen
    	dumm = Mitte + xy					; Mittelstellung + xy für Musik ein/aus
    	;
    	if RC_Signal > dumm then				; gibt es ein RC Signal für Musik ein/aus?
    		high links					; Musik links einschalten
    		high rechts					; Musik rechts einschalten
    		do						; Warteschleife
    			pulsin RC_Kanal, 1, RC_Signal		; RC Signal übernehmen
    		loop until RC_Signal < dumm			; Ende von: do (Warteschleife)
    		low links					; Musik links ausschalten
    		low rechts					; Musik rechts ausschalten
    	endif							; Ende von: RC_Signal
    	;
    	pulsin RC_Kanal, 1, RC_Signal				; RC Signal übernehmen
    	dumm = Mitte - xy					; Mittelstellung - xy für Hupe ein
    	;
    	if RC_Signal < dumm then				; gibt es ein RC Signal für die Hupe
    		high Hupe					; Signal einschalten
    		do						; Warteschleife
    			pulsin RC_Kanal, 1, RC_Signal		; RC Signal übernehmen
    		loop until RC_Signal > dumm			; Ende von: do (Warteschleife)
    		low Hupe					; Signal ausschalten
    	endif							; Ende von: RC_Signal
    	;
    goto RC_Musik_Hupe						; Ende von: RC_Musik_Hupe
    ;
    RC_Blinker_Warnblinker:						; Hauptschleife Blinker/Warnblinker (das RC Signal vom Empfänger auswerten)
    	;
    	pulsin RC_Kanal, 1, RC_Signal				; RC Signal übernehmen
    	dumm = Mitte - xy					; Mittelstellung - xy für links blinken
    	;
    	if RC_Signal < dumm then				; wenn es ein RC Signal für links gibt
    		if links_ein = 0 then				; wenn der Blinker links aus ist
    			rechts_ein = 0				; Blinker rechts auf aus setzen
    			pause Blinkinterval			; x Milisekunden Pause damit nicht beide Blinker an sind
    			links_ein = 1				; Blinker links auf ein setzen
    			restart 1				; Multitask Blinker links neu starten
    		else						; sonst
    			links_ein = 0				; Blinker links auf aus setzen
    			rechts_ein = 0				; Blinker rechts auf aus setzen (falls der Warnblinker ein ist)
    			suspend 1				; Multitask für den Blinker/Warnblinker stoppen, wird im Moment nicht gebraucht
    			suspend 2				; Multitask für den Blinker/Warnblinker stoppen, wird im Moment nicht gebraucht
    			low links				; Blinker links ausschalten
    			low rechts				; Blinker rechts ausschalten
    		endif						; Ende von: links_ein
    		Zeit_z= 0					; Zeitzähler auf 0 setzen
    		restart 3					; Multitask Zeitzähler neu starten
    		do						; Warteschleife
    			if links_ein = 1 and Zeit_z > 4 then	; nach 4 mal blinken den Warnblinker einschalten
    				rechts_ein = 1			; Blinker rechts auf ein setzen
    				restart 1			; Multitask Blinker links neu starten
    				restart 2			; Multitask Blinker rechts neu starten
    			endif					; Ende von: links_ein und Zeit_z
    			pulsin RC_Kanal, 1, RC_Signal		; RC Signal übernehmen
    		loop until RC_Signal > dumm			; Ende von: do (Warteschleife)
    		suspend 3					; Multitask Zeitzähler stoppen
    	endif							; Ende von: RC_Signal_auswerten
    	;
    	pulsin RC_Kanal, 1, RC_Signal				; RC Signal übernehmen
    	dumm = Mitte + xy					; Mittelstellung + xy für rechts blinken
    	;
    	if RC_Signal > dumm then				; wenn es ein RC Signal für rechts gibt
    		if rechts_ein = 0 then				; wenn der Blinker rechts aus ist
    			links_ein = 0				; Blinker links auf aus setzen
    			pause Blinkinterval			; x Milisekunden Pause damit nicht beide Blinker an sind
    			rechts_ein = 1				; Blinker rechts auf ein setzen
    			restart 2				; Multitask Blinker rechts neu starten
    		else						; sonst
    			rechts_ein = 0				; Blinker rechts auf aus setzen
    			links_ein = 0				; Blinker links auf aus setzen (falls der Warnblinker ein ist)
    			suspend 2				; Multitask für den Blinker/Warnblinker stoppen, wird im Moment nicht gebraucht
    			suspend 1				; Multitask für den Blinker/Warnblinker stoppen, wird im Moment nicht gebraucht
    			low rechts				; Blinker rechts ausschalten
    			low links				; Blinker links ausschalten
    		endif						; Ende von: rechts_ein
    		Zeit_z = 0					; Zeitzähler auf 0 setzen
    		restart 3					; Multitask Zeitzähler neu starten
    		do						; Warteschleife
    			if rechts_ein = 1 and Zeit_z > 4 then	; nach 4 mal blinken den Warnblinker einschalten
    				links_ein = 1			; Blinker links auf ein setzen
    				restart 2			; Multitask Blinker rechts neu starten
    				restart 1			; Multitask Blinker links neu starten
    			endif					; Ende von: links_ein und Zeit_z
    			pulsin RC_Kanal, 1, RC_Signal		; RC Signal übernehmen
    		loop until RC_Signal < dumm			; Ende von: do (Warteschleife)
    		suspend 3					; Multitask Zeitzähler stoppen
    	endif							; Ende von: RC_Signal
    	;
    goto RC_Blinker_Warnblinker					; Ende von: RC_Blinker_Warnblinker
    ;
    start1:								; Multitask für den Blinker links
    	if links_ein = 1 then					; wenn der Blinker eingeschaltet ist
    		high links					; Blinker links einschalten
    		pause Blinkinterval				; x Millisekunden Pause
    		low links					; Blinker links ausschalten
    		pause Blinkinterval				; x Millisekunden Pause
    	endif							; Ende von: links_ein
    goto start1							; Ende von: start1
    ;
    start2:								; Multitask für den Blinker rechts
    	if rechts_ein = 1 then					; wenn der Blinker eingeschaltet ist
    		high rechts					; Blinker rechts einschalten
    		pause Blinkinterval				; x Millisekunden Pause
    		low rechts					; Blinker rechts ausschalten
    		pause Blinkinterval				; x Millisekunden Pause
    	endif							; Ende von: rechts_ein
    goto start2							; Ende von: start2
    ;
    start3:								; Multitask Zeitzähler
    	pause Blinkinterval					; x Millisekunden Pause
    	Zeit_z = Zeit_z + 1					; Zeitzähler um 1 erhöhen
    goto start3							; Ende von: start3
    ;
    Grüßle, Naubaddi

Berechtigungen

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