Tyler Altenhofen / Mbed 2 deprecated TylerPOV

Dependencies:   mbed

Committer:
tyleralt
Date:
Wed Apr 15 20:46:13 2015 +0000
Revision:
2:554edc4b0cf2
Parent:
1:ea12b9153c51
Child:
3:1e9b4a4bf177
Everything is working but we need another 8 bits of data

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tyleralt 0:d9730cf42ecc 1 #include "mbed.h"
tyleralt 1:ea12b9153c51 2 #include <vector>
tyleralt 0:d9730cf42ecc 3 #define BUFFER_SIZE 16
tyleralt 0:d9730cf42ecc 4 #define NUMBER_OF_SLICES 90
tyleralt 0:d9730cf42ecc 5
tyleralt 0:d9730cf42ecc 6 //DigitalOut Pins
tyleralt 0:d9730cf42ecc 7 DigitalOut pushRegister(p23);
tyleralt 0:d9730cf42ecc 8 DigitalOut pushBit(p24);
tyleralt 0:d9730cf42ecc 9
tyleralt 0:d9730cf42ecc 10 DigitalOut dataArmOne(p15);
tyleralt 0:d9730cf42ecc 11 DigitalOut dataArmTwo(p16);
tyleralt 0:d9730cf42ecc 12 DigitalOut dataArmThree(p17);
tyleralt 0:d9730cf42ecc 13 DigitalOut dataArmFour(p18);
tyleralt 0:d9730cf42ecc 14 DigitalOut dataArmFive(p19);
tyleralt 0:d9730cf42ecc 15 DigitalOut dataArmSix(p20);
tyleralt 0:d9730cf42ecc 16 DigitalOut dataArmSeven(p21);
tyleralt 0:d9730cf42ecc 17 DigitalOut dataArmEight(p22);
tyleralt 2:554edc4b0cf2 18 DigitalOut led(LED1);
tyleralt 0:d9730cf42ecc 19
tyleralt 0:d9730cf42ecc 20 //Enable Interupt
tyleralt 0:d9730cf42ecc 21 InterruptIn hallSensor(p25);
tyleralt 0:d9730cf42ecc 22
tyleralt 1:ea12b9153c51 23 //Set Up Timer and ticker
tyleralt 0:d9730cf42ecc 24 Timer rotationTime;
tyleralt 1:ea12b9153c51 25 Ticker updateLeds;
tyleralt 0:d9730cf42ecc 26
tyleralt 0:d9730cf42ecc 27 //Declare global vars
tyleralt 2:554edc4b0cf2 28 double slice_time;
tyleralt 2:554edc4b0cf2 29 double rotate_time;
tyleralt 0:d9730cf42ecc 30 int current_slice;
tyleralt 2:554edc4b0cf2 31 char slice_data [NUMBER_OF_SLICES][8]; //[slice][forSepcificArm][eachBit]
tyleralt 2:554edc4b0cf2 32 double firstTime;
tyleralt 0:d9730cf42ecc 33
tyleralt 0:d9730cf42ecc 34 Serial pc(USBTX, USBRX); // tx, rx
tyleralt 0:d9730cf42ecc 35
tyleralt 0:d9730cf42ecc 36
tyleralt 2:554edc4b0cf2 37 void pushData (char (*bits) [8]){
tyleralt 1:ea12b9153c51 38 for (int i = 0; i < 8; i ++){
tyleralt 2:554edc4b0cf2 39 dataArmOne = bits [0][i] & 0x80;
tyleralt 2:554edc4b0cf2 40 dataArmTwo = bits [1][i] & 0x40;
tyleralt 2:554edc4b0cf2 41 dataArmThree = bits [2][i]& 0x20;
tyleralt 2:554edc4b0cf2 42 dataArmFour = bits [3][i]& 0x10;
tyleralt 1:ea12b9153c51 43 // dataArmFive = *bits [4][i];
tyleralt 1:ea12b9153c51 44 //dataArmSix = *bits [5][i];
tyleralt 1:ea12b9153c51 45 //dataArmSeven = *bits [6][i];
tyleralt 1:ea12b9153c51 46 //dataArmEight = *bits [7][i];
tyleralt 1:ea12b9153c51 47
tyleralt 1:ea12b9153c51 48 pushBit = 1;
tyleralt 1:ea12b9153c51 49 pushBit = 0;
tyleralt 1:ea12b9153c51 50 }
tyleralt 1:ea12b9153c51 51 }
tyleralt 1:ea12b9153c51 52
tyleralt 1:ea12b9153c51 53
tyleralt 1:ea12b9153c51 54 //periodic display interrupt
tyleralt 1:ea12b9153c51 55 void nextLedPush(){
tyleralt 1:ea12b9153c51 56 if (current_slice < NUMBER_OF_SLICES){
tyleralt 1:ea12b9153c51 57 pushData(&slice_data[current_slice]);
tyleralt 1:ea12b9153c51 58 pushRegister = 1;
tyleralt 1:ea12b9153c51 59 pushRegister = 0;
tyleralt 1:ea12b9153c51 60 current_slice ++;
tyleralt 2:554edc4b0cf2 61 } else {
tyleralt 2:554edc4b0cf2 62 updateLeds.detach();
tyleralt 1:ea12b9153c51 63 }
tyleralt 1:ea12b9153c51 64 }
tyleralt 1:ea12b9153c51 65
tyleralt 0:d9730cf42ecc 66 //Hall sensor interupt
tyleralt 0:d9730cf42ecc 67 void rotate_sense(){
tyleralt 0:d9730cf42ecc 68 if (firstTime){
tyleralt 0:d9730cf42ecc 69 rotationTime.reset();
tyleralt 0:d9730cf42ecc 70 rotationTime.start();
tyleralt 0:d9730cf42ecc 71 firstTime = 0;
tyleralt 2:554edc4b0cf2 72 printf("first time");
tyleralt 2:554edc4b0cf2 73 return;
tyleralt 2:554edc4b0cf2 74 } else if(current_slice < NUMBER_OF_SLICES / 2){
tyleralt 2:554edc4b0cf2 75 return;
tyleralt 2:554edc4b0cf2 76 }
tyleralt 2:554edc4b0cf2 77 printf("seconod time \n");
tyleralt 0:d9730cf42ecc 78 rotate_time = rotationTime.read_us();
tyleralt 0:d9730cf42ecc 79 rotationTime.reset();
tyleralt 0:d9730cf42ecc 80 rotationTime.start();
tyleralt 0:d9730cf42ecc 81
tyleralt 2:554edc4b0cf2 82 slice_time = (double) rotate_time/NUMBER_OF_SLICES;
tyleralt 0:d9730cf42ecc 83 current_slice = 0;
tyleralt 2:554edc4b0cf2 84 updateLeds.attach_us(&nextLedPush, slice_time);
tyleralt 0:d9730cf42ecc 85 }
tyleralt 0:d9730cf42ecc 86
tyleralt 0:d9730cf42ecc 87
tyleralt 0:d9730cf42ecc 88 int main() {
tyleralt 2:554edc4b0cf2 89 printf("started");
tyleralt 0:d9730cf42ecc 90 firstTime = 1;
tyleralt 2:554edc4b0cf2 91 current_slice = 90;
tyleralt 0:d9730cf42ecc 92
tyleralt 2:554edc4b0cf2 93 hallSensor.rise(&rotate_sense);
tyleralt 2:554edc4b0cf2 94 for (int i = 0; i < 45; i ++){
tyleralt 2:554edc4b0cf2 95 slice_data [i][0] = 0x80;
tyleralt 1:ea12b9153c51 96 //{1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,0};
tyleralt 0:d9730cf42ecc 97 }
tyleralt 2:554edc4b0cf2 98 for (int i = 45; i < 90; i++){
tyleralt 2:554edc4b0cf2 99 slice_data [i][0] = 0x80;
tyleralt 1:ea12b9153c51 100 //{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
tyleralt 0:d9730cf42ecc 101 }
tyleralt 0:d9730cf42ecc 102
tyleralt 0:d9730cf42ecc 103 while(1) {
tyleralt 2:554edc4b0cf2 104 //TODO: add in the ability to update the buffers
tyleralt 2:554edc4b0cf2 105 led = !led;
tyleralt 2:554edc4b0cf2 106 wait(.25);
tyleralt 2:554edc4b0cf2 107
tyleralt 0:d9730cf42ecc 108 }
tyleralt 0:d9730cf42ecc 109 }