Assignment : write an application that interfaces with an input or output device
- Sensor : Light Sensor
- Software : Open Frame Works
I decided to use the OpenFrameWorks for drawing sensing data of this week assignment.
Because, this software can draw beautiful design easily.
And I used a lighting sensor which I made before.
So I tried to write the c++ code.
This is header file written by c++ for the OpenFrameWorks
#include "ofMain.h" class testApp : public ofBaseApp{ public: void setup(); void update(); void draw(); void keyPressed(int key); void keyReleased(int key); void mouseMoved(int x, int y); void mouseDragged(int x, int y, int button); void mousePressed(int x, int y, int button); void mouseReleased(int x, int y, int button); void windowResized(int w, int h); void dragEvent(ofDragInfo dragInfo); void gotMessage(ofMessage msg); bool bSendSerialMessage; // When serial comunication is ready, this flag become true bool cFlag; // when it read btye1 ~ byte4, flag become true char byte1; char byte2; char byte3; char byte4; char low; // low value char high; // high value int value; //value of low + high int filter; int x; // value ofSerial serial; // variable for serial communication private: ofTrueTypeFont font; // font };
This is cpp file written by c++.
#include "testApp.h" //-------------------------------------------------------------- void testApp::setup(){ // general setting ofSetCircleResolution(64); // smooting circle object font.loadFont("verdana.ttf", 14); // using font loaded ofSetBackgroundColor(0, 0, 0); // set background black // serial setting bSendSerialMessage = false; //serial communication is ready serial.listDevices(); // search port that my PC can use vectordeviceList = serial.getDeviceList(); // show that my comuputer can use serial comunication port int baud = 9600; // set baud rate to 9600 serial.setup(0, baud); serial.setup("/dev/tty.usbserial-FTFXE503", baud); // set serial port about my PC // flag cFlag = false // init flag that I can use reading point from serial } //-------------------------------------------------------------- void testApp::update(){ byte2 = 0; byte3 = 0; byte4 = 0; // loop between flag is false while (cFlag == false) { byte1 == byte2; byte2 == byte3; byte3 == byte4; byte4 == serial.readByte(); if ((byte1==1)&(byte2==2)&(byte3==3)&(byte4==4)) { // when some bytes become this, flag change true, and escape loop cFlag = true; } } // get value from sensor cFlag == false; // when escape cFlag loop, cFalg is set to false low = serial.readByte(); // after escape flag, I insert low and high value high = serial.readByte(); value = 256 * high + low; // combind low and high value filter = (1 - eps) * filter + eps * value; // through filter x = int(.2 * ofGetWidth() + (.9 - .2) * ofGetWidth() * filter / 1024.0); } //-------------------------------------------------------------- void testApp::draw(){ // smoothing serial.flush(); // set circle color to white ofSetColor(255, 255, 255); // show value about sensor string msg; // make variable sbout message msg += "read" + ofToString(filter) + "\n"; // set value to message object font.drawString(msg, 50, 100); // show message // draw circle from sensor value ofCircle(ofGetWidth()/2, ofGetHeight()/2, filter/10); }
I tried to smooth detecting data refer to the sample python data.
But I couldn't smooth data. my sensor's value were unstable.
I also tried to change a type of value from "signed" to "unsigned", but value were not stable.
And I wrote a code which is decreasing value when sensor get light.
But in either case, it was dark or light, value were decreasing.