Plotting Signals with Txtzyme

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 projects/perlscope GitHub.