Example project for the Rioux Chem control box
Rioux Chem Control Box
This is the example project for the Rioux Chem Control Box. I have posted some youtube videos to guide you through the hardware and software:
Rioux Chem Control Box - Hardware
http://www.youtube.com/watch?v=MoZ92GRYa4s
Rioux Chem Control Box - Software - Part I
http://www.youtube.com/watch?v=_MwaTLL4dyA==
Rioux Chem Control Box - Software - Part II
http://www.youtube.com/watch?v=j_P89izfgoQ
main.cpp@9:c830667212f4, 2021-11-01 (annotated)
- Committer:
- wavenumber
- Date:
- Mon Nov 01 19:49:13 2021 +0000
- Revision:
- 9:c830667212f4
- Parent:
- 7:de452fceafc1
Fixed Thermocouple sign extend error
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emh203 | 0:7798270c1f52 | 1 | #include "mbed.h" |
emh203 | 0:7798270c1f52 | 2 | #include "CHEM_BOX_INTERFACE.h" |
emh203 | 0:7798270c1f52 | 3 | |
emh203 | 0:7798270c1f52 | 4 | Timer ControlLoopTimer; |
emh203 | 0:7798270c1f52 | 5 | float CurrentTemperature; |
emh203 | 0:7798270c1f52 | 6 | |
wavenumber | 2:73a028278c5c | 7 | #define VT100_RED "\033[31;40m" |
wavenumber | 2:73a028278c5c | 8 | #define VT100_GREEN "\033[32;40m" |
wavenumber | 2:73a028278c5c | 9 | #define VT100_YELLOW "\033[33;40m" |
wavenumber | 2:73a028278c5c | 10 | #define VT100_BLUE "\033[34;40m" |
wavenumber | 2:73a028278c5c | 11 | #define VT100_MAGENTA "\033[35;40m" |
wavenumber | 2:73a028278c5c | 12 | #define VT100_CYAN "\033[36;40m" |
wavenumber | 2:73a028278c5c | 13 | #define VT100_WHITE "\033[37;40m" |
wavenumber | 2:73a028278c5c | 14 | #define VT100_RESET "\033c" |
wavenumber | 2:73a028278c5c | 15 | |
wavenumber | 3:cb48919cd5e8 | 16 | extern void WriteRAW_DAC_Value(uint8_t Channel,uint16_t Data); |
emh203 | 0:7798270c1f52 | 17 | |
emh203 | 0:7798270c1f52 | 18 | int main() |
emh203 | 0:7798270c1f52 | 19 | { |
emh203 | 0:7798270c1f52 | 20 | int i; |
wavenumber | 2:73a028278c5c | 21 | char * Color = VT100_WHITE; |
emh203 | 0:7798270c1f52 | 22 | //This function always needs called before you do anythign wit the CHEM BOX. |
emh203 | 0:7798270c1f52 | 23 | InitChemBox(); |
emh203 | 0:7798270c1f52 | 24 | |
wavenumber | 3:cb48919cd5e8 | 25 | GREEN_LED = 1; |
wavenumber | 3:cb48919cd5e8 | 26 | RED_LED = 0; |
wavenumber | 3:cb48919cd5e8 | 27 | |
emh203 | 0:7798270c1f52 | 28 | //Beep 6 times |
emh203 | 0:7798270c1f52 | 29 | for(i=0;i<6;i++) |
emh203 | 0:7798270c1f52 | 30 | { |
emh203 | 0:7798270c1f52 | 31 | Buzz(.05); //Since the Buzz function immediately returns we should wait a bit before calling it again in the loop |
emh203 | 0:7798270c1f52 | 32 | wait(.1); //I want a 50% duty cycle so I will wait twice as long as my previous Buzz() call |
wavenumber | 3:cb48919cd5e8 | 33 | |
wavenumber | 3:cb48919cd5e8 | 34 | GREEN_LED = !GREEN_LED; |
wavenumber | 3:cb48919cd5e8 | 35 | RED_LED = !RED_LED; |
wavenumber | 3:cb48919cd5e8 | 36 | |
emh203 | 0:7798270c1f52 | 37 | } |
wavenumber | 3:cb48919cd5e8 | 38 | |
emh203 | 0:7798270c1f52 | 39 | |
wavenumber | 3:cb48919cd5e8 | 40 | GREEN_LED = 1; |
wavenumber | 3:cb48919cd5e8 | 41 | RED_LED = 0; |
emh203 | 0:7798270c1f52 | 42 | |
emh203 | 0:7798270c1f52 | 43 | //Here is the main super loop |
emh203 | 0:7798270c1f52 | 44 | |
emh203 | 0:7798270c1f52 | 45 | //reset and start our control loop Timer |
emh203 | 0:7798270c1f52 | 46 | ControlLoopTimer.reset(); |
emh203 | 0:7798270c1f52 | 47 | ControlLoopTimer.start(); |
wavenumber | 3:cb48919cd5e8 | 48 | |
emh203 | 0:7798270c1f52 | 49 | while(1) |
emh203 | 0:7798270c1f52 | 50 | { |
emh203 | 0:7798270c1f52 | 51 | //Call this often if you want the USB interface/Terminal |
emh203 | 0:7798270c1f52 | 52 | ProcessTerminal(); |
wavenumber | 3:cb48919cd5e8 | 53 | |
wavenumber | 7:de452fceafc1 | 54 | //Call this process incoming lines from the pump |
wavenumber | 7:de452fceafc1 | 55 | ProcessRS232(); |
wavenumber | 3:cb48919cd5e8 | 56 | |
wavenumber | 3:cb48919cd5e8 | 57 | |
wavenumber | 3:cb48919cd5e8 | 58 | /* |
wavenumber | 2:73a028278c5c | 59 | if(ControlLoopTimer.read_ms() >= 1000) |
wavenumber | 2:73a028278c5c | 60 | { |
wavenumber | 2:73a028278c5c | 61 | ControlLoopTimer.reset(); |
wavenumber | 2:73a028278c5c | 62 | |
wavenumber | 2:73a028278c5c | 63 | |
wavenumber | 2:73a028278c5c | 64 | PC.printf(VT100_RESET); |
wavenumber | 3:cb48919cd5e8 | 65 | |
wavenumber | 2:73a028278c5c | 66 | }*/ |
wavenumber | 2:73a028278c5c | 67 | |
emh203 | 0:7798270c1f52 | 68 | |
emh203 | 0:7798270c1f52 | 69 | /* |
emh203 | 0:7798270c1f52 | 70 | |
emh203 | 0:7798270c1f52 | 71 | //control loop example |
emh203 | 0:7798270c1f52 | 72 | //We will do something ever 250mS. |
emh203 | 0:7798270c1f52 | 73 | //Use a timer and an if statement we won't hold the microprocessor from do other things in the main super loop! |
emh203 | 0:7798270c1f52 | 74 | if(ControlLoopTimer.read_ms >= 250) |
emh203 | 0:7798270c1f52 | 75 | { |
emh203 | 0:7798270c1f52 | 76 | ControlLoopTimer.reset(); |
emh203 | 0:7798270c1f52 | 77 | |
emh203 | 0:7798270c1f52 | 78 | //if 250mSec has elapsed then do our control loop |
emh203 | 0:7798270c1f52 | 79 | |
emh203 | 0:7798270c1f52 | 80 | CurrentTemperature = ReadThermocouple(0); |
emh203 | 0:7798270c1f52 | 81 | |
emh203 | 0:7798270c1f52 | 82 | if(CurrentTemperature < 15.5) |
emh203 | 0:7798270c1f52 | 83 | { |
emh203 | 0:7798270c1f52 | 84 | EnableHeater(0); |
emh203 | 0:7798270c1f52 | 85 | } |
emh203 | 0:7798270c1f52 | 86 | else |
emh203 | 0:7798270c1f52 | 87 | { |
emh203 | 0:7798270c1f52 | 88 | DisableHeater(0); |
emh203 | 0:7798270c1f52 | 89 | } |
emh203 | 0:7798270c1f52 | 90 | |
emh203 | 0:7798270c1f52 | 91 | FlushDigitalIO(); //Remeber, the digital outs are queued up until this is called! |
emh203 | 0:7798270c1f52 | 92 | } |
emh203 | 0:7798270c1f52 | 93 | */ |
emh203 | 0:7798270c1f52 | 94 | } |
emh203 | 0:7798270c1f52 | 95 | |
emh203 | 0:7798270c1f52 | 96 | } |