Stránka 1 z 1

mikroBasic úprava programu-kde dělám chybu?

Napsal: 16 srp 2012, 19:50
od hafca
Zkoušel jsem si upravit zdroják pro hodiny v Basicu. Chtěl jsem si mimo jiné udělat signalizaci po čtvrt hodině, ale nedaří se mi. Ve For To Next mi program nedopočítá do 4, ale jen do 2. Zkoušel jsem ještě jiné počítání, odskoky přes Goto, ale to taky nejde. Začínám mít pocit, že to program prostě nestihne.
Nenašla by se tu nějaká dobrá duše, co by mě popostrčila nebo mi řekla, že to opravdu nejde?

If Minute = 00 Or Minute = 15 Or Minute = 30 Or Minute = 45 Or Test = AAN Then GongSignal
EndIf
.
.
.
GongSignal:
If LDR = On Then ;If there is daylight or the shadedlamps are switched on, then...
Low Volume ;...Volumepin low = Volume from gong louder...
Else ;...else (is it dark in the living-room)...
Input Volume ;...Volumepin 3-state = Volume from gong softly
EndIf

DelayMS 155
If Minute = 00 Then GoSub zvon00
If Minute = 15 Then GoSub zvon15
If Minute = 30 Then GoSub zvon30
If Minute = 45 Then GoSub zvon45

SecondPulse = On
DelayMS 50
Gong1 = OFF
Gong2 = OFF
SecondPulse = OFF
DelayMS 330 ;985 - 500 - 155
Inc Second

; When using the method underneath (with time instead of LDR), then erase the LDR syntax part above
; IF Hour > 5 THEN ;Between 0:30 and 6:30 is the gong volume not loud
; LOW Volume ;Volumepin low = Volume louder
; ELSE
; INPUT Volume ;Volumepin 3-state = Volume softly
; ENDIF
GoTo Further
.
.
.
zvon00:
For go=0 To 4
Gong1 = On
DelayMS 700
Next
Return

zvon15:
Gong1 = On
Return

zvon30:
For go = 0 To 2
Gong1 = On
DelayMS 700
Next
Return

zvon45:
For go = 0 To 3
Gong1 = On
DelayMS 700
Next
Return
.
.
.

Napsal: 16 srp 2012, 20:43
od ivanko18
ako mas definovane DIM pre go ?

Napsal: 16 srp 2012, 20:57
od hafca
Opsal jsem to podle jiných deklarací v programu.

Kód: Vybrat vše

Dim go As Byte

Napsal: 16 srp 2012, 21:29
od ivanko18
If Minute = 00 Or Minute = 15 Or Minute = 30 Or Minute = 45 Or Test = AAN Then GongSignal

problem bude asi tu
skus to rozpisat
If Minute = 00 Or Test = AAN Then GongSignal
If Minute = 15 Or Test = AAN Then GongSignal
If Minute = 30 Or Test = AAN Then GongSignal
If Minute = 45 Or Test = AAN Then GongSignal

ps:s PIC nepracujem a picbasic nepoznam

Napsal: 16 srp 2012, 21:36
od hafca
Tahle část funguje, program zavolá podprogramy správně. Nejde to počítání.

Napsal: 16 srp 2012, 21:54
od ivanko18
DelayMS 155
If Minute = 00 Then GoSub zvon00
If Minute = 15 Then GoSub zvon15
If Minute = 30 Then GoSub zvon30
If Minute = 45 Then GoSub zvon45


nechyba ukoncenie

DelayMS 155
If Minute = 00 Then GoSub zvon00
If Minute = 15 Then GoSub zvon15
If Minute = 30 Then GoSub zvon30
If Minute = 45 Then GoSub zvon45
EndIf


alebo takto

DelayMS 155
If Minute = 00 Then GoSub zvon00
EndIf
If Minute = 15 Then GoSub zvon15
EndIf
If Minute = 30 Then GoSub zvon30
EndIf
If Minute = 45 Then GoSub zvon45
EndIf

Napsal: 16 srp 2012, 22:09
od hafca
To jsem tam zkoušel, ale překladač hází při kompilaci chybu.

Napsal: 16 srp 2012, 22:13
od ivanko18
tak potom neviem....

Napsal: 16 srp 2012, 22:29
od Andrea
Jak víš, že ti to napočítá jen do 2? A nemáš ty počty nějaké divné? Při 15 nemáš nic, při 30 máš 2100 ms, při 45 máš 2800 ms a při 00 máš 3500 ms. A neutečou ti tři sekundy, když se tam šmrdláš 3,5 sekundy v podprogramu?

Napsal: 16 srp 2012, 22:54
od hafca
Jak to vím? Spouští to pípák z SA0800 a ten by měl podle mého přání pípnout při 15 minátách 1x, při 30 2x, při 45 3x a při celé 4x. Taková byla moje idea, ale zatím mi pípne max. 2x, bez ohledu na to, kolik minut je. Správně pípá jen ve 1/4 a v 1/2. Měl jsem za to, že se spustí podprogram, pošle impuls na PORTA.2, zazní tón a aby stačil zaznít je tam to čekání, smyčka začne znovu atd.. Při 1/4 stačí jen ten jeden impuls a to čekání je o kousek níž. Teď vidím, že mi tam vypadla jedna 0, ale na to počítání vliv nemá.
Myslel jsem si, že při splněné podmínce zavolám podprogram, ten proběhne, vrátí se odkud byl zavolán a všechno pokračuje dál.
Asi to tady bude o něco složitější než když jsem kdysi psal programy v Basicu pro Atari. Navíc jsem toho z Basicu od té doby dost zapoměl, tedy spíš skoro všechno. :cry: Proto tady loudím moudra. :wink:

Napsal: 16 srp 2012, 23:04
od Andrea
Podle mě příkaz Gong1 = On neposílá žádný impuls, ale nastaví ho na 1 a tam zůstane, dokud ho někde jinde nedáš do 0 a to děláš až po návratu ze zvonXX, takže ti ten pípák bude celou tu dobu zpoždění kontinuálně pískat, žádné přerušování.
Mimochodem, celej ten program je pěkně hnusnej.

Napsal: 16 srp 2012, 23:21
od hafca
Já to nepsal, jen našel a posoudit to moc nedokážu. Mě se na tom líbilo to DCF a možnost úpravy v tom zdrojáku. To jsem ale netušil, že to bude takovej oříšek.
S tou 1 máš pravdu. Ten pípák když vyndám PIC a na vývod od PORTA.2 přivedu + pípá nepřetržitě. Budu to tedy v každém cyklu muset shodit na 0 tím Gong Off, jestli se nepletu.

Děkuji za nakopnutí a přeji dobrou noc.