示例#1
0
void signalingWriteOutput(int eventType) {
    if (sigData.ledPort1) {
	if (sig_pattern[eventType][sigData.patPos]) {
	    pwmDigitalHi(sigData.ledPort1);
	} else {
	    pwmDigitalLo(sigData.ledPort1);
	}
    }
    if (sigData.ledPort2) {
	if (sig_pattern[eventType][sigData.patPos + sigData.patLen]) {
	    pwmDigitalHi(sigData.ledPort2);
	} else {
	    pwmDigitalLo(sigData.ledPort2);
	}
    }
    if (sigData.beeperPort) {
	if (sigData.beeperType) {  // speaker
	    *sigData.beeperPort->ccr = sig_pattern[eventType][sigData.patPos + sigData.patLen * 2] * SIG_SPEAKER_PULSE_LEN;
	}
	else {  // buzzer
	    if (sig_pattern[eventType][sigData.patPos + sigData.patLen * 2]) {
		pwmDigitalHi(sigData.beeperPort); }
	    else {
		pwmDigitalLo(sigData.beeperPort); }
	}
    }
    if (sigData.pwmPort) {
	*sigData.pwmPort->ccr = sig_pattern[eventType][sigData.patLen * 3];
    }
}
示例#2
0
文件: pwm.c 项目: sedulity11/pdb
void pwmDigitalToggle(pwmPortStruct_t *p) {
    if (pwmDigitalGet(p)) {
	pwmDigitalLo(p);
    } else {
	pwmDigitalHi(p);
    }
}
示例#3
0
// warning: this is a blocking event, only call it when not flying or from a non-critical process
void signalingBeep(unsigned long hz, unsigned long ms) {
    if (sigData.beeperPort && ms) {
	// using a piezo speaker
	if (sigData.beeperType) {
	    *sigData.beeperPort->ccr = SIG_SPEAKER_PULSE_LEN;
	    delay(ms);
	    *sigData.beeperPort->ccr = 0;
		}
	// piezo buzzer with its own oscillator, or LED
	else {
	    pwmDigitalHi(sigData.beeperPort);
		delay(ms);
	    pwmDigitalLo(sigData.beeperPort);
	    }
	}
}
示例#4
0
文件: pwm.c 项目: sedulity11/pdb
pwmPortStruct_t *pwmInitDigitalOut(uint8_t pwmPort) {
    pwmPortStruct_t *p = 0;

    if (pwmValidatePort(pwmPort, 0)) {
	p = &pwmData[pwmPort];
	p->direction = PWM_OUTPUT;
	p->pin = pwmPins[pwmPort];
	p->port = (GPIO_TypeDef *)pwmPorts[pwmPort];

	pwmDigitalLo(p);

	pwmGPIOInit(pwmPorts[pwmPort], pwmPins[pwmPort], GPIO_Mode_OUT);
    }

    return p;
}