Eric Glunn
/
4180Project_Digital
Digital Test Code
main.cpp@1:105aefb63c7e, 2020-04-20 (annotated)
- Committer:
- EricGlunn
- Date:
- Mon Apr 20 20:41:38 2020 +0000
- Revision:
- 1:105aefb63c7e
- Parent:
- 0:600cb14e8a31
Digital
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
EricGlunn | 0:600cb14e8a31 | 1 | #include "mbed.h" |
EricGlunn | 0:600cb14e8a31 | 2 | #define reset 0b00000000 //Define masks |
EricGlunn | 0:600cb14e8a31 | 3 | #define digital 0b00100000 |
EricGlunn | 0:600cb14e8a31 | 4 | #define analog 0b01000000 |
EricGlunn | 0:600cb14e8a31 | 5 | #define I2C 0b01100000 |
EricGlunn | 0:600cb14e8a31 | 6 | #define stateMask 0b11100000 |
EricGlunn | 0:600cb14e8a31 | 7 | #define pinMask 0b00011111 |
EricGlunn | 0:600cb14e8a31 | 8 | #define pin1 0b00010000 |
EricGlunn | 0:600cb14e8a31 | 9 | #define pin2 0b00001000 |
EricGlunn | 0:600cb14e8a31 | 10 | #define pin3 0b00000100 |
EricGlunn | 0:600cb14e8a31 | 11 | #define pin4 0b00000010 |
EricGlunn | 0:600cb14e8a31 | 12 | #define pin5 0b00000001 |
EricGlunn | 0:600cb14e8a31 | 13 | |
EricGlunn | 0:600cb14e8a31 | 14 | |
EricGlunn | 0:600cb14e8a31 | 15 | DigitalOut myled(LED1); |
EricGlunn | 0:600cb14e8a31 | 16 | DigitalOut DigitalStatus(LED2); |
EricGlunn | 0:600cb14e8a31 | 17 | |
EricGlunn | 0:600cb14e8a31 | 18 | DigitalIn d1(p21); //Always set these pins for digital in |
EricGlunn | 0:600cb14e8a31 | 19 | DigitalIn d2(p22); |
EricGlunn | 0:600cb14e8a31 | 20 | DigitalIn d3(p23); |
EricGlunn | 0:600cb14e8a31 | 21 | DigitalIn d4(p24); |
EricGlunn | 0:600cb14e8a31 | 22 | DigitalIn d5(p25); |
EricGlunn | 0:600cb14e8a31 | 23 | |
EricGlunn | 0:600cb14e8a31 | 24 | AnalogIn a1(p16); //Always set these pins for analog in |
EricGlunn | 0:600cb14e8a31 | 25 | AnalogIn a2(p17); |
EricGlunn | 0:600cb14e8a31 | 26 | AnalogIn a3(p18); |
EricGlunn | 0:600cb14e8a31 | 27 | AnalogIn a4(p19); |
EricGlunn | 0:600cb14e8a31 | 28 | AnalogIn a5(p20); |
EricGlunn | 0:600cb14e8a31 | 29 | |
EricGlunn | 0:600cb14e8a31 | 30 | |
EricGlunn | 0:600cb14e8a31 | 31 | |
EricGlunn | 0:600cb14e8a31 | 32 | Serial PC(USBTX,USBRX); |
EricGlunn | 0:600cb14e8a31 | 33 | Ticker tickerboi; //Initialize the ticker for Sampling |
EricGlunn | 0:600cb14e8a31 | 34 | |
EricGlunn | 1:105aefb63c7e | 35 | volatile uint8_t DigitalSample; |
EricGlunn | 0:600cb14e8a31 | 36 | volatile unsigned char command; |
EricGlunn | 0:600cb14e8a31 | 37 | volatile unsigned char pins; |
EricGlunn | 0:600cb14e8a31 | 38 | volatile bool DigitalRunning; |
EricGlunn | 0:600cb14e8a31 | 39 | volatile unsigned char state; |
EricGlunn | 0:600cb14e8a31 | 40 | volatile bool newdigital=false; |
EricGlunn | 0:600cb14e8a31 | 41 | |
EricGlunn | 0:600cb14e8a31 | 42 | |
EricGlunn | 0:600cb14e8a31 | 43 | |
EricGlunn | 0:600cb14e8a31 | 44 | |
EricGlunn | 0:600cb14e8a31 | 45 | void sample_func(void){ //sampling function, samples each pin specified and Ors it |
EricGlunn | 0:600cb14e8a31 | 46 | DigitalSample = digital; |
EricGlunn | 0:600cb14e8a31 | 47 | |
EricGlunn | 0:600cb14e8a31 | 48 | if( (command & pin1) == pin1){ |
EricGlunn | 1:105aefb63c7e | 49 | DigitalSample=DigitalSample + d1*pin1; |
EricGlunn | 0:600cb14e8a31 | 50 | } |
EricGlunn | 0:600cb14e8a31 | 51 | if( (command & pin2) == pin2){ |
EricGlunn | 0:600cb14e8a31 | 52 | DigitalSample=DigitalSample + d2*pin2; |
EricGlunn | 0:600cb14e8a31 | 53 | } |
EricGlunn | 0:600cb14e8a31 | 54 | if( (command & pin3) == pin3){ |
EricGlunn | 0:600cb14e8a31 | 55 | DigitalSample=DigitalSample + d3*pin3; |
EricGlunn | 0:600cb14e8a31 | 56 | } |
EricGlunn | 0:600cb14e8a31 | 57 | if( (command & pin4) == pin4){ |
EricGlunn | 0:600cb14e8a31 | 58 | DigitalSample=DigitalSample + d4*pin4; |
EricGlunn | 0:600cb14e8a31 | 59 | } |
EricGlunn | 0:600cb14e8a31 | 60 | if( (command & pin5) == pin5){ |
EricGlunn | 0:600cb14e8a31 | 61 | DigitalSample=DigitalSample + d5*pin5; |
EricGlunn | 0:600cb14e8a31 | 62 | } |
EricGlunn | 0:600cb14e8a31 | 63 | newdigital=true; //tell main loop new data available to send |
EricGlunn | 0:600cb14e8a31 | 64 | } |
EricGlunn | 0:600cb14e8a31 | 65 | |
EricGlunn | 0:600cb14e8a31 | 66 | void SerialInterrupt(void){ |
EricGlunn | 0:600cb14e8a31 | 67 | command=PC.getc(); |
EricGlunn | 0:600cb14e8a31 | 68 | state= command & stateMask; |
EricGlunn | 0:600cb14e8a31 | 69 | switch(state){ |
EricGlunn | 0:600cb14e8a31 | 70 | case reset: |
EricGlunn | 0:600cb14e8a31 | 71 | tickerboi.detach(); //detach Ticker |
EricGlunn | 0:600cb14e8a31 | 72 | DigitalRunning=false; //turn off status LED |
EricGlunn | 0:600cb14e8a31 | 73 | break; |
EricGlunn | 0:600cb14e8a31 | 74 | |
EricGlunn | 0:600cb14e8a31 | 75 | case digital: |
EricGlunn | 0:600cb14e8a31 | 76 | tickerboi.attach(&sample_func, .1); //Ticker will call sample func every 100 ms |
EricGlunn | 0:600cb14e8a31 | 77 | DigitalRunning=true; // Bool to control status LED |
EricGlunn | 0:600cb14e8a31 | 78 | break; |
EricGlunn | 0:600cb14e8a31 | 79 | } |
EricGlunn | 0:600cb14e8a31 | 80 | } |
EricGlunn | 0:600cb14e8a31 | 81 | |
EricGlunn | 0:600cb14e8a31 | 82 | int main() { |
EricGlunn | 0:600cb14e8a31 | 83 | PC.attach(&SerialInterrupt, Serial::RxIrq); |
EricGlunn | 0:600cb14e8a31 | 84 | |
EricGlunn | 0:600cb14e8a31 | 85 | |
EricGlunn | 0:600cb14e8a31 | 86 | while(1) { |
EricGlunn | 0:600cb14e8a31 | 87 | |
EricGlunn | 0:600cb14e8a31 | 88 | DigitalStatus=DigitalRunning; //Status LED = Digital Running bool |
EricGlunn | 0:600cb14e8a31 | 89 | if(newdigital){ //if the sample_func was run, this will send the new data |
EricGlunn | 0:600cb14e8a31 | 90 | PC.putc(DigitalSample); |
EricGlunn | 0:600cb14e8a31 | 91 | newdigital=false; //new data sent, no need to send anything else |
EricGlunn | 0:600cb14e8a31 | 92 | } |
EricGlunn | 0:600cb14e8a31 | 93 | |
EricGlunn | 0:600cb14e8a31 | 94 | myled = 1; //indicate the Main loop is running |
EricGlunn | 0:600cb14e8a31 | 95 | wait(0.2); |
EricGlunn | 0:600cb14e8a31 | 96 | myled = 0; |
EricGlunn | 0:600cb14e8a31 | 97 | wait(0.2); |
EricGlunn | 0:600cb14e8a31 | 98 | } |
EricGlunn | 0:600cb14e8a31 | 99 | } |