NEW: Learning electronics? Ask your questions on the new Electronics Questions & Answers site hosted by CircuitLab.
Microcontroller Programming » python loop
August 02, 2009 by Farmerjoecoledge |
I have the ledarray up and running,i found some code and it work's but i can't make it loop. I've tryed every combination from what i know of the code, got past the syntax error but now it says: Name error: name 'while_do_scroll' is not defined. I'm with kubuntu now and i think my problems might be with the editor, it's talking non ascii and encoding "utf-8". Linux mumbojumbo, too tired of linux to spend more time trying to figure it out.So add a loop that works please. Also would like to send a live feed to it. I'm right there i just can't see it. I got an address just don't see where to put it. Any tips would be good.
|
---|---|
August 03, 2009 by jbremnant |
Looks like you are just reading the input from stdin (your keystrokes from the terminal) and sending each character via serial line to nerdkit unless it's a newline ('n'). And it breaks out of the loop if the nerdkit code doesn't respond with 'n' character. Couple of things I would change:
Here is the code change I would make:
Hope that helps. |
August 03, 2009 by Farmerjoecoledge |
Okay, i've just loaded your changes and it's, Received: b Received: a That's it nothing showing up. Before it would scroll once. |
August 03, 2009 by Farmerjoecoledge |
UPDATE got it working but still no loop. Seems to me there should be a "while" or "for" there. Also you left the #break in. I took it out but still no loop. |
August 03, 2009 by mcai8sh4 |
Farmerjoecolege : I'm useless at python, but it looks like you're using the code (or similar) that I modified from the origional Nerdkits supplied code. The basic behind this is quite simple, it takes arguments from the command line (when the program is invoked) and sends them to the display then ends. If you're wanting to send a live feed to your display, then I recommend the original Nerdkits py-listener program. It constantly listens on a port so you can just send your data to that port and it will be displayed. This program was designed for use in a bash script (batch file, whatever you want) to be invoked when needed. That is, it just displays the one thing then ends, when you can run it again with your new data etc.. I have wrote 2 other programs (one displays static text for 5 sec, the other scrolls like this) in perl - these are for the same usage, but where intended for those who may have been struggling with python (mainly under Windows). If you let me know exactly what you are trying to achieve, then I'll try to modify the program (probably the perl one - I don't know python, but I can always try) to help you achieve your goal. One thing I've noticed - any of these programs don't always work first try - so run it once, then again, then again (leave the marquee on, eventually it listens at the right place - then it seems to work ok [this is a little bug I'm trying to iron out]) Best of luck, keep us all posted on how you get on. (I'm quite busy at work so it may be a few days to get round to trying to help, but I'll do my best) |
August 03, 2009 by Farmerjoecoledge |
Alright, good. So i'm beginning to think that the code i'm trying to modify will not "loop". That's all, like get the code running, add the text and instead of stopping, to loop. And a timing interval would be good too. Sorry just don't know how to code yet. |
August 03, 2009 by mcai8sh4 |
You want to loop the same data? This is probably within my capability (if thats what you're after), If you're after it to read new lines constantly, then you're better off with the py-listener.py program |
August 03, 2009 by Farmerjoecoledge |
I'm sitting here staring at the py listener and the only thing going across it is what i enter from the key board. If i enter a address for a live feed it'll scroll just that. Where's the loop and connection to the feed? |
August 04, 2009 by jbremnant |
The program I supplied you doesn't do anything except display what you type on the keyboard. In order to get live feed to scroll on your nerdkit, you'd first need have a client that can download messages from the feed and send the contents to the nerdkit. Again, just like mcai8sh4 mentioned, use the original py-listener.py script. Once you get that working, you will need "netcat" program to send messages to py-listener.py script, which in turn will communicate with your nerdkit. After that, you can do something like this to test on your linux command line: echo "SOME INFO" | netcat localhost 6667 I strongly suggest going through the original code and try to understand it line-by-line. And modify the code as necessary. |
August 04, 2009 by mcai8sh4 |
I think like jbremnant suggested - you need a client (of some sort) to pull the info off the web - once you have the information accessible you could then use either the origional py-listener, or one of the other adaptations. It would certainly be beneficial for you to understand how the python (and c code) intereact with each other, then you will know what needs to be done to display your live feed information. I know the c code is quite confusing - believe me, I don't fully understand it yet - but the basic read a character, once ready for the next, send an 'n' and wait for the next... should make sense. It's usually best to break down each part of the code and figure out what it's doing (in general), then piece all that together to understand the basics of the code. Once you're comfortable with how you are sending/receiving the data (try not to worry about how it's actually displayed) then you can start to work on a client (even something simple like a bash script) to grab the data you want and send it to one of the python programs. Good luck |
August 04, 2009 by Farmerjoecoledge |
Ok, i'm working on a rss client right now. Just got to figure out the rest. Bash scripts are almost python scripts, so i'll stick with the python. Also, I don't know how you guys get, echo "SOMETHING" | netcat localhost 6667, to work. With me with py-listener running, in the second window it's: nc localhost 6667 and then it's ready. So netcat is refusing the connection right now for some reason. And i still don't know how to add a simple loop to the scrolling script. |
August 06, 2009 by Farmerjoecoledge |
So now let me rephrase the question. I need someone to write me some code (just send price). All it's got to do is take a string of text, scroll it and loop it every 5 sec until new text received. Easy eh! Don't care what language, just a command line script. |
August 08, 2009 by wayward |
Farmerjoecoledge, I don't think I fully understand what kind of scrolling you had in mind, so I wrote two functions. One will split your input line into individual characters and output them, the other will echo the line successively, stripping characters from the front until the entire line is cannibalized. If you write such a line to the LCD, it will appear to be scrolling to the left. (Don't forget to add one trailing blank character to erase what's left of the old, one-character-longer line!) Oh, and this is a bash script. It relies on sed to do the heavy lifting. You can modify the main loop (at the end) to adjust the pause (sleep 5, in seconds) or what happens when the line is output. Then pipe the output of the entire script to the serial port, loop on the MPU side waiting for a newline-delimited string, do whatever you like, and you're done. Cheers, Zoran
|
August 08, 2009 by Farmerjoecoledge |
Zoran, Ok, this is good. One thing, this is the ledarray that i want this to work on. But just to see if i'm on the right track, i'm new to bash. So i used sed as the command to run the script.Seems to work it waits for text to be sent. Grant |
August 09, 2009 by Farmerjoecoledge |
I've reconnected the lcd, entered bash bash (i named the code bash) and it's ready for text so i enter THANX and it cannibalizes one letter at a time like it should but nothing shows on the lcd. What am i missing? And i don't know what is meant by sed doing the heavy lifting. Should there be a sed shell open? |
August 09, 2009 by wayward |
Hey Grant, this program cannibalizes letters and outputs the text on what's called "standard output". It's just a "channel" for the textual output from a program; by default it's connected to your terminal so you can see it on screen. But you can also redirect standard output (or stdout as we call it) to a file, to a different terminal, or use it as input to an entirely different program, just as if you were typing on the keyboard! This kind of redirection from one program to another is very common practice in most UNIX-based operating systems, and it is tremendously useful, as you'll see. In our case, I wrote a program that sends some text to stdout. You want to redirect that text to your LCD. You have several options, but the easiest one is this:
The '|' character means this: "take whatever the program on the left-hand side would write to the terminal (its stdout) and redirect it to the keyboard input of the program on the right-hand side (its stdin, yes, standard input)". Note that exactly the same thing happens when you write
That's redirection at work. Try it out and let me know; I am curious myself :) Zoran |
August 09, 2009 by Farmerjoecoledge |
Zoran, are you curious? So you don't know? Ok your on the right track. So the redirect is where i'm still lost. The bash script is one program, python-listener.py is another and nc (netcat) is another. We seem to have lost sed that would be four programs working together. The combinations do not work. I'm not getting the text on screen. With the python-listener.py it's written to work with nc, meaning after py-listener is running you open a second shell to open port 6667. That command is not, echo HOWRU | nc localhost 6667 to open the port it's nc localhost 6667 by itself. The shell changes to a nc shell and then it's ready for text. I read echo SOMETEXT | netcat localhost 6666, right at the beginning of the ledarray tutorial and has still to make sence. With the spinoffs from the python-listener.py code(1st q above) the port opens (it seems) automaticly. Nc is not needed. So i realize the bash script needs a port open but nc isn't it, maybe it should be sed, i'll look into that. Now i'm not too concerned that it's not working for the lcd yet, It's my code for the ledarray is what i don't got. So forget about the lcd for now. I need some code to receive text scroll it and loop every 5sec's until new text received on the ledarray. Grant |
August 10, 2009 by Farmerjoecoledge |
Ok Ok already i know it's not easy but don't u guy's like a challenge. Just thread nc with the scroll program? I'm trying to get this code so making another ledarray will be worth it. My first one i used superbright leds and she don't work right. Then if i'm still alive i'll get serious about learning "A" language. |
August 10, 2009 by wayward |
All right, we're getting somewhere. Now, as for netcat: if it can read some text from the keyboard (nc ... then type "blahblah"), then it can certainly accept it via pipes (echo blahblah | nc ...) . The two methods are identical. sed is a standard UNIX utility for manipulating the sequential inputs, such as the text you want to scroll. I use it here to trim letters from the input string and print intermediate results, which will -- when we manage to show it on the marquee -- create an effect of scrolling. So, what sed does is simply manipulating strings; it doesn't talk to the MCU. I tested the python-listener.py on my computer and it works fine with what I wrote above; what error are you getting? I'll write it here once more:
Also, I've modified the script to also accept the text from the command line; this version below will work with: bash bash HowDoYouDo | nc localhost 6667 so you don't have to enter the text by hand. This is just a minor cosmetic edit, though, so you're free to ignore it. Please let me know what happens, if anything, when you try the above. I am curious because I don't actually have the LED marquee myself :) Cheers, Zoran
|
August 11, 2009 by Farmerjoecoledge |
Now that's progress. For a guy who doesn't own one of these "yet" u got it going. Everything you said is right just add "cd to folder containing the bash script". To start the bash script it's got to be in the command. So: bash bash2z | nc localhost 6667 fires it up. nc localhost 6667 will just start nc. So now the code will loop (yeah) for it looks like 5 times, i'll figure that from the code, then finishes, Oh i should mention the static time is displayed when it's not scrolling. That's not part of your script but it is a part of python-listener.py so there's 3 programs at work together here, isn't that touching. So this bash scripting seems to be a good place to start coding. One thing should be fixed by u though, the second shell will only work once, meaning after scrolling the first text u enter it won't take any new text, i can close it and open it again for new text but that's the long way. If you need to know anything about the ledarray2 i'm the guy besides the honchos. I was on windows when i started and i wrote about some of it but you definatly need to be with linux for the ledarray2. |
August 11, 2009 by Farmerjoecoledge |
Correction: To prolong that data i made a script (1st one good eh!) consists of HELLO WORLD, I'M FINE NOW spaced 5 secs apart and copy her right into the shell, can make it go indefinatly. Dam good stuff. Next step the rss feed, oh yes, it's not far away. |
Please log in to post a reply.
Did you know that you can use a transistor to interface between different voltage levels of digital logic? Learn more...
|