Plotting Signals with Txtzyme

By: WardCunningham

2010-06-11 07:21:50

Txtzyme now supports analog input using Paul's Simple ADC code. The command 5s samples analog channel 5. Here is a program that takes 50 samples:
    50{5sp}
I read the samples directly from the USB device and convert them into bar charts with a perl one-liner that I leave running in the background. When the Teensy spits out data, it looks like this:
72	|||||||
68	||||||
82	||||||||
82	||||||||
67	||||||
141	||||||||||||||
221	||||||||||||||||||||||
298	|||||||||||||||||||||||||||||
359	|||||||||||||||||||||||||||||||||||
448	||||||||||||||||||||||||||||||||||||||||||||
519	|||||||||||||||||||||||||||||||||||||||||||||||||||
530	|||||||||||||||||||||||||||||||||||||||||||||||||||||
527	||||||||||||||||||||||||||||||||||||||||||||||||||||
531	|||||||||||||||||||||||||||||||||||||||||||||||||||||
513	|||||||||||||||||||||||||||||||||||||||||||||||||||
492	|||||||||||||||||||||||||||||||||||||||||||||||||
439	|||||||||||||||||||||||||||||||||||||||||||
395	|||||||||||||||||||||||||||||||||||||||
324	||||||||||||||||||||||||||||||||
254	|||||||||||||||||||||||||
234	|||||||||||||||||||||||
The perl script uses a single regex substitution. I use perl's "x" operator to make bars by replicating a single character. For example, "|"x10 would produce "||||||||||". I scale the Txtzyme output by .2 so that the bars fit nicely on the screen. Here is the whole script launched as a background task:
    perl -pe 's/(\d+)/$1."\t"."|"x($1*.2)/e' < /dev/cu.usbmodem &
I can make the Txtzyme program run repeatedly by wrapping a while loop around the shell command that sends my program to the Teensy:
    while sleep .144; do clear; echo 50{5sp} > /dev/cu.usbmodem; done
The carefully chosen sleep and screen clear makes my completed setup refresh continuously at a rate good for examining the 60Hz hum present when I touch the Teensy's input pins. Want to try this? Find both lines in the sample script on GitHub.
Back to archive index