Stanley Cohen
/
555_oneshottriggerv1
Onshot program trigger for 555 chip
Diff: main.cpp
- Revision:
- 0:285365ada25d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Apr 01 19:26:16 2015 +0000 @@ -0,0 +1,105 @@ +#include "mbed.h" +#include "SLCD.h" + +// copied from Change state example for basis 02.22.2014 sc +#define PROGNAME "555_onshot trigger v3\r\n" +#define HIGH 1 +#define LOW 0 +#define PIN_2_555 D2 +#define PIN_3_555 D3 +#define PIN_3_CLONE LED_GREEN +#define LEDON LOW +#define LEDOFF HIGH +#define OUTPULSELEN 100 // ms +#define DATADELAY 1 +#define SERIALSPEED 57600 +#define MAX_OUT 1500 // ms +#define MIN_OUT 500 +#define ABORTTIME 3500 +#define INPUTSTART 1 +#define DATARATE 1000 // ms time between data takes. +#define LCDLEN 10 +#define STARTMESS "STRT" +#define BGNMESS "BEGN" + +// this constant won't change: +DigitalOut oneShotIn (PIN_2_555); +// the pin that the pushbutton is attached to +DigitalIn oneShotOut (PIN_3_555); +DigitalOut ledPin(PIN_3_CLONE); // the pin that the LED is attached to +Serial pc(USBTX, USBRX); +SLCD slcd; +Timer milliTimer; + +long oneShotLen; +long timeOut = ABORTTIME; +long nextDataTake = DATARATE; +long oneShotBegin; +long oneShotEnd; +// Variables will change: +int buttonPushCounter = 0; // counter for the number of button presses +int buttonState = 0; // current state of the button +int lastButtonState = 0; // previous state of the button + + +void LCDMess(char *lMess){ + slcd.Home(); + slcd.clear(); + slcd.printf(lMess); +} +void pulseOut (long pulseLen){ + oneShotIn.write(LOW); + wait_us(pulseLen); + oneShotIn.write(HIGH); +} + +void setup() { + + // initialize serial communication: + + pc.printf(PROGNAME); + LCDMess(BGNMESS); + oneShotIn.write(HIGH); + oneShotOut.mode(PullNone); + ledPin.write(LOW); + milliTimer.start(); + milliTimer.reset(); + nextDataTake = DATARATE; + lastButtonState = LOW; +} + + +void loop() { + char lcdData[LCDLEN]; + oneShotLen = 0; + if (milliTimer.read_ms() > nextDataTake){ + LCDMess(STARTMESS); + pulseOut(OUTPULSELEN); + wait_ms(DATADELAY); + buttonState = oneShotOut.read(); + if (buttonState == INPUTSTART) { + oneShotBegin = milliTimer.read_ms(); + ledPin.write(LEDON); + while ((buttonState == INPUTSTART) && (oneShotLen < ABORTTIME)){ + oneShotLen = milliTimer.read_ms(); + //pc.printf("%d\r\n",oneShotLen); + buttonState = oneShotOut.read(); + } + pc.printf("%d\r\n",oneShotLen); + sprintf(lcdData,"%4d",oneShotLen); + LCDMess(lcdData); + ledPin.write(LEDOFF); + milliTimer.reset(); + nextDataTake = DATARATE; + } + + } + +} + +int main(){ + setup(); + while (true) { + loop(); + } +} \ No newline at end of file