Sygnalizator hamowania


Witam wszystkich, na początku zaznaczam że nie mam praktyczne żadnego doświadczenia w programowaniu w Bascomie, lecz kiedyś trzeba zacząć.Chciałbym stworzyć kod źródłowy który miałby za zadanie sygnalizować hamowanie w wózku elektrycznym w momencie kiedy prędkość zacznie się zmniejszać od aktualnie wskazywanej.A dokładnie światła stop ( portc.0 ) mają być wyłączone kiedy prędkość jest stała lub zwiększa się i jest większa od zera a załączone są kiedy prędkość jest równa zero lub zaczyna spadać od aktualnie wykonywanej.Poniżej zamieszczam program licznika prędkości który udało mi się sklecić do którego prosiłbym o pomoc w napisaniu warunku który spełniałby powyższe wymagania.

$regfile = "m32def.dat"
$crystal = 16000000
 
Config Portc.0 = Output
Config Portc.1 = Output
Config Portb.1 = Input
Set Portb.1
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.0 , Rs = Portb.2
Config Lcd = 16 * 2
Cursor Off
 
Dim Wynik As Long
 
Config Timer1 = Counter , Edge = Rising
 
Cls : Lcd " Obrotomierz" : Wait 1
 
Do
Timer1 = 0
Start Timer1
Waitms 500
Stop Timer1
 
Wynik = Timer1
 
If Timer1 > 1 Then Set Portc.0 Else Reset Portc.0
 
 
 
Cls
Lcd " + Obrotomieerz +"
Lowerline
 
Lcd "W: " ; Wynik ; " obr/min"
Loop
 
End




Portret użytkownika mirley

Hamowanie

Problem wydaje się prosty koncepcyjnie....

Dim Pwynik as Word
 
....
 
 
Pwynik = Wynik
Wynik = Counter1       'tutaj powinno być counter a nie timer ale być może bascom sobie z tym radzi
'po obliczeniu wyniku
 
If Pwynik > Wynik then Set Portc.0 Else Reset Portc.0

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika arczi1971

Hamowanie

A co powiesz na te rozwiązanie.

$regfile = "m32def.dat"
$crystal = 16000000
 
Config Portc.0 = Output
Config Portc.1 = Output
Config Portb.1 = Input
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.0 , Rs = Portb.2
Config Lcd = 16 * 2
Cursor Off
 
Dim D_v As Long
Dim V_old As Long
Dim Wynik As Long
Const Stop_d_v = 10
 
Config Timer1 = Counter , Edge = Rising
 
Cls : Lcd " SYG. HAMOWANIA" : Wait 1
 
Do
Timer1 = 0
Start Timer1
Waitms 500
Stop Timer1
Wynik = Timer1
 
 
 Cls
Lcd " ++  ++"
Lowerline
 
Lcd "W: " ; Wynik ; " obr/min"
 
 
 If Wynik > 10 Then
      Reset Portc.0
 
Else
      Reset Portc.0
 
      End If
 
 
If Wynik >= V_old Then
     V_old = Wynik
     Set Portc.1
 
Else
     D_v = V_old - Wynik
If D_v > Stop_d_v Then
     Reset Portc.1
     V_old = Wynik
       End If
 
 
 
End If
Loop
 
End

Portret użytkownika arczi1971

Hamowanie

Mam jeszcze jeden problem który nie wiem jak ugryźć, a mianowicie chciałbym aby w momencie zliczania kiedy

Wynnik > 10

załączył się klakson ( Reset Portc.0 ) tylko na określony czas a kolejne załączenie mogłoby nastąpić dopiero po spadku prędkości do zera. Potrzebuję to aby sygnalizować klaksonem każde uruchomienie urządzenia. Bardzo proszę o jakieś sugestie.

Portret użytkownika Grzeniu 73

masz prosty program ,zrób set

masz prosty program ,zrób set buz,wait 100 ms,reset buz.Da ci to króciutki sygnał. Chyba nie zaburzy ci to mierzenia prędkości.Innym sposobem zrobienia takiego urzadzonka to akcelerometr.Za 30 zl masz kompletny moduł.Fajna zabawka.Gdzieś w necie jest kompletny listing.To tylko kilka linijek kodu.

Portret użytkownika mirley

Re: Hamowanie

Jak masz tak prosty program to zrób poprostu tak:

if Wynik > 10 and buzz_ena = 1 then 
 Reset Portc.0
 waitms 100ms
 Set Portc.0
 Reset buzz_ena
else
 if Wynik = 0 then set buzz_ena
End if

pomijając to uważam że powinieneś wykorzystać timer 0 do liczenia czasu pomiaru i nie zatrzymywać żadnego z liczników tylko cyklicznie czytać impulsy. W programie nie powinno być żadnego waita więc w praktyce to powinno byc we fladze 100ms w pętli głównej a flaga powinna się ustawić w timerze co 100ms.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.