Digital Test Code

Dependencies:   mbed

Committer:
EricGlunn
Date:
Mon Apr 20 20:41:38 2020 +0000
Revision:
1:105aefb63c7e
Parent:
0:600cb14e8a31
Digital

Who changed what in which revision?

UserRevisionLine numberNew 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 }