Programma aanpassen

Hallo met Bert
Het in bijlage programma wil ik aanpassen ,dit programma doet precies wat het moet doen.Maar ik wil het uitbreiden met een stukje software dat het volgende moet doen.De LDR word belicht op het moment dat de wasmachine klaar is met de was dan krijg ik beneden een signaal via een klik aan klik uit systeem,dit gaat altijd goed.Maar bij het instellen van een bepaald wasprogramma wil de LDR wel eens geactiveerd worden daarom wil ik een 5sec tijd instellen, word de LDR in die 5sec constant belicht dan mach de rode led (LED rood = on)aangaan en het programma verder doorlopen Heeft iemand een idee hoe ik dit aanpas.

Electronica is mooi als het goed werkt
buckfast_beekeeper

Golden Member

Fijner is de code tussen code tags te zetten. Veel eenvoudiger te lezen en veel duidelijker.Gebruik hiervoor de knop links van de Ω.

Aan je while weerstand een extra voorwaarde koppelen? Bijvoorbeeld een teller? Als je weerstand boven een bepaald bereik is, tel je op, is dat niet tel je af (tot 0). Als de teller nu een waarde x bereikt weet je dat de ldr al een bepaalde tijd aan de voorwaarde voldoet. Desnoods een extra delayms 100 omdat anders de lus misschien te snel wordt doorlopen. Tellen tot 50 wil dan zeggen dat je ldr al minstens 5s aan de voorwaarde voldoet.

Van Lambiek wordt goede geuze gemaakt.

bb. bedankt voor de snelle reactie, maar hoe vertaal ik dit dan in het programma.

Electronica is mooi als het goed werkt
Arco

Special Member

Als je de code even tussen code tags zet is dat simpeler aan te geven. Een foto heb je daarvoor niet veel aan...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Diverse pogingen gedaan om de code tussen de code tags te zetten maar dit lukt mij niet,de code staat op mijn Laptop en die is niet verbonden met internet,hoe krijg ik de code hier gepost?

Electronica is mooi als het goed werkt

Copy paste naar usb stick, en die dan weer op de computer zetten die wel internet heeft, dan kun je daar vandaan weer copy/paste doen ;)

En met copy / paste, bedoel ik dus: code selecteren, dan ctrl+c, dan even nieuw tekst bestandje maken, en daar in dan weer even ctrl+v doen ...

[Bericht gewijzigd door Fredjuhh op zondag 24 april 2016 15:46:26 (35%)

"Ben nog een N00B, maar dat is al aan het veranderen ;)
Lambiek

Special Member

Op 24 april 2016 15:36:20 schreef Bertjebuk:
Diverse pogingen gedaan om de code tussen de code tags te zetten maar dit lukt mij niet,de code staat op mijn Laptop en die is niet verbonden met internet,hoe krijg ik de code hier gepost?

Kopieer de code bijv. even op een stickje, en zet dat op de pc waar je nu mee werkt.

En dan kan je het hier tussen plaatsen.

pic basic code:



Jou programma.

Als je haar maar goed zit, GROETEN LAMBIEK.
Electronica is mooi als het goed werkt
Willie W

Golden Member

pic basic code:


'****************************************************************
'****************************************************************
DEVICE 16F628A                ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE              ;Alle ingangen digitaal
 
;Logische constanten
SYMBOL OFF          = 0
SYMBOL ON           = 1
 
;Algemene constanten
SYMBOL BovenGrens   = 20     ;De bovengrens waarop de rode LED aan schakelt (LDR donker)
SYMBOL OnderGrens   = 10     ;De ondergrens waarop de rode LED uit schakelt
SYMBOL Schaal       = 180     ;<<<<< DE WAARDE VAN Schaal VOOR DE POT FUNCTIE HIER INVULLEN
 
;Poortnamen
SYMBOL LDR          = PORTA.1 ;LDR aangesloten via een condensator aan GND
SYMBOL LED_Rood     = PORTA.3 ;Brandt als LDR boven een in te stellen niveau komt
 
;Variabele declareren
DIM Weerstand       AS BYTE   ;Bevat de gemeten weerstandswaarde van de LDR
 
;        76543210
PORTA = %00000000             ;Alle PORTA uitgangen uit (laag maken)
TRISA = %11110111             ;PORTA.3 omschakelen als uitgang voor de rode LED
 
CLEAR                         ;Wis alle RAM geheugen
 
;Hoofdprogramma
WHILE 1 = 1                           ;Programma continu uitvoeren
 Weerstand = POT LDR, Schaal         ;Geef nieuw gemeten waarde aan 'Weerstand
IF Weerstand <= OnderGrens THEN ;...anders, als LDR onder de ondergrens komt dan...
GOSUB WachtLDR <=  THEN
DELAYMS 5000                   ;5 sec wachten
 
LED_Rood = ON                   ;Rode LED aanzetten
DELAYMS 2000                   ;Na 2 sec rode led uit
LED_Rood = OFF                 ;Rode led uit zetten
GOSUB WachtLDR                ;Ga naar subroutine WachtLDR
 
ENDIF
 
WEND
WachtLDR:

WHILE Weerstand <= OnderGrens
Weerstand = POT LDR, Schaal    ;Geef niuuw gemeten waarde aan 'Weerstand'
WEND                           ;Zolang LDR op ondergrens zit,Herhaal de subrotine
RETURN
END                            ;Einde programma
 

Ik weet niet of dit mag maar hij staat er, als het niet mag dan graag verwijderen.

[Bericht gewijzigd door Willie W op zondag 24 april 2016 17:23:31 (11%)

Arco

Special Member

Dit lijkt me toch niet juist:

pic basic code:

GOSUB WachtLDR <= THEN
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Willie W

Golden Member

Wel vreemd, in de openingspost schrijft de TS dat het programma wel werkt.
Misschien word het 2e deel van het commando niet meer gezien.

Arco

Special Member

Op het fotootje in de startpost is de code ook anders; waarschijnlijk een gevallletje van "lost in translation"... :)
Code en commentaar kloppen trouwens ook niet. Er staat dat led aangaat als LDR boven een bepaalde waarde komt, maar die gaat juist aan als 'ie onder een bepaalde waarde komt...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
buckfast_beekeeper

Golden Member

Wat uitlijning kan zeker geen kwaad.

pic basic code:


'****************************************************************
'****************************************************************
DEVICE 16F628A                ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE              ;Alle ingangen digitaal
 
;Logische constanten
SYMBOL OFF          = 0
SYMBOL ON           = 1
 
;Algemene constanten
SYMBOL BovenGrens   = 20     ;De bovengrens waarop de rode LED aan schakelt (LDR donker)
SYMBOL OnderGrens   = 10     ;De ondergrens waarop de rode LED uit schakelt
SYMBOL Schaal       = 180     ;<<<<< DE WAARDE VAN Schaal VOOR DE POT FUNCTIE HIER INVULLEN
 
;Poortnamen
SYMBOL LDR          = PORTA.1 ;LDR aangesloten via een condensator aan GND
SYMBOL LED_Rood     = PORTA.3 ;Brandt als LDR boven een in te stellen niveau komt
 
;Variabele declareren
DIM Weerstand       AS BYTE   ;Bevat de gemeten weerstandswaarde van de LDR
 
;        76543210
PORTA = %00000000             ;Alle PORTA uitgangen uit (laag maken)
TRISA = %11110111             ;PORTA.3 omschakelen als uitgang voor de rode LED
 
CLEAR                         ;Wis alle RAM geheugen
 
;Hoofdprogramma
	WHILE 1 = 1                           ;Programma continu uitvoeren
		Weerstand = POT LDR, Schaal         ;Geef nieuw gemeten waarde aan 'Weerstand
		IF Weerstand <= OnderGrens THEN ;...anders, als LDR onder de ondergrens komt dan...
			GOSUB WachtLDR <=  THEN
			DELAYMS 5000                   ;5 sec wachten
 
			LED_Rood = ON                   ;Rode LED aanzetten
			DELAYMS 2000                   ;Na 2 sec rode led uit
			LED_Rood = OFF                 ;Rode led uit zetten
			GOSUB WachtLDR                ;Ga naar subroutine WachtLDR
		ENDIF
 
	WEND

	WachtLDR:

	        WHILE Weerstand <= OnderGrens
		     Weerstand = POT LDR, Schaal    ;Geef niuuw gemeten waarde aan 'Weerstand'
		WEND                           ;Zolang LDR op ondergrens zit,Herhaal de subrotine
	RETURN
END                            ;Einde programma

GOSUB WachtLDR komt 2 keer voor in de IF. Waarom???

Van Lambiek wordt goede geuze gemaakt.
Willie W

Golden Member

De code in het doc bestand en de geplaatste code zijn wel gelijk, de foto in het begin is anders.

Arco

Special Member

Ik denk dat zoiets de bedoeling is:

pic basic code:


'========================================================================
DEVICE 16F628A                    ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE                  ;Alle ingangen digitaal
 
SYMBOL OFF          = 0
SYMBOL ON           = 1
SYMBOL OnderGrens   = 10          ;De ondergrens waarop de rode LED uit schakelt
SYMBOL MaxCnt       = 50          ;Tijd voor LDR * 100mS
 
SYMBOL LDR          = PORTA.1     ;LDR aangesloten via een condensator aan GND
SYMBOL LED_Rood     = PORTA.3     ;Brandt als LDR boven een in te stellen niveau komt
 
DIM Weerstand       AS BYTE       ;Bevat de gemeten weerstandswaarde van de LDR
DIM Cnt             AS BYTE
 
;        76543210
PORTA = %00000000                 ;Alle PORTA uitgangen uit (laag maken)
TRISA = %11110111                 ;PORTA.3 omschakelen als uitgang voor de rode LED
 
CLEAR                             ;Wis alle RAM geheugen
 
;Hoofdprogramma
WHILE 1 = 1                       ;Programma continu uitvoeren
  DelayMs 100
  Weerstand = POT LDR, Schaal     ;Geef nieuw gemeten waarde aan weerstand
  IF Weerstand <= OnderGrens THEN ;...anders, als LDR onder de ondergrens komt dan...
    Inc (Cnt)                     ;100mS count +1  
  ELSE
    Cnt = 0                       ;Reset count
  ENDIF

  IF Cnt > MaxCnt Then            ;Max. count?
    LED_Rood = ON                 ;Rode LED aanzetten
    DELAYMS 2000                  ;Na 2 sec rode led uit
    LED_Rood = OFF                ;Rode led uit zetten
    Cnt = 0                       ;Reset count
  ENDIF
WEND
END                               ;Einde programma
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
buckfast_beekeeper

Golden Member

Ik had dit

pic basic code:


'****************************************************************
'****************************************************************
DEVICE 16F628A                ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE              ;Alle ingangen digitaal
 
;Logische constanten
SYMBOL OFF          = 0
SYMBOL ON           = 1
 
;Algemene constanten
SYMBOL BovenGrens   = 20     ;De bovengrens waarop de rode LED aan schakelt (LDR donker)
SYMBOL OnderGrens   = 10     ;De ondergrens waarop de rode LED uit schakelt
SYMBOL Schaal       = 180     ;<<<<< DE WAARDE VAN Schaal VOOR DE POT FUNCTIE HIER INVULLEN
 
;Poortnamen
SYMBOL LDR          = PORTA.1 ;LDR aangesloten via een condensator aan GND
SYMBOL LED_Rood     = PORTA.3 ;Brandt als LDR boven een in te stellen niveau komt
 
;Variabele declareren
DIM Weerstand       AS BYTE   ;Bevat de gemeten weerstandswaarde van de LDR
DIM teller				AS BYTE	; teller voor de tijd dat weerstandswaarde voldoet
 
;        76543210
PORTA = %00000000             ;Alle PORTA uitgangen uit (laag maken)
TRISA = %11110111             ;PORTA.3 omschakelen als uitgang voor de rode LED
 
CLEAR                         ;Wis alle RAM geheugen
 
;Hoofdprogramma
	WHILE 1 = 1                           ;Programma continu uitvoeren
		; Weerstand = POT LDR, Schaal         ;Geef nieuw gemeten waarde aan 'Weerstand lijkt me niet meer nodig
		IF Weerstand <= OnderGrens THEN ;...anders, als LDR onder de ondergrens komt dan...
			GOSUB WachtLDR
			; DELAYMS 5000                   ;5 sec wachten lijkt me niet meer nodig
 
			LED_Rood = ON                   ;Rode LED aanzetten
			DELAYMS 2000                   ;Na 2 sec rode led uit
			LED_Rood = OFF                 ;Rode led uit zetten
			;GOSUB WachtLDR                ;Ga naar subroutine WachtLDR staat er volgens mij te veel
		ENDIF
 
	WEND
 
	WachtLDR:

	     WHILE Weerstand <= OnderGrens AND teller < 50
			Weerstand = POT LDR, Schaal    ;Geef nieuw gemeten waarde aan 'Weerstand'
			IF Weerstand > Ondergrens THEN
				teller = teller + 1
				DELAYMS 100
			ELSE
				IF teller > 0 THEN
					teller = teller - 1
				ENDIF
			ENDIF
		WEND                           ;Zolang LDR op ondergrens zit,Herhaal de subrotine
		teller = 0					; reset de variabelen zodat het volgende keer ook goed gaat
		Weerstand = 0			; idem
	RETURN
END                            ;Einde programma
Van Lambiek wordt goede geuze gemaakt.

Excuus voor de verwarring maar ik was wat aan het experimenteren met het programma en in mijn enthousiasme bij het overzetten op CO vergeten het terug te zetten .ik ga eerst het program van Arco proberen, maar voor de goede gang van zaken het programma deed wat hij moest doen zie eerste post. De oplossing van Arco uitgeprobeerd het programma loopt vast bij regel 43 (Inc (Cnt) )

[Bericht gewijzigd door Bertjebuk op zondag 24 april 2016 20:43:44 (13%)

Electronica is mooi als het goed werkt
Arco

Special Member

Ik ken Picbasic niet, maar nam aan dat er wel iets als Inc of Incr is...
Je kunt ook gewoon Cnt = Cnt + 1 nemen.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Ik heb ook het program van bb uigeprobeerd maar daar krijg ik 6x een Error .@Arco ik kan nergens in Picbasic de opdracht Cnt vinden?

Electronica is mooi als het goed werkt
Arco

Special Member

Cnt is een variabele (byte) die wordt opgehoogd... ;)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Willie W

Golden Member

Cnt is gewoon je teller.

Welke foutmeldingen krijg je?

buckfast_beekeeper

Golden Member

PicBasic ken ik niet. Ik ga verder op mijn vroegere kennis van basic.

6 errors kunnen ook afkomstig zijn van 1 fout. Heel belangrijk om dan de volledige foutmelding te vermelden.

@arco cnt++ of inc(cnt) is er in basic niet bij.

Van Lambiek wordt goede geuze gemaakt.
Arco

Special Member

In Mikrobasic wel, hoor... ;)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

pic basic code:

inc cnt

Waarom nemen mensen niet de moeite om er achter te komen wat de spullen die ze gebruiken allemaal kunnen...:'(

Just find out what you like and let it kill you

[attachment=0]Na een uurtje programmeren is het me toch gelukt ook dank zij bb.Dit is het programma

pic basic code:

Electronica is mooi als het goed werkt