logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Kod Bascom, zanik impulsu, buzzer piszczy, czego brakuje?

IMEX 21 Mar 2010 00:21 2004 2
  • #1 7859151
    IMEX
    Poziom 20  
    Mam taki problem że po zaniku w kodzie impulsu nadam piszczy mi buzer - wszystko wyjaśni poniższy kod który jest na 100% poprawny ale i tak czegoś brakuje a i skończyły mi się pomysły

      'alarm P
      If T(1) >= T_alarm Then
      If Buzz_en = 1 Then Led_a = Not Led_a Else Led_a = 1
      if Buzz_en = 1 then buzz = not buzz else buzz = 1
       Else
        Led_a = 1
       Czujnik(1) = T_alarm - 1
       If T(1) <= Czujnik(1) Then Buzz_en = 1
      End If
    
    
        'alarm B
      if T(2) >= T_alarm1 Then
      If Buzz_en = 1 Then Led_a1 = Not Led_a1 Else Led_a1 = 1
      if Buzz_en = 1 then buzz = not buzz else buzz = 1
       Else
        Led_a1 = 1
        Czujnik(2) = T_alarm1 - 1
        If T(2) <= Czujnik(2) Then Buzz_en = 1
      End If


    Buzz - to wyjście na buzer
    załączanie buzera jest pobierane od załączanych diod Led_a i Led_a1 które migają po osięgnięciu odpowiednich temperatur

    temp wzrasta załącza się dioda a co za tym idzie i buzer - temp maleje poniżej zadanej - dioda zawsze gaśnie a buzer czasami piszczy nadal i tu jest własnie problem do rozwiązania
  • #2 7859285
    Belialek
    Poziom 22  
    Czy buzzer jest z generatorem? Jeżeli nie jest, to należy go sterować z odpowiednią częstotliwością - można to zrobić na kilka sposobów:

    1) Zapozać się z poleceniem SOUND, np
    SOUND Port_buzzera, ilosc_impulsow, ilosc powtorzen

    Odpowiednio dobierając wartości parametrów możesz uzyskać dźwięk o dowolnym tonie i długości (parametry różnie działają na otrzymany dźwięk w zależności od częstotliwości taktowania procesora)

    2) Włączając buzzer okresowo - np w pętli:
    
    For I = 1 to 1000
    Toggle  Buzz
    Waitms 5
    Next I
    


    Druga (w zasadzie ważniejsza) sprawa:

    IMEX napisał:
    wszystko wyjaśni poniższy kod który jest na 100% poprawny


    Konstrukcja If-Then-Else wygląda następująco:
    If X = 0 Then
         Y = 1
    Else
         Y = 0
    End If

    End If ma być po każdym warunku - i dotyczy to również warunków zagnieżdżonych. Policz ile masz rozpoczętych warunków, a ile razy użyłeś End If :)

    Ponadto zamiast pisać tak:
    if Buzz_en = 1 then buzz = not buzz else buzz = 1

    można zmienne typu Bit (a takimi jak zapewne wiesz są porty sterujące procesora - nie licząc paru wyjątków) zmieniać instrukcją Toggle (np. Toggle buzz) - niby to samo, ale poprawia to czytelność kodu.

    No i ostatnia rada - pisząc programy w jakimkolwiek języku staraj się dbać o czytelność kodu - w szczególności pamiętaj o stosowaniu wcięć w warunkach oraz pętlach.

    Powodzenia!
  • #3 7880092
    arktik1
    Poziom 27  
    Daj cały kod to coś może wymyślimy.
REKLAMA