Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # Script for Raspberry Pi Internet Radio
- # Site: http://raspi.gen.tr
- #
- # Ismet Said Calik
- # Date : 16/02/2014
- #
- # The wiring for the LCD is as follows:
- # 1 : GND
- # 2 : 5V
- # 3 : Contrast (0-5V)*
- # 4 : RS (Register Select)
- # 5 : R/W (Read Write) - GROUND THIS PIN! We do not want the LCD to send anything to the Pi @ 5v
- # 6 : Enable or Strobe
- # 7 : Data Bit 0 - NOT USED
- # 8 : Data Bit 1 - NOT USED
- # 9 : Data Bit 2 - NOT USED
- # 10: Data Bit 3 - NOT USED
- # 11: Data Bit 4
- # 12: Data Bit 5
- # 13: Data Bit 6
- # 14: Data Bit 7
- # 15: LCD Backlight +5V
- # 16: LCD Backlight GND (Red)
- # 17: LCD Backlight GND (Green)
- # 18: LCD Backlight GND (Blue)
- #import
- import RPi.GPIO as GPIO
- import time
- import os
- # GPIO portlari LCD ayarlamasi
- LCD_RS = 7
- LCD_E = 8
- LCD_D4 = 25
- LCD_D5 = 24
- LCD_D6 = 23
- LCD_D7 = 18
- # Buton Ayarlamasi
- NEXT = 4
- PREV = 17
- INFO = 15
- # LCD ayarlama
- LCD_WIDTH = 16 # LCD Boyut
- LCD_CHR = True
- LCD_CMD = False
- LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
- LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line
- #LCD_LINE_3 = 0x94 # LCD RAM address for the 3rd line
- #LCD_LINE_4 = 0xD4 # LCD RAM address for the 4th line
- # Timing constants
- E_PULSE = 0.00005
- E_DELAY = 0.00005
- def main():
- # Main program block
- GPIO.setwarnings(False)
- GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbers
- GPIO.setup(LCD_E, GPIO.OUT) # E
- GPIO.setup(LCD_RS, GPIO.OUT) # RS
- GPIO.setup(LCD_D4, GPIO.OUT) # DB4
- GPIO.setup(LCD_D5, GPIO.OUT) # DB5
- GPIO.setup(LCD_D6, GPIO.OUT) # DB6
- GPIO.setup(LCD_D7, GPIO.OUT) # DB7
- GPIO.setup(NEXT, GPIO.IN) # Next Channel button
- GPIO.setup(PREV, GPIO.IN) # Previous Channel button
- #GPIO.setup(INFO, GPIO.IN) # INFO Button
- # Calls the start up animation function
- start_up_anime()
- # Start playing mpc straight away
- os.system("mpc play")
- # Run our core function (scrolling and button code)
- while True:
- core()
- # Define our core program
- def core():
- # Declare "f" as our mpc current song title var
- f=os.popen("mpc -f %title% current")
- # Declare "s" as our station name var
- s=os.popen("mpc -f %name% current").read()
- s=s.strip()
- # Declare an empty var for station (for use further down)
- station = ""
- # Declare our default sleeptime for how quickly our text scrolls
- # This also affects how quickly our button presses are picked up (not good :()
- sleeptime=0.3
- # Start reading our lines from out "f" var in order to break it down and scroll
- for i in f.readlines():
- i=i.strip()
- station += i # include station in our iterator (i)
- str_pad = " " * 16 # same as 16 spaces
- station = str_pad + station # combine both together
- # iterates of the length of our station var (16)
- for i in range (0, len(station)):
- lcd_byte(LCD_LINE_1, LCD_CMD) # set the marker to the first line of our LCD
- lcd_text = station[i:(i+16)] # var for each line of text for each position as it iterates over for loop
- lcd_string(lcd_text,1) # send our text to the LCD
- lcd_byte(LCD_LINE_2, LCD_CMD) # set the marker to the 2nd line of our LCD
- lcd_string(s,2) # display our station (this one doesn't scroll since 2 scrolling at once is headache worthy!)
- # When our GPIO is high (button is pressed) calls mpc and moves to next track
- if ( GPIO.input(NEXT) == False):
- os.system("mpc next") # call mpc to move on to next track
- time.sleep(0.5) # sleep for half a second and give her some time!
- os.system("mpc play") # call mpc to play
- # (sleeptime=0) changes sleep time to 0, this will cause previous track info on
- # the LCD to quickly move across the screen and move on to next track.
- # this isn't here for effect (since it kinda looks cool I know:)) but it is here
- # so the the new track info is shown more quickly (so the for loop completes more quickly
- # and moves on to pushing the new info on the screen)
- sleeptime=0
- time.sleep(1)
- # Same as above but for previous track,
- if ( GPIO.input(PREV) == False):
- os.system("mpc prev")
- time.sleep(0.5)
- os.system("mpc play")
- sleeptime=0
- time.sleep(1)
- # This calls the uptime and ip for diognostic junk (eg: oops, whats the IP again?? :))
- #if ( GPIO.input(INFO) == True):
- # osIp=os.popen("ip addr | awk 'NR==6'").read()
- # osIp=osIp[9:24]
- # osUptime=os.popen("uptime | awk -F'[,]' '{print $1 $2}'").read()
- # osUptime=osUptime[10:]
- # lcd_byte(LCD_LINE_1, LCD_CMD)
- # lcd_string(osUptime,1)
- # lcd_byte(LCD_LINE_2, LCD_CMD)
- # lcd_string(osIp,2)
- # time.sleep(5)
- # sleep time for iterating over the loop
- if(sleeptime==0):
- break
- time.sleep(sleeptime)
- def lcd_init():
- # Initialise display
- lcd_byte(0x33,LCD_CMD)
- lcd_byte(0x32,LCD_CMD)
- lcd_byte(0x28,LCD_CMD)
- lcd_byte(0x0C,LCD_CMD)
- lcd_byte(0x06,LCD_CMD)
- lcd_byte(0x01,LCD_CMD)
- def lcd_string(message,style):
- # Send string to display
- # style=1 Left justified
- # style=2 Centred
- # style=3 Right justified
- if style==1:
- message = message.ljust(LCD_WIDTH," ")
- elif style==2:
- message = message.center(LCD_WIDTH," ")
- elif style==3:
- message = message.rjust(LCD_WIDTH," ")
- for i in range(LCD_WIDTH):
- lcd_byte(ord(message[i]),LCD_CHR)
- def start_up_anime():
- # Initialise display
- lcd_init()
- # Send some test
- lcd_byte(LCD_LINE_1, LCD_CMD)
- lcd_string("mawrick Radyo",2)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string("ismetsaidcalik.com",1)
- time.sleep(1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" RADYO ",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" R A D Y O ",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" R A D Y O ",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string("R A D Y O",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string("R A D Y",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string("R A D ",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" R A D",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" R A ",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" R A ",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" R A ",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" R A ",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" R A ",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" R A",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" R ",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" R ",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" R ",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" R ",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" R ",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" R",1)
- time.sleep(0.1)
- lcd_byte(LCD_LINE_2, LCD_CMD)
- lcd_string(" ",1)
- time.sleep(.2)
- def lcd_byte(bits, mode):
- # Send byte to data pins
- # bits = data
- # mode = True for character
- # False for command
- GPIO.output(LCD_RS, mode) # RS
- # High bits
- GPIO.output(LCD_D4, False)
- GPIO.output(LCD_D5, False)
- GPIO.output(LCD_D6, False)
- GPIO.output(LCD_D7, False)
- if bits&0x10==0x10:
- GPIO.output(LCD_D4, True)
- if bits&0x20==0x20:
- GPIO.output(LCD_D5, True)
- if bits&0x40==0x40:
- GPIO.output(LCD_D6, True)
- if bits&0x80==0x80:
- GPIO.output(LCD_D7, True)
- # Toggle 'Enable' pin
- time.sleep(E_DELAY)
- GPIO.output(LCD_E, True)
- time.sleep(E_PULSE)
- GPIO.output(LCD_E, False)
- time.sleep(E_DELAY)
- # Low bits
- GPIO.output(LCD_D4, False)
- GPIO.output(LCD_D5, False)
- GPIO.output(LCD_D6, False)
- GPIO.output(LCD_D7, False)
- if bits&0x01==0x01:
- GPIO.output(LCD_D4, True)
- if bits&0x02==0x02:
- GPIO.output(LCD_D5, True)
- if bits&0x04==0x04:
- GPIO.output(LCD_D6, True)
- if bits&0x08==0x08:
- GPIO.output(LCD_D7, True)
- # Toggle 'Enable' pin
- time.sleep(E_DELAY)
- GPIO.output(LCD_E, True)
- time.sleep(E_PULSE)
- GPIO.output(LCD_E, False)
- time.sleep(E_DELAY)
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement