void ShimmerInterfaceApp::update() { if (shimmer->isStarted()) { shimmer->run(); if (shimmer->hasData()) { //should really have written some kind of function for this... std::vector<ci::osc::Message> msgVec = shimmer->getOSC(); for (int i = 0; i < msgVec.size(); i++) sender.sendMessage(msgVec[i]); msgVec.clear(); msgVec = shimmer->getOSCAccelToSCBusX(); cout << "sooo x-values? wut?: " << msgVec.size() << std::endl; for (int i = 0; i < msgVec.size(); i++) serverSender.sendMessage(msgVec[i]); msgVec.clear(); msgVec = shimmer->getOSCAccelToSCBusY(); for (int i = 0; i < msgVec.size(); i++) serverSender.sendMessage(msgVec[i]); msgVec.clear(); msgVec = shimmer->getOSCAccelToSCBusZ(); for (int i = 0; i < msgVec.size(); i++) serverSender.sendMessage(msgVec[i]); } } }
void SerialCommunicationApp::update() { if (serialInitiallized()){ if(serial.getNumBytesAvailable() > 0){ console() << "Bytes available: " << serial.getNumBytesAvailable() << std::endl; try{ lastString = serial.readStringUntil('\n'); } catch(SerialTimeoutExc e) { console() << "timeout" << endl; } console() << lastString << endl; int16_t temp = lastString[0]; //OSC MESSAGE osc::Message message; message.addIntArg(temp); message.setAddress("coinTrigger"); message.setRemoteEndpoint(host, port); sender.sendMessage(message); TextLayout simple; simple.setFont( Font( "Arial Black", 54 ) ); simple.setColor( Color( .7, .7, .2 ) ); simple.addLine( lastString ); simple.setLeadingOffset( 0 ); mTexture = gl::Texture( simple.render( true, false ) ); bTextureComplete = true; serial.flush(); } } serial.flush(); }
void SerialCommunicationApp::keyDown(KeyEvent event) { //DEBUG int16_t temp = 0; switch (event.getChar()) { case '1': temp = 49; break; case '2': temp = 50; break; case '3': temp = 51; break; } if (temp > 48 && temp < 52) { osc::Message message; //message.addStringArg(lastString); message.addIntArg(temp); message.setAddress("coinTrigger"); message.setRemoteEndpoint(host, port); sender.sendMessage(message); TextLayout simple; simple.setFont( Font( "Arial Black", 54 ) ); simple.setColor( Color( .7, .7, .2 ) ); simple.addLine( to_string(event.getChar()) ); simple.setLeadingOffset( 0 ); mTexture = gl::Texture( simple.render( true, false ) ); bTextureComplete = true; } }
void RogalarmApp::update() { setFullScreen(mFullscreen); if (mKinectConected) { lookingForUser(); } osc::Message message; message.addFloatArg(mUserPos); if (mUser) { message.setAddress("/user/1"); } else { message.setAddress("/nouser"); } message.setRemoteEndpoint(mHost, mPort); mSender.sendMessage(message); if (!mKinectConected) { try { mKinect = Kinect( Kinect::Device() ); mKinectConected = true; } catch( ... ){ mKinectConected = false; } } }
void GesichtertauschApp::heartbeat(double mDeltaTime) { mWatchdogCounter += mDeltaTime; if (mWatchdogCounter > mWatchdogInterval) { mWatchdogCounter = 0.0; console() << "+++ heartbeat" << std::endl; osc::Message mMessage; mMessage.addIntArg(getpid()); mMessage.setAddress("/watchdog/register"); mMessage.setRemoteEndpoint(mWatchdogHost, mWatchdogPort); mWatchdogSender.sendMessage(mMessage); } }
void MilluminApp::update() { while (listener.hasWaitingMessages()) { osc::Message message; listener.getNextMessage(&message); console() << "New message received" << std::endl; console() << "Address: " << message.getAddress() << std::endl; console() << "Num Arg: " << message.getNumArgs() << std::endl; for (int i = 0; i < message.getNumArgs(); i++) { console() << "-- Argument " << i << std::endl; console() << "---- type: " << message.getArgTypeName(i) << std::endl; if (message.getArgType(i) == osc::TYPE_INT32){ try { console() << "------ value: "<< message.getArgAsInt32(i) << std::endl; } catch (int value) { console() << "------ value through exception: "<< value << std::endl; } }else if (message.getArgType(i) == osc::TYPE_FLOAT){ try { console() << "------ value: " << message.getArgAsFloat(i) << std::endl; } catch (float val) { console() << "------ value trough exception: " << val << std::endl; } mRot += 1.f; }else if (message.getArgType(i) == osc::TYPE_STRING){ try { console() << "------ value: " << message.getArgAsString(i).c_str() << std::endl; } catch (std::string str) { console() << "------ value: " << str << std::endl; } } } } osc::Message message; message.addFloatArg( (cos(getElapsedSeconds()) / 2.0f + .5f)*100.f ); message.setAddress("/millumin/selectedLayer/opacity"); message.setRemoteEndpoint(host, port); sender.sendMessage(message); if(getElapsedFrames() % 2 == 0) // for those of us with slower computers randomizeSurface(&mSurface); mTex.update(mSurface); mRot += 0.2f; }
void RogalarmApp::lookingForUser() { if( mKinect.checkNewDepthFrame() ){ ImageSourceRef depthImage = mKinect.getDepthImage(); // make a texture to display mDepthTexture = depthImage; // make a surface for opencv mDepthSurface = depthImage; if(mDepthSurface){ // once the surface is avalable pass it to opencv // had trouble here with bit depth. surface comes in full color, needed to crush it down cv::Mat tmp( toOcv( Channel8u( mDepthSurface ) ) ), input, blurred, thresholded, thresholded2, output; if (mReflectionBottom > 0) { cv::Scalar black( 0, 0, 0 ); cv::Point p1 = cv::Point(0,480 - mReflectionBottom-1); cv::Point p2 = cv::Point(640, 480); cv::rectangle(tmp, p1, p2, black, -1, 8, 0); } if (mReflectionTop > 0) { cv::Scalar black( 0, 0, 0 ); cv::Point p1 = cv::Point(0, 0); cv::Point p2 = cv::Point(640, mReflectionTop); cv::rectangle(tmp, p1, p2, black, -1, 8, 0); } //tmp.copyTo(input, mBackground); cv::blur(tmp, blurred, cv::Size(10,10)); // make two thresholded images one to display and one // to pass to find contours since its process alters the image cv::threshold( blurred, thresholded, mThreshold, 255, CV_THRESH_BINARY); cv::threshold( blurred, thresholded2, mThreshold, 255, CV_THRESH_BINARY); // 2d vector to store the found contours vector<vector<cv::Point> > contours; // find em cv::findContours(thresholded, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); // convert theshold image to color for output // so we can draw blobs on it cv::cvtColor( thresholded2, output, CV_GRAY2RGB ); cv::Scalar color( 0, 255, 255 ); mUser = false; // loop the stored contours for (vector<vector<cv::Point> >::iterator it=contours.begin() ; it < contours.end(); it++ ){ // center abd radius for current blob cv::Point2f center; float radius; // convert the cuntour point to a matrix vector<cv::Point> pts = *it; cv::Mat pointsMatrix = cv::Mat(pts); // pass to min enclosing circle to make the blob cv::minEnclosingCircle(pointsMatrix, center, radius); if (radius > mBlobMin && radius < mBlobMax) { mUserPos = 640 - center.x; mUser = true; if (mNoUserMessage == false) { mNoUserMessage = true; } cv::circle(output, center, radius, color, 3); mStopedTime = getElapsedSeconds(); osc::Message message; message.addFloatArg(mUserPos); message.setAddress("/user/1"); message.setRemoteEndpoint(mHost, mPort); mSender.sendMessage(message); } else if (mNoUserMessage) { osc::Message message; message.addFloatArg(mUserPos); message.setAddress("/nouser"); message.setRemoteEndpoint(mHost, mPort); mSender.sendMessage(message); mNoUserMessage = false; } } cv::Scalar yellow( 0, 255, 255 ); if (mReflectionBottom > 0) { cv::Point p1 = cv::Point(0, 480 - mReflectionBottom-1); cv::Point p2 = cv::Point(640, 480); cv::rectangle(output, p1, p2, yellow, -1, 8, 0); } if (mReflectionTop > 0) { cv::Scalar black( 0, 0, 0 ); cv::Point p1 = cv::Point(0, 0); cv::Point p2 = cv::Point(640, mReflectionTop); cv::rectangle(output, p1, p2, yellow, -1, 8, 0); } mContourTexture = gl::Texture( fromOcv( output ) ); } } if( mKinect.checkNewVideoFrame() ) mColorTexture = mKinect.getVideoImage(); }