Looking through the posts, it seems like most of you are a little beyond my current capabilities.
That being said, I’m trying to program this machine which is set up for block coding.
I can’t seem to use the “lambda functions” correctly, or at least I think that’s my problem.
I’d rather do it in python, but I wasn’t here for that meeting I guess.
Here’s the problem I’m running into:
When testing, I watch the blocks light up until it gets to the point where it is waiting on a signal from my Epson. So I manually give it that signal, and the program just stops with no motion.
I’m using this “lambda function” to calculate the appropriate pull distance, given the current circumference which is calculated in a separate function, so that we pull an arc length of 30mm every time.
I’ve got a forum and a sandbox for checking my JavaScript, which is the language vention’s tutorial videos say is needed for these “lambda functions.”
Having not read through my original post here, I’ll recap the wall I’m hitting.
While testing, it gets to the “wait for input” command. (seen above)
I then simulate the signal from epsons side.
The program simply stops.
I’m fairly certain the IO’s are doing what needs to be done as I have manually checked them…like twenty times.
what I have in a JavaScript sandbox that I’ve been testing ‘rollHome’ inputs by comparing the output to an excel spreadsheet. Some of the labels may be different.
let rh = 7 //rollhome *sensor input*
const sd = 93 // starting diameter
let c = Math.PI * sd
const wc = Math.PI * 88.9254 //motor wheel circumference
const al = 30 //desired arc length
//current roll circumference
function cc(rh) {
if (rh >= 3) {
return Math.PI * (93 + ((rh - 2)*6));
} else {
return Math.PI * 93;
}
}
c = cc();
//pullcalc
function pull(c) {
return (30 / c) * (Math.PI * 88.9254);
}
console.log(cc(rh));
console.log(pull(cc(rh)));
Cool. First off, admittedly, the error reporting is not great at the moment. We’ll be improving this in the future. In the meantime, you might get better hints if you open your dev tools in your browser.
Regarding your program, I see a few things:
your instructions don’t pass any parameters to pullCalc and currentCirc (n.b. the lambdas don’t have access to anything global, they’re meant to be pure functions: they only transform their inputs; you have to pass in those arguments explicitly in the expression of your setVariable)
in pullCalc, PI() does not exist (use Math.PI instead)
would I put the parameters in anywhere I’m calling the function, or just in the set variable command, or in the motion command?
I’ve tried doing so in the variables page, but it gives me an error “parameter not defined” (which I’m sure is my fault)
I will try all of these after the google call with some other people from vention.
You can divide and conquer by just changing the very first setVariable right after the wait, and add a temporary message instruction right after. If you type the name of your variable in the message (here: circ; or you could say “Here’s the value of circ”), it’ll render it as yellow in the instruction, and it’ll interpolate it and display it (at run time) in the log window that you access easily via the UI builder.
In general yes, wherever you call a lambda, you must pass in the parameters. Typically this will be in any expression field of a MachineLogic instruction. setVariable is one of the most common such places, but you could also call a function from the position edit field of a move instruction, for example; or most other edit fields.
First, I just learned that you are cofounder.
Where are my manners, nice to meet you.
Also, kind of impressive in my eyes as I don’t hear about many founders or cofounders responding to forum chats, thank you.
Second:
Talking with Laurent and Simon, I got some good feed back. This is my first time in the deep end, if you will, but they were very helpful and are also telling me the pretty much the same things as you.
I’m gonna send Laurent my updated version of the current program set up, and I’m also trying to drop it here so we all can see it. I can’t seem to get that right, and the pictures wouldn’t really let you see all the variable names as I extended them for legibility. …Ironic, but I will figure it out and drop it here at that time.
Third:
I think I understand what you guys are saying, but I’m clearly doing something wrong still, so that theory is on thin ice.
However, I am now getting an error message popping up when the program stops, which feels strangely like progress.
The error reads “invalid application, changes can’t be saved.”
I was able to find it, but I had to select all file types, and got this error when I tried to attach it here. "Sorry, the file you are trying to upload is not authorized (authorized extensions: jpg,jpeg,png,gif,heic,heif,webp,avif). I tried to open it in notepad,
I’ve just been downloading it from here(seen below). I tried to open it and notepad, save as, and upload it that way, but got the same error.
This would work for a back-up file, right?
The signature of your pullCalc, in the last picture you posted, won’t work. It must be a plain (1-dimension) argument list. You can pass in a function if you want, but on the caller side, you’ll only pass in the function name; in the function signature, you’ll only name an argument for it (the function itself); and in the body, you’ll invoke that function via the name given in the signature. Alternatively (and more commonly), you can pass in the evaluation of a function as a plain argument (as you did in your setVariable).
Still learning the vocab, let me make sure I understand correctly.
I’ve switched to a hardcoding method for now, but I would like to replace any numbers in the body with variables that could be easily changed on the variables page when all is said and done. For now, I just want to make sure I’m following proper syntax.