Stap 9: Code
Wanneer u uw Atmega programmeert, moet u ook JTAG uitschakelen in de fusebits en de interne oscillator ingesteld op 8MHz.
De code zal passen in een Atmega16 maar ik gebruikte een Atmega32 als ik wil later toe te voegen sommige extra functies.
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600
Config Serialin = gebufferde, grootte = 255
Config Serialout = gebufferde, grootte = 100
Config Graphlcd = 240 * 128, Dataport = Porta, Controlport = Portc, Ce = 5, Cd = 4, Wr = 7, Rd = 6, Reset = 2, Fs = 3, Mode = 8
Config Scl = Portc.0
Config Sda = Portc.1
Cha Alias Pind.3
ChB mailalias Pind.4
Config Cha = Input
Config Chb = Input
Const Ds1307w = & HD0 ' schrijven DS1307
Const Ds1307r = & HD1 ' ds1307 lezen
Const Adsecs = & H00 ' adres seconds
Const Admins = & H01 ' adres minuten
Dim Count As Byte
Dim I As Byte
Dim J As Byte
Dim Pos As Byte
Dim Oldpos As Byte
Dim Maxpos As Byte
Dim staat als Byte
Dim Volume As Byte
Dim Temp As Byte
Dim Uart_in As Byte
Dim Uart_buffer As Byte
Dim uren als Byte
Dim Mins As Byte
Dim Secs As Byte
Dim lengte As Byte
Dim Boxx As Byte
Dim Boxx2 As Byte
Dim Tube(4) As Byte
Dim X As Byte
Dim Uart_in_str As String * 255
Dim Stationname As String * 60
Dim Title As String * 60
Dim Station_pos As Byte
Dim Title_pos As Byte
Dim aanwijzer As Byte
Dim Station_length As Byte
Dim Title_length As Byte
Dim Temp_str As String * 4
Dim Volumestr As String * 3
Dim Station(20) As String * 30
Op Int0 0int
Int0 inschakelen
Inschakelen Interrupts
' Instellen van de Chohung Bank
Op Int1 1int,
Int1 inschakelen
Inschakelen Interrupts
Wacht 1
CLS
Init:
Showpic 0, 0, Intro
Vak (115, 90)-(200, 104), 255
Voor I = 118 tot 194 stap 4
J = I + 3
Boxfill (i), 92 - j, 102, 255
Wacht 3
Volgende
Chr(13) afdrukken
Wacht 2
Afdrukken "mpc duidelijk"
Voor I = 0 tot en met 3
Stationname = Lookupstr (i, Tunerlist2)
Afdrukken "mpc toevoegen"; Stationname
Volgende
Print "mpc volume 50"
Print "mpc play"
Volume = 20
GOSUB Empty_buffer
Ik = 1
Count = 1
Hoofdpodium:
Staat = I
CLS
Als State = 1 Then Goto Radio
Als State = 2 Then Goto Tuning
Als State = 3 dan Goto Vol
Als State = 4 dan Goto Setup
Radio:
Maxpos = 6
POS = 1
Oldpos = 1
Boxx = 0
Boxx2 = 40
Showpic 0, 88, spelen
Showpic 40, 88, pauze
Showpic 80, 88, Stopp
Showpic 120, 88, Volume
Showpic 160, 88, Tuner
Showpic 200, 88, klok
Vak (0, 88)-(40, 127), 255
Doen
Als ik <> staat vervolgens Goto Main
Als Pos Oldpos dan <>
Vak (boxx, 88)-(boxx2, 127), 0
Boxx = Pos - 1
Boxx Boxx = * 40
Boxx2 = Boxx + 40
Vak (boxx, 88)-(boxx2, 127), 255
Oldpos = Pos
End If
Afdrukken "echo"; Chr(34); "submenu"; Chr(34); " | NC localhost 6600 | grep -e ";" Chr(34); "^ Titel:"; Chr(34); " -e " ; Chr(34); "^ Naam:"; Chr(34); ">/dev/tts/0"; Chr(13)
Waitms 500
GOSUB Getuart
GOSUB Parser
CLS tekst
Zoek 5, 1
LCD Stationname
Zoek 8, 1
LCD titel
GOSUB Readclock
Loop
Tuning:
CLS
Count = 1
Doen
CLS tekst
Als ik <> staat vervolgens Goto Main
GOSUB Readclock
For J = 1 tot en met 4
Station(j) = Lookupstr (j, Tunerlist)
Volgende
J = aantal
Zoek 5, 5
LCD Station(j)
J = Count + 1
Zoek 6, 5
LCD Station(j)
J = Count + 2
Zoek 7, 5
LCD Station(j)
Waitms 500
Loop
Vol:
CLS
Doen
GOSUB Readclock
Als ik <> staat vervolgens Goto Main
Afdrukken "echo"; Chr(34); "status"; Chr(34); " | NC localhost 6600 | grep -e ";" Chr(34); "^ volume:"; Chr(34); ">/dev/tts/0"; Chr(13)
Waitms 100
GOSUB Getuart
GOSUB Volumeparser
CLS tekst
Zoek 6, 10
Volume = Val(volumestr)
LCD "Volume:"; Volume
Loop
Setup:
J = 1
Als J = 1 dan Count = uur anders Count = minuten
CLS
Doen
CLS
Als ik <> staat vervolgens Goto Main
' Gosub Readclock
Als J = 1 dan uren = anders Mins Count = Count
Tube(2) = min / 10 ' splitst de uren en minuten in
Temp = Tube(2) * 10 ' 4 cijfers zodat dat het kan worden weergegeven
Tube(1) = minuten - Temp
Tube(4) = uur / 10
Temp = Tube(4) * 10
Tube(3) = uren - Temp
Temp = Tube(4)
X = 48
GOSUB Clockpic
Temp = Tube(3)
X = 72
GOSUB Clockpic
Temp = 11
X = 96
GOSUB Clockpic
Temp = Tube(2)
X = 120
GOSUB Clockpic
Temp = Tube(1)
X = 144
GOSUB Clockpic
Zoek 8, 8
LCD ik
Waitms 100
Loop
Einde
0int:
Als ik = 1 en Pos = 1 dan Print "mpc play"
Als ik = 1 en Pos = 2 vervolgens afdrukken "mpc pauze"
Als ik = 1 en Pos = 3 vervolgens afdrukken "mpc stop"
Als ik = 1 en Pos = 4 dan ben ik = 3
Als ik = 1 en Pos = 6 dan ben ik = 4
Als State = 2 Then
Print "mpc play"; Graaf
Ik = 1
End If
Als ik = 1 en Pos = 5 dan I = 2
Waitms 100
Als State = 3 dan ben ik = 1
Als ik = 4 en J = 2 Then
GOSUB Setclock
Ik = 1
End If
Als ik = 4 en J = 1 Then
GOSUB Setclock
J = 2
End If
Terugkeer
1int:
Waitms 1
Als Cha = 1 en ik vervolgens <> 3
Als Chb = 0 dan Incr tellen anders Decr graaf
End If
Als Cha = 1 en ik vervolgens 3 =
Als Chb = 0 dan Print "mpc volume + 5" anders Print "mpc volume -5"
End If
POS = aantal
Als Pos > Pos Maxpos dan = Maxpos
Als Pos < 1 dan Pos = 1
Terugkeer
Getuart:
Uart_in_str = ""
Doen
Uart_buffer = Ischarwaiting()
Als Uart_buffer > 0 Then
Uart_in = Inkey()
Als Len(uart_in_str) < 254 dan Uart_in_str = Uart_in_str + Chr(uart_in)
Als Len(uart_in_str) = 254 dan Uart_in_str = Uart_in_str + Chr(13)
End If
Lus tot Uart_buffer = 0
GOSUB Empty_buffer
Terugkeer
Volumeparser:
Volumestr = ""
Temp = Instr (uart_in_str, "volume:")
Temp Temp + 8 =
Volumestr = Mid (uart_in_str, Temp, 3)
Terugkeer
Parser:
Stationname = ""
Titel = ""
Station_pos = Instr (uart_in_str, "naam:")
Title_pos = Instr (uart_in_str, "Titel:")
Station_pos = Station_pos + 6
Lengte = 0
Doen
INCR lengte
Aanwijzer = Station_pos + lengte
Temp_str = Mid (uart_in_str, Pointer, 1)
Lus tot Temp_str = Chr(13) of Temp_str = ""
Als lengte > 60 dan lengte = 60
Stationname = Mid (uart_in_str, Station_pos, lengte)
Title_pos = Title_pos + 7
Lengte = 0
Doen
INCR lengte
Aanwijzer = Title_pos + lengte
Temp_str = Mid (uart_in_str, Pointer, 1)
Lus tot Temp_str = Chr(13) of Temp_str = ""
Als lengte > 60 dan lengte = 60
Titel = Mid (uart_in_str, Title_pos, lengte)
Als Station_pos = 6 dan Stationname = "Naam niet gevonden!"
Als Title_pos = 7 dan titel = "Titel niet gevonden!"
Terugkeer
Empty_buffer:
Doen
Uart_in = Inkey()
Uart_buffer = Ischarwaiting()
Lus tot Uart_buffer = 0
Terugkeer
Readclock:
I2cstart
I2cwbyte Ds1307w
I2cwbyte Admins
I2cstop
I2cstart
I2cwbyte Ds1307r
I2crbyte minuten, Ack
I2crbyte uur, Nack
Uren = uren en & B00111111 ' verwijdert bit6 & bit7
Uren = Makedec(hours) ' BCD converteert naar decimaal
Minuten = Makedec(mins)
Tube(2) = min / 10 ' splitst de uren en minuten in
Temp = Tube(2) * 10 ' 4 cijfers zodat dat het kan worden weergegeven
Tube(1) = minuten - Temp
Tube(4) = uur / 10
Temp = Tube(4) * 10
Tube(3) = uren - Temp
Temp = Tube(4)
X = 48
GOSUB Clockpic
Temp = Tube(3)
X = 72
GOSUB Clockpic
Temp = 11
X = 96
GOSUB Clockpic
Temp = Tube(2)
X = 120
GOSUB Clockpic
Temp = Tube(1)
X = 144
GOSUB Clockpic
Terugkeer
Setclock:
Minuten = Makebcd(mins)
Uren = Makebcd(hours)
Reset Hours.6
I2cstart
I2cwbyte Ds1307w
I2cwbyte Adsecs
I2cwbyte & B00000000
I2cwbyte minuten
I2cwbyte uur
I2cstop
Uren = uren en & B00111111 ' verwijdert bit6 & bit7
Uren = Makedec(hours) ' BCD converteert naar decimaal
Minuten = Makedec(mins)
Terugkeer
Clockpic:
Als Temp = 1 Then Showpic X, 0, 1
Als Temp = 2 dan Showpic X 0, 2
Als Temp = 3 dan Showpic X, 0, 3
Als Temp = 4 dan Showpic X 0, 4
Als Temp = 5 dan Showpic X 0, 5
Als Temp = 6 dan Showpic X 0, 6
Als Temp = 7 dan Showpic X 0, 7
Als Temp = 8 dan Showpic X 0, 8
Als Temp = 9 dan Showpic X 0, 9
Als Temp = 0 dan Showpic X, 0, 0
Als Temp = 11 Then Showpic X, 0, Dp
Terugkeer
Intro:
$bgf "wifiradio.bgf"
Spelen:
$bgf "play.bgf"
Pauze:
$bgf "pause.bgf"
Stopp:
$bgf "stop.bgf"
Volume:
$bgf "volume.bgf"
Tuner:
$bgf "tuner.bgf"
Klok:
$bgf "clock.bgf"
0:
$bgf "0.bgf"
1:
$bgf "1.bgf"
2:
$bgf "2.bgf"
3:
$bgf "3.bgf"
4:
$bgf "4.bgf"
5:
$bgf "5.bgf"
6:
$bgf "6.bgf"
7:
$bgf "7.bgf"
8:
$bgf "8.bgf"
9:
$bgf "9.bgf"
DP:
$bgf "dp.bgf"
Streep:
$bgf "streep.bgf"
Tunerlist:
Gegevens "", "1920 netwerk", "KCEA", "FM Tango Junin Argentinië", "TANGOCLUB"
Tunerlist2:
Gegevens "http://64.5.130.43:80", "http://198.182.76.2:8000", "http://200.58.116.222:10580", http://190.245.64.194:8000