Oscilloskop! DET ENKLA SÄTTET! DIY (3 / 5 steg)
Steg 3: Programmering bearbetning
/*
* Oscilloskop
* Ger en visuell rendering av analoga pin 0 i realtid.
*
*
* (c) 2011 "simonfrfr" (newtonlabs
*/
import processing.serial.*;
färg currentcolor;
Boolean låst = false;
booleska Herr = false;
booleska serialt = false;
CircleButton circle1, circle2, circle3;
Seriell port; Skapa objekt från seriella klass
int val; Uppgifterna från den seriella porten
int [] värden.
float zoom;
PFont fontA;
void setup()
{
fontA = loadFont("Ziggurat-HTF-Black-32.vlw");
textFont (fontA, 32);
Bara dra en gång
noLoop();
size(1280, 480);
färg buttoncolor = color(153);
färg highlight = color(102);
ellipseMode(CENTER);
circle3 = ny CircleButton (50, 50, 50, buttoncolor, highlight);
circle2 = ny CircleButton (50, 50, 50, buttoncolor, highlight);
circle1 = ny CircleButton (50, 50, 50, buttoncolor, highlight);
Öppna den porten som styrelsen är ansluten till och använda samma hastighet (9600 bps)
Port = ny följetong (denna, Serial.list() [0], 9600);
värden = nya int [bredd].
Zoom = 1.0f;
Smooth();
}
int getY(int val) {
tillbaka (int) (höjd - val/1023.0f * (höjd - 1));
}
int getValue () {
int värde = -1;
medan (port.available() > = 3) {
om (port.read() == 0xff) {
värde = (port.read() << 8) | (port.read());
}
}
returnera värdet;
}
void pushValue (int value) {
för (int jag = 0; jag < bredd-1; i ++)
värden [i] = värden [jag + 1];
värden [bredd-1] = värde;
}
void drawLines() {
stroke(255);
int displayWidth (int) = (bredd / zoom);
int k = values.length - displayWidth;
int x0 = 0;
int y0 = getY(values[k]);
för (int jag = 1; jag < displayWidth; i ++) {
k ++;
int x1 (int) = (jag * (bredd-1) / (displayWidth-1));
int y1 = getY(values[k]);
linje (x0, y0, x1, y1);
x0 = x1;
y0 = y1;
}
}
void drawGrid() {
stroke (255, 255, 255);
linje (0, höjd/2, bredd, höjd/2);
linje (0, höjd/2 + 1, bredd, höjd/2 + 1);
linje (0, höjd/2 + 2, bredd, höjd/2 + 2);
linje (0, höjd/2 + 3, bredd, höjd/2 + 3);
linje (0, höjd/2 + 4, bredd, höjd/2 + 4);
linje (0, höjd/2 + 5, bredd, höjd/2 + 5);
}
void keyReleased() {
Växla (nyckel) {
fallet "+":
zoom * = 2.0f;
println(zoom);
om ((int) (bredd / zoom) < = 1)
zoom / = 2.0f;
bryta;
fallet "-":
zoom / = 2.0f;
om (zooma < 1.0f)
zoom * = 2.0f;
bryta;
}
}
void draw()
{
serialcheck();
om (serialt == true) {
om (Herr! = false) {
bakgrund (19, 134, 209);
Fill(255);
text ("-Zooma ut", 100, 60);
text ("+ Zooma in", 100, 95);
uppdatering (mouseX, mouseY);
circle1.display();
circle2.display();
circle3.display();
drawGrid();
Val = getValue ();
om (val! = -1) {
pushValue(val);
}
drawLines();
}
annat {
fyllning (42, 88, 87);
rect (0, 0, 1280, 480);
circle3.display();
uppdatering (mouseX, mouseY);
}
}
annat {
Background(0);
Fill(255);
text ("Ledsen, THE anslutning har gått förlorade,", 100, 60);
text ("försök att ansluta till seriell PORT.", 100, 95);
text ("om du ÅTERANSLUTER din seriell PORT och detta", 100, 130);
text ("meddelande inte går bort sedan EXIT THE", 100, 165);
text ("Programmet och öppna det och det kommer arbete", 100, 200);
text ("annars det ISA PROBLEM med din hårdvara", 100, 235);
text ("eller din programmering.", 100, 280);
}
}
void serialcheck()
{
Delay(12);
om (port.available() > = 1) {
serialt = sant;
}
annat {
serialt = false;
}
}
void uppdatering (int x, int y)
{
IF(Locked == false) {
circle1.Update();
circle2.Update();
circle3.Update();
rect1.Update();
rect2.Update();
}
annat {
låst = false;
}
IF(mousePressed) {
IF(circle1.Pressed()) {
currentcolor = circle1.basecolor;
}
annat if(circle2.pressed()) {
currentcolor = circle2.basecolor;
}
annat if(circle3.pressed()) {
om (Herr == true) {
Herr = false;
}
annat {
Herr = sant;
}
}
}
}
klass knappen
{
int x, y;
int storlek;
färg basecolor, highlightcolor;
färg currentcolor;
booleska över = false;
Boolean tryckte = false;
void update()
{
IF(over()) {
currentcolor = highlightcolor;
}
annat {
currentcolor = basecolor;
}
}
Boolean pressed()
{
IF(over) {
låst = sant;
return true;
}
annat {
låst = false;
returnera false;
}
}
Boolean over()
{
return true;
}
booleska overRect (int x, int y, int bredd, int höjd)
{
om (mouseX > = x & & mouseX < = x + bredd & &
mouseY > = y & & mouseY < = y + höjd) {
return true;
}
annat {
returnera false;
}
}
booleska overCircle (int x, int y, int diameter)
{
flyta disX = x - mouseX;
float disY = y - mouseY;
IF(sqrt(SQ(disX) + sq(disY)) < diameter/2) {
return true;
}
annat {
returnera false;
}
}
}
klassen CircleButton utökar knappen
{
CircleButton (int ix, int iy, int isize, färg icolor, färg ihighlight)
{
x = ix.
y = iy;
storlek = isize;
basecolor = icolor;
highlightColor = ihighlight;
currentcolor = basecolor;
}
Boolean over()
{
om (overCircle (x, y, storlek)) {
över = sant;
return true;
}
annat {
över = false;
returnera false;
}
}
void display()
{
stroke(255);
Fill(currentcolor);
ellips (x, y, storlek, storlek);
}
}
klassen RectButton utökar knappen
{
RectButton (int ix, int iy, int isize, färg icolor, färg ihighlight)
{
x = ix.
y = iy;
storlek = isize;
basecolor = icolor;
highlightColor = ihighlight;
currentcolor = basecolor;
}
Boolean over()
{
om (overRect (x, y, storlek, storlek)) {
över = sant;
return true;
}
annat {
över = false;
returnera false;
}
}
void display()
{
stroke(255);
Fill(currentcolor);
rect (x, y, storlek, storlek);
}
}