суббота, 31 октября 2009 г.

Осциллограф из Arduino

Arduino умеет считывать значения с аналогового порта с помощью analogRead().
Если считывать данные и перенаправлять их на компьютер, а там строить график по полученным данным - получится осциллограф.

#define AINPUT 0 // принимать данные будем на аналоговый порт 0

void setup() {
Serial.begin(57600); //скорость работы с COM портом
}

void loop() {
int avalue;
avalue = analogRead(AINPUT);
Serial.println(avalue);
}

Это код программы, загружаемой в arduino. А теперь получим данные на компьютере и нарисуем график. С этим возникла небольшая проблема - я писал программу в Processing и я его совсем не знаю, так что за код сильно не пинайте - пока это лишь черновик. Но данные принимает, хоть разглядеть можно, а кому надо будет - допишут. Ну или я доделаю :)


import processing.serial.*;

Serial myPort;
int xPos = 0;
float inByte2 = 0;

void setup () {
size(640, 480);
println(Serial.list());
myPort = new Serial(this, Serial.list()[0], 57600);
myPort.bufferUntil('\n');
background(0);
float nul = map(0, 2048, -2048, 0, height);
stroke(255,255,255);
line(0, nul, width, nul);
}

void draw () {
}

void serialEvent (Serial myPort) {
String inString = myPort.readStringUntil('\n');
if (inString != null) {
float inByte = float(inString);
inByte = map(inByte, 2048, -2048, 0, height);
stroke(0,255,0);
line(xPos, inByte, xPos, inByte2);
inByte2 = inByte;
if (xPos >= width) {
xPos = 0;
background(0);
}
else {
float nul = map(0, 2048, -2048, 0, height);
stroke(255,255,255);
line(0, nul, width, nul);
xPos++;
}
}
}

Оно как-то работает... :)) Надо переделать систему рисования графика, добавить сетку, и линию времени. :)

----
Что-то код выводится без отступов, лень уже разбираться, в чем тут дело - спать давно пора.

Добавить закладку!

clix - ñîöèàëüíûå çàêëàäêè