UIFLOW variable declaration issues - need help
-
I am having issues using a variable in a for loop when I am using UIFLOW. Here are two separate issues. In the first example you can see the start and stop value are not being properly populated with the value from the block. This happens as soon as a variable is used in the for loop.
TypeError("generator' object is not iterable",)
from m5stack import * from m5ui import * clear_bg(0x111111) btnA = M5Button(name='ButtonA', text='ButtonA', visibility=False) btnB = M5Button(name='ButtonB', text='ButtonB', visibility=False) btnC = M5Button(name='ButtonC', text='ButtonC', visibility=False) rect0 = M5Rect(0, 0, 30, 30, 0x000000, 0xFFFFFF) step = None X = None Y = None def upRange(start, stop, step): while start <= stop: yield start start += abs(step) while True: step = 40 for X in upRange: for Y in upRange: rect0.setBgColor(0x999999) rect0.setPosition(X, Y) wait(0.001)
This is the code for the second attempt. I'm not sure why it's defining the type as float. The error I get is TypeError('can't convert float to int')
from m5stack import * from m5ui import * clear_bg(0x111111) btnA = M5Button(name='ButtonA', text='ButtonA', visibility=False) btnB = M5Button(name='ButtonB', text='ButtonB', visibility=False) btnC = M5Button(name='ButtonC', text='ButtonC', visibility=False) rect0 = M5Rect(0, 0, 30, 30, 0x000000, 0xFFFFFF) start = None stop = None step = None X = None Y = None def upRange(start, stop, step): while start <= stop: yield start start += abs(step) def downRange(start, stop, step): while start >= stop: yield start start -= abs(step) start = 0 stop = 200 step = 40 while True: for X in (float(start) <= float(stop)) and upRange(float(start), float(stop), step) or downRange(float(start), float(stop), step): for Y in (float(start) <= float(stop)) and upRange(float(start), float(stop), step) or downRange(float(start), float(stop), step): rect0.setBgColor(0x999999) rect0.setPosition(X, Y) wait(0.001)
-
Am I correct in thinking that if I want to use the blocks and I want to use variables I have to use while() and not range(). This approach does work but it feels so inefficient.
-
UIFLOW is doing this which is giving TypeError(can't convert float to int)
start = 0
stop = 200
step = 40
while True:
for X in (float(start) <= float(stop)) and upRange(float(start), float(stop), step) or downRange(float(start), float(stop), step):It looks like UIFLOW should be doing the following and be casting the variable to an int instead of a float. Can you please update UIFLOW or let me know what I need to do to correct this issue
start = 0
stop = 200
step = 40
while True:
for X in (int(start) <= int(stop)) and upRange(int(start), int(stop), step) or downRange(int(start), float(stop), step): -
hello, in v0.1.0, we will add a block to make float to int
-
That's great news. Please keep up the good work and I look forward to the update. Please see what you can do to add some basic UART bluetooth blocks. I would really like to use the M5stack bluetooth capabilities similarly to the microbit. The microbit adds an easy way to pair to a tablet and send and receive serial messages over bluetooth. This provides an easy path for app development using the board along with a tool like mit app inventor or evothings or some such app maker.
-
@heybin I looked for the float and int block in the v1.0 release but I didn't see them. Can you tell me the status on this issue. By the way it looks like as of 0.91 the python code being generated is now casting all variables used in a for loop to float type and their is no longer an error caused by mixed types. I'm not sure if you are still planning to have blocks to specify types but I think it could be a good feature to have.
-
I am still getting a "can't convert float to int" error whenever I use a variable in the by argument in the count with i from to block. If I use an integer block in by it works fine. If I set a variable to the same integer it gives me an error and if I convert to int or convert to float I get the same error. If I click on details it reads: File<'string'> line57 in <module> TypeError: can't convert float to int. This is a bummer since I need to use a variable in the by argument of the block. Any help would be appreciated