Brian Moloney
/
Final_Project_Brian_Moloney
IT Tralee_Brian Moloney_Final Project
main.cpp@0:edb9a7b809a2, 2020-08-18 (annotated)
- Committer:
- bmol
- Date:
- Tue Aug 18 13:12:15 2020 +0000
- Revision:
- 0:edb9a7b809a2
IT Tralee
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bmol | 0:edb9a7b809a2 | 1 | #include "mbed.h" |
bmol | 0:edb9a7b809a2 | 2 | #include "C12832.h" |
bmol | 0:edb9a7b809a2 | 3 | |
bmol | 0:edb9a7b809a2 | 4 | C12832 lcd(p5, p7, p6, p8, p11);//Lcd and connections |
bmol | 0:edb9a7b809a2 | 5 | |
bmol | 0:edb9a7b809a2 | 6 | InterruptIn joystickcenter(p14);//Pushbutton on center of joystick |
bmol | 0:edb9a7b809a2 | 7 | Timer debounce; // define debounce timer |
bmol | 0:edb9a7b809a2 | 8 | |
bmol | 0:edb9a7b809a2 | 9 | AnalogIn pot1(p19); // Pot 1-Program setpoint.Tank level setpoint |
bmol | 0:edb9a7b809a2 | 10 | AnalogIn pot2(p20); // Pot 2-Program variable.Simulate output flow from tank. Process variable (PV) |
bmol | 0:edb9a7b809a2 | 11 | |
bmol | 0:edb9a7b809a2 | 12 | DigitalOut led(LED1); |
bmol | 0:edb9a7b809a2 | 13 | DigitalOut led4(LED4); |
bmol | 0:edb9a7b809a2 | 14 | |
bmol | 0:edb9a7b809a2 | 15 | PwmOut red(p23); //RGB LED with 3 PWM outputs for dimmer control |
bmol | 0:edb9a7b809a2 | 16 | PwmOut green(p24);//Green Led- Status OK |
bmol | 0:edb9a7b809a2 | 17 | PwmOut blue(p25);//Red Led- Alarm Condition |
bmol | 0:edb9a7b809a2 | 18 | PwmOut speaker(p26); //Onboard Speaker- Audible alarm |
bmol | 0:edb9a7b809a2 | 19 | |
bmol | 0:edb9a7b809a2 | 20 | Serial pc(USBTX,USBRX); // Printf to PC over USB |
bmol | 0:edb9a7b809a2 | 21 | |
bmol | 0:edb9a7b809a2 | 22 | void flip() |
bmol | 0:edb9a7b809a2 | 23 | { |
bmol | 0:edb9a7b809a2 | 24 | |
bmol | 0:edb9a7b809a2 | 25 | if (debounce.read_ms()>200) { // only allow toggle if debounce timer has passed 200ms |
bmol | 0:edb9a7b809a2 | 26 | led4 =!led4;// Invert Led4 |
bmol | 0:edb9a7b809a2 | 27 | debounce.reset(); // restart timer when |
bmol | 0:edb9a7b809a2 | 28 | wait(0.5);//pause before moving on in program |
bmol | 0:edb9a7b809a2 | 29 | } |
bmol | 0:edb9a7b809a2 | 30 | |
bmol | 0:edb9a7b809a2 | 31 | } |
bmol | 0:edb9a7b809a2 | 32 | |
bmol | 0:edb9a7b809a2 | 33 | int main () |
bmol | 0:edb9a7b809a2 | 34 | { |
bmol | 0:edb9a7b809a2 | 35 | float pv ; |
bmol | 0:edb9a7b809a2 | 36 | float setpoint; |
bmol | 0:edb9a7b809a2 | 37 | |
bmol | 0:edb9a7b809a2 | 38 | joystickcenter.rise(&flip); // attach the function address to the rising edge |
bmol | 0:edb9a7b809a2 | 39 | |
bmol | 0:edb9a7b809a2 | 40 | speaker.period(1.0/1000.0); // 1000hz period |
bmol | 0:edb9a7b809a2 | 41 | red=1.0; //RGB LED off - PWM 100% duty cycle |
bmol | 0:edb9a7b809a2 | 42 | green=1.0; |
bmol | 0:edb9a7b809a2 | 43 | blue=1.0;//Not used in project |
bmol | 0:edb9a7b809a2 | 44 | |
bmol | 0:edb9a7b809a2 | 45 | |
bmol | 0:edb9a7b809a2 | 46 | while (1) {//continuous loop |
bmol | 0:edb9a7b809a2 | 47 | |
bmol | 0:edb9a7b809a2 | 48 | lcd.cls();//clears LCD |
bmol | 0:edb9a7b809a2 | 49 | lcd.locate(0,0); // Lcd coordinates |
bmol | 0:edb9a7b809a2 | 50 | pv = pot2;//read simulated output flow |
bmol | 0:edb9a7b809a2 | 51 | pv = 100.0 * pot2; // Tank level simulated value in % |
bmol | 0:edb9a7b809a2 | 52 | lcd.printf("Tank Level = %.1f\n\r",pv); |
bmol | 0:edb9a7b809a2 | 53 | setpoint = pot1;// Level simulated setpoint |
bmol | 0:edb9a7b809a2 | 54 | setpoint = 100.0 * pot1; // Tank level setpoint in % |
bmol | 0:edb9a7b809a2 | 55 | lcd.printf("Setpoint = %.1f\n\r",setpoint); |
bmol | 0:edb9a7b809a2 | 56 | debounce.start();//Start of the debounce timer |
bmol | 0:edb9a7b809a2 | 57 | |
bmol | 0:edb9a7b809a2 | 58 | //Serial interface |
bmol | 0:edb9a7b809a2 | 59 | pc.printf("Tank Level = %.1f\n\r",pv); //send tank level to PC |
bmol | 0:edb9a7b809a2 | 60 | pc.printf(" Level setpoint = %.1f\n\r",setpoint); //send setpoint to PC with spacing for clarity |
bmol | 0:edb9a7b809a2 | 61 | wait(0.5);//pause before moving on in program |
bmol | 0:edb9a7b809a2 | 62 | |
bmol | 0:edb9a7b809a2 | 63 | if(pv <= setpoint) { // Determines action of inputs pot1 and pot2 |
bmol | 0:edb9a7b809a2 | 64 | red = 1.0 - pot2; //RGB LED red |
bmol | 0:edb9a7b809a2 | 65 | green = 1.0; |
bmol | 0:edb9a7b809a2 | 66 | led=1.0; |
bmol | 0:edb9a7b809a2 | 67 | speaker = 0.5; //alarm tone using Pwm |
bmol | 0:edb9a7b809a2 | 68 | pc.printf(" Alarm!! Tank Level Low....Top-up valve open\n"); //send setpoint to PC |
bmol | 0:edb9a7b809a2 | 69 | wait(0.5); |
bmol | 0:edb9a7b809a2 | 70 | |
bmol | 0:edb9a7b809a2 | 71 | } else { |
bmol | 0:edb9a7b809a2 | 72 | green = 1.0 - pot2; //RGB LED green |
bmol | 0:edb9a7b809a2 | 73 | red = 1.0; |
bmol | 0:edb9a7b809a2 | 74 | led=0.0; |
bmol | 0:edb9a7b809a2 | 75 | speaker = 0.0; |
bmol | 0:edb9a7b809a2 | 76 | wait(0.5); |
bmol | 0:edb9a7b809a2 | 77 | } |
bmol | 0:edb9a7b809a2 | 78 | if (led4) { |
bmol | 0:edb9a7b809a2 | 79 | pc.printf("................. Outlet valve open\n\r"); |
bmol | 0:edb9a7b809a2 | 80 | wait(0.5); |
bmol | 0:edb9a7b809a2 | 81 | } else { |
bmol | 0:edb9a7b809a2 | 82 | pc.printf("**\n\r");// No alarm |
bmol | 0:edb9a7b809a2 | 83 | wait(0.5); |
bmol | 0:edb9a7b809a2 | 84 | } |
bmol | 0:edb9a7b809a2 | 85 | |
bmol | 0:edb9a7b809a2 | 86 | } |
bmol | 0:edb9a7b809a2 | 87 | |
bmol | 0:edb9a7b809a2 | 88 | } |