Call method and passed as a parameter
Call method and passed as a parameter
Hi there !
Here i'm for ask a help. I start to wrote my first own class but gave me this error : AttributeError:'fd77? object has no attribute 'scan'
I don't understand where the problem is. I post a little part of the code here .
Library :
class rfd77(object):
def __init__ (self , data, clock):
self.clock = clock
self.data = data
print(clock)
print(data)
device = i2c.scan()
print (device)
def scan(self):
i2c.readfrom_mem_into(0x4C,0x28,buf)
print(buf[1])
print(buf[0])
Code:
from machine import Pin, I2C
import RFD77402
from time import sleep
dist = rfd77 (5,4)
dist.scan()
So if i call dis = fd77(5,4) work no problem when i call the method gave me the problem ,, another thing i don't understand is because
if i wrote this
i2c = I2C(-1, scl=Pin(self.clock), sda=Pin(self.sda), freq=400000)
doesn't work
Thank you so much
Sergio
Here i'm for ask a help. I start to wrote my first own class but gave me this error : AttributeError:'fd77? object has no attribute 'scan'
I don't understand where the problem is. I post a little part of the code here .
Library :
class rfd77(object):
def __init__ (self , data, clock):
self.clock = clock
self.data = data
print(clock)
print(data)
device = i2c.scan()
print (device)
def scan(self):
i2c.readfrom_mem_into(0x4C,0x28,buf)
print(buf[1])
print(buf[0])
Code:
from machine import Pin, I2C
import RFD77402
from time import sleep
dist = rfd77 (5,4)
dist.scan()
So if i call dis = fd77(5,4) work no problem when i call the method gave me the problem ,, another thing i don't understand is because
if i wrote this
i2c = I2C(-1, scl=Pin(self.clock), sda=Pin(self.sda), freq=400000)
doesn't work
Thank you so much
Sergio
Re: Call method and passed as a parameter
Hi,
Can you post a more complete example of the code (ideally the whole file). I'm unsure where you're putting this line
The general convention for drivers is to have the constructor take an instance of I2C (or SPI, etc), rather than the pins directly. This gives the user of the class more flexibility, and also makes it easier to support different board types.
For example, https://github.com/micropython/micropyt ... ssd1306.py
Then I use this with:
Can you post a more complete example of the code (ideally the whole file). I'm unsure where you're putting this line
Code: Select all
i2c = I2C(-1, scl=Pin(self.clock), sda=Pin(self.sda), freq=400000)
For example, https://github.com/micropython/micropyt ... ssd1306.py
Code: Select all
class SSD1306_I2C(SSD1306):
def __init__(self, width, height, i2c, addr=0x3c, external_vcc=False):
self.i2c = i2c
Code: Select all
from machine import I2C, Pin
from ssd1306 import SSD1306_I2C
i2c = I2C(scl=Pin(4), sda=Pin(5), freq=400000)
display = SSD1306_I2C(128, 64, i2c)
Re: Call method and passed as a parameter
Hi ,
this is my library just start to grow up:
from machine import Pin, I2C
from micropython import const
from time import sleep
""" Costanti """
ICSR = const(0x00)IER = const(0x02)
Cmd_R = const(0x04)
Dev_Status_R = const(0x06)
Rslt_R = const(0x08)
RsltCnfdR = const(0x0A)
Cmd_CfgR_A = const(0x0C)
Cmd_CfgR_B = const(0x0E)
H2M_mbx = const(0x10)
M2H_mbx = const(0x12)P
MU_Cfg = const(0x14)
I2C_Ad_ptr = const(0x18)
I2C_Data_port = const(0x1A)
I2C_Init_cfg = const(0x1C)
MCPU_PM_Ctrl = const(0x1E)
HFCfg_0 = const(0x20)
HFCfg_1 = const(0x22)
HFCfg_2 = const(0x24)
HFCfg_3 = const(0x26)
Mod_Chip_ID = const(0x28)
Ptch_MCfg = const(0x2A)
""" Variabili """
buf = bytearray(6)
class rfd77(object):
def __init__ (self , data, clock):
self.clock = clock
self.data = data
i2c = I2C(-1, scl=Pin(self.clock), sda=Pin(self.data), freq=400000)
print(clock)
print(data)
device = i2c.scan()
print (device)
def scan(self):
self.i2c.readfrom_mem_into(0x4C,0x28,buf)
print(buf[1])
print(buf[0])
-----------------------------------------------------------------------------------
CODE:
from machine import Pin, I2C
import RFD77402
from time import sleep
dist = rfd77 (5,4)
dist.scan()
This is all my code for the moment, i state to move the first step in python and really some times i have a lot of doubt ., for luck this forum help me a lot. Can you help me to understand because when i call dis.scan() gave me an error i wrote in the fist post ? . I saw your file thank you now i print and i study.
Have a good day
Sergio
this is my library just start to grow up:
from machine import Pin, I2C
from micropython import const
from time import sleep
""" Costanti """
ICSR = const(0x00)IER = const(0x02)
Cmd_R = const(0x04)
Dev_Status_R = const(0x06)
Rslt_R = const(0x08)
RsltCnfdR = const(0x0A)
Cmd_CfgR_A = const(0x0C)
Cmd_CfgR_B = const(0x0E)
H2M_mbx = const(0x10)
M2H_mbx = const(0x12)P
MU_Cfg = const(0x14)
I2C_Ad_ptr = const(0x18)
I2C_Data_port = const(0x1A)
I2C_Init_cfg = const(0x1C)
MCPU_PM_Ctrl = const(0x1E)
HFCfg_0 = const(0x20)
HFCfg_1 = const(0x22)
HFCfg_2 = const(0x24)
HFCfg_3 = const(0x26)
Mod_Chip_ID = const(0x28)
Ptch_MCfg = const(0x2A)
""" Variabili """
buf = bytearray(6)
class rfd77(object):
def __init__ (self , data, clock):
self.clock = clock
self.data = data
i2c = I2C(-1, scl=Pin(self.clock), sda=Pin(self.data), freq=400000)
print(clock)
print(data)
device = i2c.scan()
print (device)
def scan(self):
self.i2c.readfrom_mem_into(0x4C,0x28,buf)
print(buf[1])
print(buf[0])
-----------------------------------------------------------------------------------
CODE:
from machine import Pin, I2C
import RFD77402
from time import sleep
dist = rfd77 (5,4)
dist.scan()
This is all my code for the moment, i state to move the first step in python and really some times i have a lot of doubt ., for luck this forum help me a lot. Can you help me to understand because when i call dis.scan() gave me an error i wrote in the fist post ? . I saw your file thank you now i print and i study.
Have a good day
Sergio
Re: Call method and passed as a parameter
Inside `def scan()`, it refers to self.i2c, but you in `__init__`, the code never sets `self.i2c`.
So you need to change it to:
But I recommend changing it to take the i2c instance, rather than the individual pins
then when you use your rfd77 class:
So you need to change it to:
Code: Select all
class rfd77(object):
def __init__ (self , data, clock):
self.clock = clock
self.data = data
i2c = I2C(-1, scl=Pin(self.clock), sda=Pin(self.data), freq=400000)
print(clock)
print(data)
device = self.i2c.scan()
print (device)
Code: Select all
class rfd77(object):
def __init__ (self , i2c):
self.i2c = i2c
device = self.i2c.scan()
print (device)
Code: Select all
dist = rfd77 (I2C(-1, scl=Pin(self.clock), sda=Pin(self.data), freq=400000) )
dist.scan()
Re: Call method and passed as a parameter
Hi,
i try to did but the first part work the scene doesn't this is the error compiler wrote to me
download ok
exec(open('main.py').read(),globals())
[76]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 15, in <module>
AttributeError: 'rfd77' object has no attribute 'scan'
i try to did but the first part work the scene doesn't this is the error compiler wrote to me
download ok
exec(open('main.py').read(),globals())
[76]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 15, in <module>
AttributeError: 'rfd77' object has no attribute 'scan'
Re: Call method and passed as a parameter
Is your scan method indented the same as __init__ ? (i.e. the same number of spaces in front of it). Sorry I can't tell because the formatting is lost.
When you past code into the forum, select it and then press the </> button so the formatting is preserved.
When you past code into the forum, select it and then press the </> button so the formatting is preserved.
Re: Call method and passed as a parameter
Code: Select all
from machine import Pin, I2C
from micropython import const
from time import sleep
""" Costanti """
ICSR = const(0x00)IER = const(0x02)
Cmd_R = const(0x04)
Dev_Status_R = const(0x06)
Rslt_R = const(0x08)
RsltCnfdR = const(0x0A)
Cmd_CfgR_A = const(0x0C)
Cmd_CfgR_B = const(0x0E)
H2M_mbx = const(0x10)
M2H_mbx = const(0x12)P
MU_Cfg = const(0x14)
I2C_Ad_ptr = const(0x18)
I2C_Data_port = const(0x1A)
I2C_Init_cfg = const(0x1C)
MCPU_PM_Ctrl = const(0x1E)
HFCfg_0 = const(0x20)
HFCfg_1 = const(0x22)
HFCfg_2 = const(0x24)
HFCfg_3 = const(0x26)
Mod_Chip_ID = const(0x28)
Ptch_MCfg = const(0x2A)
""" Variabili """
buf = bytearray(6)
class rfd77(object):
def __init__ (self , i2c):
self.i2c = i2c
device = self.i2c.scan()
print (device)
def scan(self):
self.i2c.readfrom_mem_into(0x4C,0x28,buf)
print(buf[1])
print(buf[0])
Code: Select all
dist = rfd77 (I2C(-1, scl=Pin(self.clock), sda=Pin(self.data), freq=400000) )
dist.scan()
Re: Call method and passed as a parameter
and this is the message gave to me
Thank you
Code: Select all
download ok
exec(open('main.py').read(),globals())
[76]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 15, in <module>
AttributeError: 'rfd77' object has no attribute 'scan'
Re: Call method and passed as a parameter
Sorry I meant like this:
Code: Select all
class rfd77(object):
def __init__ (self , i2c):
self.i2c = i2c
device = self.i2c.scan()
print (device)
def scan(self):
self.i2c.readfrom_mem_into(0x4C,0x28,buf)
print(buf[1])
print(buf[0])
Re: Call method and passed as a parameter
Please forgive me
i wrote in your same way but still doesn't work
same error
I use UPyCraftv1.1 do you use other software ? really i don't understand
Sergio
i wrote in your same way but still doesn't work
same error
Code: Select all
download ok
exec(open('main.py').read(),globals())
[76]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 15, in <module>
AttributeError: 'rfd77' object has no attribute 'scan'
Sergio