Python Forum
Help Setting Multiple Variables
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Help Setting Multiple Variables
#1
Hey Guys -

I'm working on a project for a friend and need assistance, please; as I'm new to Python...

When the below script (which I didn't write) is executed, it runs through a brief startup routine then scans through radio station frequencies, determined their signal strength, and briefly stops on ones where the strength is above a "4" - all the while echoing the following...
Station skipped: 109.8 FM (Weak Signal: 1 )
Station skipped: 91.4 FM (Weak Signal: 1 )
Station skipped: 95.3 FM (Weak Signal: 1 )
Station skipped: 99.3 FM (Weak Signal: 1 )
Frequency tuned: 103.4 FM (Strong Signal: 10 )
Station skipped: 103.4 FM (Weak Signal: 2 )
...

What I'm (unsuccessfully) trying to modify it to do is the following...
1. During the startup, scan through entire range of frequencies once
2. Save list of all frequencies which have a signal equaling "1" to a variable(?)
3. Start indefinite loop tuning into each of the frequencies only included within the list/variable saved in step #2 for about 500 milliseconds each

I'm using a Raspberry Pi Zero W & TEA5767 with Python3 - Any suggestions? Thanks!

Code:
######!/usr/bin/python3 ###### # -*- coding: utf-8 -*- # From https://github.com/LinuxCircle/tea5767/blob/master/radio-smbus-tea5767-class.py import smbus as smbus import subprocess import time import sys import quick2wire.i2c as i2clib from quick2wire.i2c import I2CMaster, writing_bytes, reading cof = 32768 #crystal constant class tea5767: def __init__(self): self.i2c = smbus.SMBus(1) self.bus = i2clib.I2CMaster() self.add = 0x60 # I2C address circuit self.freq = 101.9 print("FM Radio Module TEA5767") def getFreq(self): # getReady() frequency = 0.0 results = self.bus.transaction( reading(self.add, 5) ) frequency = ((results[0][0]&0x3F) << 8) + results[0][1]; # Determine the current frequency using the same high side formula as above frequency = round(frequency * 32768 / 4 - 225000) / 1000000; # print(frequency) return round(frequency,2) def calculateFrequency(self): """calculate the station frequency based upon the upper and lower bits read from the device""" repeat = 0 f =0.0 with i2clib.I2CMaster() as b: results = b.transaction( reading(self.add, 5) ) uF = results[0][0]&0x3F lF = results[0][1] # this is probably not the best way of doing this but I was having issues with the # frequency being off by as much as 1.5 MHz current_freq = round((float(round(int(((int(uF)<<8)+int(lF))*cof/4-22500)/100000)/10)-.2)*10)/10 return current_freq #script to get ready def getReady(self): readyFlag = 0 i = False attempt = 0 results=[] standbyFlag = 0 sys.stdout.flush() time.sleep(0.1) print("Getting ready ", end ="") while (i==False): results = self.bus.transaction( reading(self.add, 5) ) readyFlag = 1 if (results[0][0]&0x80)==128 else 0 standbyFlag = 1 if (results[0][3]+0x40)!=319 else 0 #print("result search mode:" , results[0][0]+0x40) #s = results[0][3]+0x40 sys.stdout.flush() time.sleep(0.9) print(".", end = "") # print("Soft mute ", results[0][3]&0x08) #print(results[0][3]+0x40) i=standbyFlag*readyFlag attempt+=1 if(attempt>10): break if(i==True): print("Ready! (",attempt,")") # print("Raw output ", results[0]) else: self.i2c.read_byte(self.add) print("Not ready!") def writeFrequency(self,f, mute): freq = f # desired frequency in MHz (at 101.1 popular music station in Melbourne) cof = 32768 i=False attempt = 0 # Frequency distribution for two bytes (according to the data sheet) freq14bit = int (4 * (freq * 1000000 + 225000) / cof) freqH = freq14bit >>8 freqL = freq14bit & 0xFF data = [0 for i in range(4)] # Descriptions of individual bits in a byte - viz. catalog sheets if(mute==0): init = freqH&0x3F# freqH # 1.byte (MUTE bit; Frequency H) // MUTE is 0x80 disable mute and search mode & 0x3F else: init = freqH&0x7F data[0] = freqL # 2.byte (frequency L) if(mute==0): data[1] = 0b10010000 # 3.byte (SUD; SSL1, SSL2; HLSI, MS, MR, ML; SWP1) else: data[1] = 0b00010110 data[2] = 0b00010010 # 4.byte (SWP2; STBY, BL; XTAL; smut; HCC, SNC, SI) data[3] = 0b00000000 # 5.byte (PLREFF; DTC; 0; 0; 0; 0; 0; 0) #data[1]=0xB0; #3 byte (0xB0): high side LO injection is on,. #data[2]=0x10; #4 byte (0x10) : Xtal is 32.768 kHz #data[3]=0x00; #5 byte0x00) while (i==False): try: self.i2c.write_i2c_block_data (self.add, init, data) # Setting a new frequency to the circuit except IOError as e : i = False attempt +=1 if attempt > 100000: break except Exception as e: print("I/O error: {0}".format(e)) else: i = True cf = self.calculateFrequency() gf = self.getFreq() averageF =round((cf+gf)/2,2) def scan(self,direction): i=False self.freq = self.getFreq() fadd = 0 while (i==False): if(direction==1): fadd+=0.05 else: fadd-=0.05 self.freq = self.getFreq() #round((self.calculateFrequency()+self.getFreq())/2,2) if(self.freq<87.5): self.freq=108 elif(self.freq>108): self.freq=87.5 self.writeFrequency(self.freq+fadd,1) time.sleep(0.1) results = self.bus.transaction( reading(self.add, 5) ) readyFlag = 1 if (results[0][0]&0x80)==128 else 0 level = results[0][3]>>4 #print(results[0][0]&0x80 , " " , results[0][3]>>4) if(readyFlag and level>9): i=True print("Frequency tuned: ",self.calculateFrequency(), "FM (Strong Signal: ",level,")") else: i=False print("Station skipped: ",self.calculateFrequency(), "FM (Weak Signal: ",level,")") self.writeFrequency(self.calculateFrequency(),0) def off(self): print("Radio off: Goodbye now!") self.writeFrequency(self.calculateFrequency(), 1) radio = tea5767() radio.getReady() radio.scan(1) time.sleep(10) radio.scan(1) time.sleep(10) radio.scan(0) time.sleep(10) radio.scan(0) time.sleep(10) radio.off()
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Storing variables into one file for use in multiple Jupyter notebooks devansing 1 3,560 Feb-05-2022, 10:04 AM
Last Post: ibreeden
  Setting permanent user variables in Windows coder420 2 2,673 Jan-04-2022, 10:42 AM
Last Post: Larz60+
  How can I assign "multiple variables" to a single "value"? Psycpus 2 3,121 Oct-04-2021, 03:29 AM
Last Post: deanhystad
  Setting up multiple flask apps in the same server leoramirez 0 3,425 May-04-2021, 08:10 PM
Last Post: leoramirez
  Deleting multiple variables/arrays Robotguy 0 2,891 Aug-18-2020, 09:56 PM
Last Post: Robotguy
  print function help percentage and slash (multiple variables) leodavinci1990 3 4,750 Aug-10-2020, 02:51 AM
Last Post: bowlofred
  setting pythonpath variable in environment variables saisankalpj 3 5,090 Dec-05-2018, 10:33 PM
Last Post: Gribouillis
  Looping through variables and setting them ColdDeath 7 5,977 Dec-17-2017, 02:48 PM
Last Post: ColdDeath
  os.environ not setting current shell variables in Windows? brian6667 2 15,377 Apr-26-2017, 12:59 PM
Last Post: brian6667

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020
This forum uses Lukasz Tkacz MyBB addons.
Forum use Krzysztof "Supryk" Supryczynski addons.