Hallo,
Ik ben bezig met het programmeren van een PIC voor het sturen van mijn rolluiken.
Ik heb een drukknop op portA.0 en een relais( via een transistor ) op portB.0.
Nu wil ik als je de drukknop indrukt, dat de relais aantrekt, totdat je de drukknop loslaat. Druk je langer dan 5 seconde op deze drukknop dan wil ik een puls van 30 seconde hebben.
Kan iemand me helpen met deze basic file.
Thanks
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Topictitel is niet erg gelukkig gekozen...
In pseudocode:
While True '
While keyswitch = 0 : Wend 'Wait on key press
Relay = 1 'Pressed, pull relay
For i = 0 to 100 'Wait 5 sec or until
delay_ms(50) 'key released if sooner
If keyswitch = 0 Then Break 'Exit on release
Next i '
If i >= 100 Then delay_ms(25000) 'Keypress was 5 sec, wait
Relay = 0 'Relay off
While keyswitch = 1 : Wend 'Wait on key release
Wend '
[Bericht gewijzigd door Arco op (42%)]
Hallo,
Ik heb dit programma is geprobeerd,
het blijkt toch niet volledig te werken zoals ik het wou.
Nu wil ik als je de drukknop indrukt, dat de relais aantrekt, totdat je de drukknop loslaat. Druk je langer dan 5 seconde op deze drukknop (Of indien je een 2 de keer op deze knop drukt) dan wil ik een puls van 30 seconde hebben. Kan iemand me helpen met deze basic file.
Thanks
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Doet wel wat je vroeg. Bij langer als 5 sec. wordt er 25 sec. bij opgeteld, dus totaal 30 seconden...
Druk je langer dan 5 seconde op deze drukknop (Of indien je een 2 de keer op deze knop drukt)
Wazige omschrijving. Hoe moet die pic weten of het een tweede keer drukken of een nieuwe poging is?
Kan je deze basic file is nakijken voor me?
De compiler geeft nog aan dat er fouten zijn.
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2015 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 13/08/2015 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
DEVICE 16F628A ;We gebruiken een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
;Logische constanten
SYMBOL AAN = 0 ;Geinverteerd AAN
SYMBOL OFF = 0 ;UIT
SYMBOL ON = 1 ;AAN
SYMBOL UIT = 1 ;Geinverteerd UIT
;Poortnamen
SYMBOL relay = PORTA.0
symbol keyswitch = portb.0
;Variabele declareren
DIM i AS BYTE ;Byte variabele met naam 'Teller'
; 76543210
PORTA = %00000000 ;Alle PORTA uitgangen uitzetten (laag maken)
TRISA = %11111000 ;PORTA.2, A.1 en A.0 omschakelen als uitgang voor de LED's
PORTB_PULLUPS ON ;On-chip pull-up weerstanden actief (voor S1)toggle led1 delayms 1000
CLEAR ;Wis alle RAM geheugen
While True '
While keyswitch = 0 : Wend 'Wait on key press
Relay = 1 'Pressed, pull relay
For i = 0 to 100 'Wait 5 sec or until
delay_ms(50) 'key released if sooner
If keyswitch = 0 Then Break 'Exit on release
Next i '
If i >= 100 Then delay_ms(25000) 'Keypress was 5 sec, wait
Relay = 0 'Relay off
While keyswitch = 1 : Wend 'Wait on key release
Wend '
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Dan moet je '0' en '1' bij keyswitch uiteraard omdraaien. (verder geen ervaring met picbasic, dus exacte syntax weet ik ook niet)
Een paar code-tags (
) helpt wel om de code leesbaar te houden.
hadv
Just find out what you like and let it kill you
"PortB_Pullups On"
moet zijn
"Declare PortB_Pullups On"
"While True" bestaat op deze manier niet in PicBasic.
Als je "True" wilt gebruiken op deze plek moet het een Symbol zijn.
De volgende Symbols zijn een typisch voorbeeld van een PicBasic.nl programma.
"Symbol AAN = 0 ;Geinverteerd AAN
Symbol OFF = 0 ;UIT
Symbol On = 1 ;AAN
Symbol UIT = 1 ;Geinverteerd UIT"
Ze worden overigens in het programma niet gebruikt, dus dat geeft verder niet.
Maar het zijn wel ontzettend slechte symbols.
"Aan" en "Uit" zijn in de natuurlijke taal verbonden met 1 en 0.
Idem voor "On" en "Off"
Als je per sé zoiets nodig hebt gebruik dan "Hoog" en "Laag" of, nog beter, houdt het bij 0 en 1.
Nog meer 'sporen' van PicBasic.nl kun je in het commentaar vinden:
DEVICE 16F628A ;We gebruiken een 16F628A type
ALL_DIGITAL TRUE ;Alle ingangen digitaal
CLEAR ;Wis alle RAM geheugen
Deze documentatie is volstrekt zinloos omdat het niets toevoegt.
Het probleem met dit soort klakkeloze commentaren is dat, bij wijziging, ze vaak worden vergeten.
Vb : "Declare Hserial_Baud = 9600 ' Set baud rate to 4800"
Laat ik voor de duidelijkheid even vermelden dat ik NIETS tegen de site PicBasic.nl heb, integendeel, het zal heel wat beginnende programmeurs hebben geholpen.
@Arco: bij pullups is de default 1, dus een test op 0 is goed.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik gebruik voor de duidelijkheid meestal 'On' en 'Off' voor On=1 en Off=0, en '_On' en '_Off' voor On=0 en Off=1...
Heren,
Ik snap dat de eisen nog vrij summier zijn. Tenslotte is dit het begin van een stukje programmering.
Echter zou ik je eisen pakket zo snel mogelijk bij stellen naar wat veiligere sferen. Reden is dat je straks misschien moeite hebt om je bestaande code weg te gooien omdat het niet meer past bij je nieuwe eisen.
Ik weet dat vele merken rolluiken vaak interne beveiliging hebben, maar ik denk toch dat de topic starter iets verder uit zijn box moet gaan denken..
Wat als, iemand de knop ingedrukt blijft houden?
Wat als er op de knop 6 seconden gedrukt wordt en na enkele seconden wederom gedrukt wordt, extra 30 seconden of bedoeld als toch een stop actie?
Er zullen twee knoppen zijn, een voor omhoog en een voor omlaag, wat als de rolluik naar boven gaat en er wordt op de knop naar beneden gedrukt? Ondanks dat de rolluik op zijn eind punt aangekomen is wilt nog niet zeggen dat jouw 30 seconden voorbij zijn en je relais uit geschakeld is.
De resolutie is erg belangrijk, als ik na 3,1 sec loslaat zou ik toch willen dat de rolluik gelijk stopt, en niet nog 0,5 seconden doorloopt. Is vaak toch 10cm beweging. Als ik merk dat de rolluik naar beneden moet i.p.v naar boven na foutive druk op de knop, wil ik direct dat na een extra druk of een druk in de tegenovergestelde richting de rolluik gelijk stopt of/en van richting veranderd.
Maak code aan die rekening houdt met meerdere toetsen, waarbij er maar een toets tegelijk mag werken ( heb je kinderen ).
Probeer interupts te begrijpen. Het is te doen zonder interupts maar kost veel meer moeite.
Hoop dat je mijn rationale begrijpt.
Succes
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Wat als er op de knop 6 seconden gedrukt wordt en na enkele seconden wederom gedrukt wordt, extra 30 seconden of bedoeld als toch een stop actie?
TS heeft het helemaal niet over een 'stop actie'. Code doet alleen wat 'ie vraagt. (bij drukken na 6 sec gebeurt er niets)
Wellicht zijn er betere oplossingen, maar zolang we niet weten wat TS wil bereiken, kunnen we alleen maar gissen.
(zo'n simpel stukje code is trouwens ook zonder interrupts prima te doen...)
Op 15 augustus 2015 22:02:39 schreef Arco:
[...]
TS heeft het helemaal niet over een 'stop actie'. Code doet alleen wat 'ie vraagt. (bij drukken na 6 sec gebeurt er niets)
Wellicht zijn er betere oplossingen, maar zolang we niet weten wat TS wil bereiken, kunnen we alleen maar gissen.
(zo'n simpel stukje code is trouwens ook zonder interrupts prima te doen...)
Klopt, code doet wat er gevraagd wordt. Niets mis mee. Maar het ging niet om de geleverde code.
Ging om de TS dat er meer uit te halen is.
Regelmatig zijn er van die topics waarbij iemand doodgegooid wordt met "veiligheden" die in acht genomen moet worden en nu hier kan dat niet?