Esempio n. 1
0
Node::Node(const ZbProperty_t &zbProperty, Topology *topology)
{
    setFlag(ItemIsMovable);
    setFlag(ItemIsSelectable);
    setFlag(ItemSendsGeometryChanges);
    setCacheMode(DeviceCoordinateCache);

    startColor.setRgba(qRgba(0, 255, 255, 255));
    stopColor.setRgba(qRgba(0, 168, 168, 255));

    statue = 0; //表示可移动状态
    blinkStatue = 0; //表示节点没有闪烁

    blinkTimer = new QTimer;
    connect(blinkTimer, SIGNAL(timeout()), this, SLOT(onBlink()));

    pressTimer = new QTimer(this);
    connect(pressTimer, SIGNAL(timeout()), this, SLOT(onPressTimeout()));

    myTopology = topology;

    setText(converSensorName(ZigbeeIOClass::sensorName[zbProperty.sensorType]));
    setNodeType(zbProperty.deviceType);
    setZbProperty(zbProperty);

    pressStaue = 0;

    board = NULL;
}
Esempio n. 2
0
Node::Node(const QString &text, Topology *topology) :
    textStr(text), myTopology(topology)
{
    setFlag(ItemIsMovable);
    setFlag(ItemIsSelectable);
    setFlag(ItemSendsGeometryChanges);
    setCacheMode(DeviceCoordinateCache);

    startColor.setRgba(qRgba(0, 255, 255, 255));
    stopColor.setRgba(qRgba(0, 168, 168, 255));

    statue = 0; //表示可移动状态
    blinkStatue = 0; //表示节点没有闪烁

    blinkTimer = new QTimer(this);
    connect(blinkTimer, SIGNAL(timeout()), this, SLOT(onBlink()));

    pressTimer = new QTimer(this);
    connect(pressTimer, SIGNAL(timeout()), this, SLOT(onPressTimeout()));

    pressStaue = 0;
    board = NULL;
}
Esempio n. 3
0
void CPulseSensor::run() {
	TIMER_T t = CTimer::getUnused();
	if (t >= 0) {
		//
		// setup pulse (adc) pin
		//
		CAdc adPulse(m_pulsePin);
		adPulse.enable();

		//
		// setup timer to makes sure that we take a reading every 2 miliseconds
		//
		CTimer timer(t);
		timer.second(0.002);
		timer.enable();

		//
		// timer interrupt run-loop
		//
		int	N;
		while (isAlive()) {
			//
			// wait for Timer Interrupt
			//
			timer.wait();

			//
			// Read the pulse signal
			//
			Signal = adPulse.read();

			//
			// Analysis pulse signal
			//
			sampleCounter += 2; // keep track of the time in mS with this variable
			N = sampleCounter - lastBeatTime; // monitor the time since the last beat to avoid noise

			//  find the peak and trough of the pulse wave
			if (Signal < thresh && N > (IBI / 5) * 3) { // avoid dichrotic noise by waiting 3/5 of last IBI
				if (Signal < T) {                        // T is the trough
					T = Signal;     // keep track of lowest point in pulse wave
				}
			}

			if (Signal > thresh && Signal > P) { // thresh condition helps avoid noise
				P = Signal;                             // P is the peak
			}                       // keep track of highest point in pulse wave

			//  NOW IT'S TIME TO LOOK FOR THE HEART BEAT
			// signal surges up in value every time there is a pulse
			if (N > 250) {                         // avoid high frequency noise
				if ((Signal > thresh) && (Pulse == false)
						&& (N > (IBI / 5) * 3)) {
					Pulse = true; // set the Pulse flag when we think there is a pulse

					//digitalWrite(blinkPin, HIGH);          // turn on pin 13 LED
					onBlink(HIGH);

					IBI = sampleCounter - lastBeatTime; // measure time between beats in mS
					lastBeatTime = sampleCounter; // keep track of time for next pulse

					if (secondBeat) { // if this is the second beat, if secondBeat == TRUE
						secondBeat = false;             // clear secondBeat flag
						for (int i = 0; i <= 9; i++) { // seed the running total to get a realisitic BPM at startup
							rate[i] = IBI;
						}
					}

					if (firstBeat) { // if it's the first time we found a beat, if firstBeat == TRUE
						firstBeat = false;               // clear firstBeat flag
						secondBeat = true;           // set the second beat flag
						continue;         // IBI value is unreliable so discard it
					}

					// keep a running total of the last 10 IBI values
					word runningTotal = 0; // clear the runningTotal variable

					for (int i = 0; i <= 8; i++) { // shift data in the rate array
						rate[i] = rate[i + 1]; // and drop the oldest IBI value
						runningTotal += rate[i]; // add up the 9 oldest IBI values
					}

					rate[9] = IBI;       // add the latest IBI to the rate array
					runningTotal += rate[9]; // add the latest IBI to runningTotal
					runningTotal /= 10;       // average the last 10 IBI values
					BPM = 60000 / runningTotal; // how many beats can fit into a minute? that's BPM!
					QS = true;                      // set Quantified Self flag
					// QS FLAG IS NOT CLEARED INSIDE THIS ISR
				}
			}

			if (Signal < thresh && Pulse == true) { // when the values are going down, the beat is over

				//digitalWrite(blinkPin, LOW);            // turn off pin 13 LED
				onBlink(LOW);

				Pulse = false;     // reset the Pulse flag so we can do it again
				amp = P - T;                  // get amplitude of the pulse wave
				thresh = amp / 2 + T;      // set thresh at 50% of the amplitude
				P = thresh;                         // reset these for next time
				T = thresh;
			}

			if (N > 2500) {               // if 2.5 seconds go by without a beat
				thresh = 512;                          // set thresh default
				P = 512;                               // set P default
				T = 512;                               // set T default
				lastBeatTime = sampleCounter; // bring the lastBeatTime up to date
				firstBeat = true;                    // set these to avoid noise
				secondBeat = false;            // when we get the heartbeat back
			}

		}
	}
}