Witam,
miałem na zaliczenie zrobić jakiś projekt z wykorzystaniem mikrokontrolera AVR, jako ze miałem tak mało czasu jak doświadczenia to zrobiłem działający projekt ze strony
Link
wszystko było ok, gdyby nie fakt ze wykładowca stwierdził żebym nie programował w BASCOM-ie tylko za pomocą C++ i taki właśnie postawił warunek na zaliczenie; bym ten sam kod napisał w c++.... No i się zaczęły schody bo BASCOM-a az tak dobrze nie znam, a raczej bardzo mało.
Jeśli Ktoś z szanownego grona był by tak uprzejmy pomóc i przepisać ten kod do języka C++ to był bym bardzo wdzięczny. Mogę w zamian podarować wszystkie punkty jakie mam, jeśli ktoś był by zainteresowany; chociaż nie posiadam ich za wiele :/ Mogę również zapłacić za poświęcony czas i prace.
Kod nie musi być wierną kopią do C++ kodu z Bascoma, ma tylko to samo robić w efekcie końcowym.
Dla czytelności postanowiłem dodać kod z BASCOM-a:
miałem na zaliczenie zrobić jakiś projekt z wykorzystaniem mikrokontrolera AVR, jako ze miałem tak mało czasu jak doświadczenia to zrobiłem działający projekt ze strony
Link
wszystko było ok, gdyby nie fakt ze wykładowca stwierdził żebym nie programował w BASCOM-ie tylko za pomocą C++ i taki właśnie postawił warunek na zaliczenie; bym ten sam kod napisał w c++.... No i się zaczęły schody bo BASCOM-a az tak dobrze nie znam, a raczej bardzo mało.
Jeśli Ktoś z szanownego grona był by tak uprzejmy pomóc i przepisać ten kod do języka C++ to był bym bardzo wdzięczny. Mogę w zamian podarować wszystkie punkty jakie mam, jeśli ktoś był by zainteresowany; chociaż nie posiadam ich za wiele :/ Mogę również zapłacić za poświęcony czas i prace.
Kod nie musi być wierną kopią do C++ kodu z Bascoma, ma tylko to samo robić w efekcie końcowym.
Dla czytelności postanowiłem dodać kod z BASCOM-a:
'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 16000000
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B00000000 : Portd = &B11111111
Config Timer0 = Timer , Prescale = 8
Enable Timer0 : On Timer0 Prztimer0
Enable Interrupts
'********** Konfiguracja uC Koniec ************
'****************** Nazwy *******************
'***********************************************
Rd Alias Portb.0
Gd Alias Portb.1
Bd Alias Portb.2
Rd2 Alias Portb.3
Gd2 Alias Portb.4
Bd2 Alias Portb.5
Syg_led Alias Portb.7
Sw_port Alias Pind
'************* Nazwy Koniec ****************
'****************** Zmienne *******************
'***********************************************
Dim Licznik As Byte
Dim Rled As Byte , Bled As Byte , Gled As Byte
Dim Rand_r As Byte , Rand_g As Byte , Rand_b As Byte
Dim Pomoc As Byte
Dim Flaga As Bit
Dim Dzielnik As Word
Dim Dzielnik2 As Byte
Dim Dzielnik3 As Byte
Dim Szybkosc As Byte
Dim Licznik_sw As Byte
Dim Stan_portu As Byte
Dim Arg As Word
Dim Wartosc As Word
Dim Pozycja As Word
Dim Stopbit As Bit
Dim Animacja As Byte
'************* Zmienne Koniec ****************
'************ Warunki Poczatkowe ***************
'***********************************************
Pozycja = 0
Dzielnik2 = 0
Szybkosc = 10
Stopbit = 1
Animacja = 0
'******* Warunki Poczatkowe Koniec ***********
'************** Petla glowna ******************
'***********************************************
Do
If Flaga = 1 Then 'co 32ms
Flaga = 0
Gosub Przyciski
Incr Dzielnik2
If Dzielnik2 >= Szybkosc And Stopbit = 1 Then
Dzielnik2 = 0
Syg_led = Not Syg_led
'pierwszy tryb - przejscia plynne ustalone
If Animacja = 0 Then
Incr Pozycja
If Pozycja = 900 Then Pozycja = 0
Gosub Pozycja_do_rgb
End If
'drugi tryb - losowe przejscia
If Animacja = 1 Then
Incr Pozycja
If Pozycja >= 50 Then
Pozycja = 0
Rand_r = Rnd(3)
Rand_g = Rnd(3)
Rand_b = Rnd(3)
End If
If Rand_r = 1 Then If Rled < 100 Then Incr Rled
If Rand_r = 2 Then If Rled > 0 Then Decr Rled
If Rand_g = 1 Then If Gled < 100 Then Incr Gled
If Rand_g = 2 Then If Gled > 0 Then Decr Gled
If Rand_b = 1 Then If Bled < 100 Then Incr Bled
If Rand_b = 2 Then If Bled > 0 Then Decr Bled
End If
'trzeci tryb - losowy kolor
If Animacja = 2 Then
Pozycja = Rnd(900)
Gosub Pozycja_do_rgb
End If
End If
End If
Loop
End
'************ Petla glowna Koniec **************
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:
Incr Licznik
If Licznik = 100 Then Licznik = 0
If Licznik < Rled Then
Reset Rd
Reset Rd2
Else
Set Rd
Set Rd2
End If
If Licznik < Gled Then
Reset Gd
Reset Gd2
Else
Set Gd
Set Gd2
End If
If Licznik < Bled Then
Reset Bd
Reset Bd2
Else
Set Bd
Set Bd2
End If
Incr Dzielnik
If Dzielnik = 250 Then
Dzielnik = 0
Set Flaga
End If
Return
'******** Przerwanie timer 0 Koniec ************
'************ Inne Etykiety ***************
'***********************************************
Przelicz: 'funkcja \_ _ _ _/^^^
If Arg > 899 Then Arg = Arg - 900
If Arg > 100 And Arg < 500 Then Wartosc = 0
If Arg <= 100 Then Wartosc = 100 - Arg
If Arg >= 500 And Arg <= 600 Then Wartosc = Arg - 500
If Arg > 600 Then Wartosc = 100
Return
Pozycja_do_rgb:
Arg = Pozycja
Gosub Przelicz
Rled = Wartosc
Arg = Pozycja + 300
Gosub Przelicz
Gled = Wartosc
Arg = Pozycja + 600
Gosub Przelicz
Bled = Wartosc
Return
Przyciski:
If Sw_port <> 255 And Stan_portu = Sw_port Then
Incr Licznik_sw
If Licznik_sw = 10 Then
Select Case Stan_portu
Case 126: 'plus
Licznik_sw = 5
If Szybkosc > 1 Then Decr Szybkosc
Case 125: 'minus
Licznik_sw = 5
If Szybkosc < 40 Then Incr Szybkosc
Case 124: 'plus i minus
Stopbit = Not Stopbit
Syg_led = 1
Case 111: ' R
Pozycja = 700
Gosub Pozycja_do_rgb
Case 119: ' G
Pozycja = 400
Gosub Pozycja_do_rgb
Case 123: ' B
Pozycja = 100
Gosub Pozycja_do_rgb
Case 110: 'plus R
Licznik_sw = 8
If Rled < 100 Then Incr Rled
Case 109: 'minus R
Licznik_sw = 8
If Rled > 0 Then Decr Rled
Case 118: 'plus G
Licznik_sw = 8
If Gled < 100 Then Incr Gled
Case 117: 'minus G
Licznik_sw = 8
If Gled > 0 Then Decr Gled
Case 122: 'plus B
Licznik_sw = 8
If Bled < 100 Then Incr Bled
Case 121: 'minus B
Licznik_sw = 8
If Bled > 0 Then Decr Bled
Case 103: ' R G
Rled = 100
Gled = 100
Bled = 0
Case 115: ' G B
Rled = 0
Gled = 100
Bled = 100
Case 107: ' R B
Rled = 100
Gled = 0
Bled = 100
Case 99: ' R G B
Rled = 100
Gled = 100
Bled = 100
Case 108: ' plus minus R
Animacja = 0
Case 116: ' plus minus G
Animacja = 1
Case 120: ' plis minus B
Animacja = 2
End Select
End If
Else
Stan_portu = Sw_port
Licznik_sw = 4
End If
Return
'******** Inne Etykiety Koniec ************