Mini Project 10: Displaying stuff from day 7

Dependencies:   DmTouch_UniGraphic UniGraphic mbed

Committer:
ezimmerman17
Date:
Tue Jan 17 23:48:14 2017 +0000
Revision:
14:682bdfcff46a
Parent:
13:b3637adeaa2a
Child:
15:565da8e90073
accel works dandy

Who changed what in which revision?

UserRevisionLine numberNew contents of line
swescott17 0:1ebe73e062a7 1 //MiniProject Day 7
swescott17 0:1ebe73e062a7 2 //If tapped, the mbed will either read from a temperature sensor or the compass
swescott17 1:20661421fa4e 3 #include "stdio.h"
swescott17 1:20661421fa4e 4 #include "mbed.h"
swescott17 1:20661421fa4e 5 #include "string"
swescott17 1:20661421fa4e 6 #include "ILI932x.h"
swescott17 1:20661421fa4e 7 #include "DmTouch.h"
swescott17 0:1ebe73e062a7 8
swescott17 1:20661421fa4e 9
swescott17 1:20661421fa4e 10 #include "Arial12x12.h"
swescott17 1:20661421fa4e 11 #include "Arial24x23.h"
swescott17 1:20661421fa4e 12 //#include "pavement_48x34.h"
swescott17 0:1ebe73e062a7 13 #include "mbed.h"
swescott17 0:1ebe73e062a7 14 #include "compass_sensor.h"
swescott17 0:1ebe73e062a7 15 #include "temp_sensor.h"
swescott17 0:1ebe73e062a7 16 #include "acceler_sensor.h"
swescott17 10:ee5708e7a36a 17 char orient=3; //orientation of the LCD and touch screen
swescott17 0:1ebe73e062a7 18 Serial pc(USBTX, USBRX);
swescott17 0:1ebe73e062a7 19 I2C i2c_port(p9, p10); // configures pins 9,10 for I2C communication with external sensors
swescott17 0:1ebe73e062a7 20 float temp2;
swescott17 0:1ebe73e062a7 21 int avg;
swescott17 10:ee5708e7a36a 22 int choice = 0; //choice for the buttons on the touch screen: 1 = acceleration, 2 = compass, 3 = temperature
swescott17 4:cb3a18844abc 23 //const int addr1 = 0x53<<1;
swescott17 0:1ebe73e062a7 24 DigitalOut led1(LED1); // configures mbed internal LED 1
swescott17 0:1ebe73e062a7 25 DigitalOut led2(LED2); // configures mbed internal LED 2
swescott17 1:20661421fa4e 26 DigitalIn interupt(p20); // sets accelerometer interupt as digital input at pin 20;
ezimmerman17 3:dbb843b8d2f4 27 Timer sensor_timer;
swescott17 12:bd1d030d5c30 28 DmTouch touch(DmTouch::DM_TFT24_104, p5, p6, p7, p8, p11);
swescott17 1:20661421fa4e 29 PinName dataBus[]= {p30, p29, p28, p27, p26, p25, p24, p23};
swescott17 1:20661421fa4e 30 ILI932x myLCD(BUS_8, dataBus, p15, p17, p16, p14, p20, "myLCD", 240, 320); // Bus 8 bit, bus pin array, CS, RST, DC, WR, RD, name, xpixels, ypixels
swescott17 9:0f4c86e7218a 31 bool down, lastDown;
swescott17 9:0f4c86e7218a 32 uint16_t tx, ty;
swescott17 12:bd1d030d5c30 33 Ticker inter_t; //Ticker for the touch screen
swescott17 12:bd1d030d5c30 34 Timer t;
ezimmerman17 14:682bdfcff46a 35 float accel_x,accel_y,accel_mag;
swescott17 11:482a9abbc448 36 float compass_h; //compass heading
ezimmerman17 13:b3637adeaa2a 37 float main_data[2];
swescott17 9:0f4c86e7218a 38
swescott17 10:ee5708e7a36a 39 void UI() //the general UI code for the touch screen
swescott17 9:0f4c86e7218a 40 {
swescott17 9:0f4c86e7218a 41 myLCD.set_font((unsigned char*) Arial24x23);
swescott17 4:cb3a18844abc 42 myLCD.locate(60, 100);
swescott17 10:ee5708e7a36a 43 myLCD.printf("A"); //accleration label
swescott17 10:ee5708e7a36a 44 myLCD.circle(60,100,30,Blue); //acceleration button
swescott17 4:cb3a18844abc 45 myLCD.locate(160, 100);
swescott17 10:ee5708e7a36a 46 myLCD.printf("C"); //compass label
swescott17 10:ee5708e7a36a 47 myLCD.circle(160,100,30,Green); //compass button
swescott17 4:cb3a18844abc 48 myLCD.locate(260, 100);
swescott17 10:ee5708e7a36a 49 myLCD.printf("T"); //temp. label
swescott17 10:ee5708e7a36a 50 myLCD.circle(260,100,30,Red); //temp. button
swescott17 9:0f4c86e7218a 51 }
swescott17 12:bd1d030d5c30 52
swescott17 12:bd1d030d5c30 53 void button()
swescott17 12:bd1d030d5c30 54 {
swescott17 12:bd1d030d5c30 55 myLCD.cls(); //reset
swescott17 12:bd1d030d5c30 56 UI();
swescott17 12:bd1d030d5c30 57 }
swescott17 9:0f4c86e7218a 58
swescott17 9:0f4c86e7218a 59 int main() {
swescott17 10:ee5708e7a36a 60 myLCD.set_orientation(orient); //orientation of the screen
swescott17 10:ee5708e7a36a 61 myLCD.set_font((unsigned char*) Arial24x23); //font
swescott17 10:ee5708e7a36a 62 touch.setOrientation(orient); //orientation of the touch screen
swescott17 10:ee5708e7a36a 63 down = false; //down portion of the touch screen
swescott17 10:ee5708e7a36a 64 lastDown = false; //last down -- what down was last time
swescott17 10:ee5708e7a36a 65 tx = (uint16_t)0; //x-coordinates of the touch screen
swescott17 10:ee5708e7a36a 66 ty = (uint16_t)0; //y-coordinates of the touch screen
swescott17 9:0f4c86e7218a 67 //char sensorData[1];
swescott17 9:0f4c86e7218a 68 led1 = 0;
swescott17 9:0f4c86e7218a 69 led2 = 0;
swescott17 12:bd1d030d5c30 70 t.start();
swescott17 10:ee5708e7a36a 71 UI(); //sets the the UI
swescott17 10:ee5708e7a36a 72 touch.init(); //initializes touch screen
swescott17 11:482a9abbc448 73 compass_config();
swescott17 11:482a9abbc448 74 temperature_config();
ezimmerman17 13:b3637adeaa2a 75 configure_acceleration();
swescott17 9:0f4c86e7218a 76 while(1){
swescott17 9:0f4c86e7218a 77 //myLCD.foreground(Black);
swescott17 12:bd1d030d5c30 78 //myLCD.background(White);
swescott17 12:bd1d030d5c30 79
swescott17 12:bd1d030d5c30 80 t.reset();
swescott17 12:bd1d030d5c30 81 while(t.read()<10)
swescott17 12:bd1d030d5c30 82 {
swescott17 12:bd1d030d5c30 83 touch.readTouchData(tx, ty, down); //reads in touch screen coordinates
swescott17 12:bd1d030d5c30 84 if (down)
swescott17 12:bd1d030d5c30 85 {
swescott17 12:bd1d030d5c30 86 if(tx >= 30 && tx <= 90 && ty >= 70 && ty <= 130) //if the acceleration button is pressed
swescott17 9:0f4c86e7218a 87 {
swescott17 12:bd1d030d5c30 88 if (choice == 2 || choice == 3) //if other buttons were pushed before
swescott17 12:bd1d030d5c30 89 {
swescott17 12:bd1d030d5c30 90 myLCD.cls(); //reset
swescott17 12:bd1d030d5c30 91 UI();
swescott17 12:bd1d030d5c30 92 }
swescott17 12:bd1d030d5c30 93 myLCD.fillcircle(60,100,30,Blue); //establish which button is pushed -- "highlight it"
swescott17 12:bd1d030d5c30 94 myLCD.locate(60, 100);
swescott17 12:bd1d030d5c30 95 myLCD.printf("A");
swescott17 12:bd1d030d5c30 96 choice = 1;
swescott17 9:0f4c86e7218a 97 }
swescott17 12:bd1d030d5c30 98 if(tx >= 130 && tx <= 190 && ty >= 70 && ty <= 130) //if the compass button is pressed
swescott17 9:0f4c86e7218a 99 {
swescott17 12:bd1d030d5c30 100 if (choice == 1 || choice == 3) //if other buttons were pushed before
swescott17 12:bd1d030d5c30 101 {
swescott17 12:bd1d030d5c30 102 myLCD.cls(); //reset
swescott17 12:bd1d030d5c30 103 UI();
swescott17 12:bd1d030d5c30 104 }
swescott17 12:bd1d030d5c30 105 myLCD.fillcircle(160,100,30,Green); //establish which button is pushed
swescott17 12:bd1d030d5c30 106 myLCD.locate(160, 100);
swescott17 12:bd1d030d5c30 107 myLCD.printf("C");
swescott17 12:bd1d030d5c30 108 choice = 2;
swescott17 12:bd1d030d5c30 109
swescott17 9:0f4c86e7218a 110 }
swescott17 12:bd1d030d5c30 111 if(tx >= 230 && tx <= 290 && ty >= 70 && ty <= 130) //if the temperature button is pressed
swescott17 12:bd1d030d5c30 112 {
swescott17 12:bd1d030d5c30 113 if (choice == 1 || choice == 2) //if any other buttons were pushed before
swescott17 12:bd1d030d5c30 114 {
swescott17 12:bd1d030d5c30 115 myLCD.cls(); //reset
swescott17 12:bd1d030d5c30 116 UI();
swescott17 12:bd1d030d5c30 117 }
swescott17 12:bd1d030d5c30 118 myLCD.fillcircle(260,100,30,Red); //establish which button is pushed
swescott17 12:bd1d030d5c30 119 myLCD.locate(260, 100);
swescott17 12:bd1d030d5c30 120 myLCD.printf("T");
swescott17 12:bd1d030d5c30 121 choice = 3;
swescott17 12:bd1d030d5c30 122 }
swescott17 9:0f4c86e7218a 123 }
swescott17 12:bd1d030d5c30 124 else if (lastDown)
swescott17 12:bd1d030d5c30 125 {
swescott17 12:bd1d030d5c30 126 if (choice == 1) //acceleration
swescott17 12:bd1d030d5c30 127 {
swescott17 12:bd1d030d5c30 128 myLCD.locate(60, 100);
swescott17 12:bd1d030d5c30 129 myLCD.printf("A");
swescott17 12:bd1d030d5c30 130 myLCD.fillcircle(60,100,30,Blue);
ezimmerman17 13:b3637adeaa2a 131 getacceleration(main_data);
ezimmerman17 14:682bdfcff46a 132 accel_x = main_data[0];
ezimmerman17 14:682bdfcff46a 133 accel_y = main_data[1];
ezimmerman17 14:682bdfcff46a 134 accel_mag = sqrt((accel_x*accel_x)+(accel_y*accel_y));
ezimmerman17 13:b3637adeaa2a 135 myLCD.locate(80,150);
ezimmerman17 14:682bdfcff46a 136 myLCD.printf("%f m/s^2",accel_mag);
swescott17 12:bd1d030d5c30 137 }
swescott17 12:bd1d030d5c30 138 if (choice == 2) //compass
swescott17 12:bd1d030d5c30 139 {
swescott17 12:bd1d030d5c30 140 myLCD.locate(160, 100);
swescott17 12:bd1d030d5c30 141 myLCD.printf("C");
swescott17 12:bd1d030d5c30 142 myLCD.fillcircle(160,100,30,Green);
swescott17 12:bd1d030d5c30 143 compass_h = compass_n();
swescott17 12:bd1d030d5c30 144 myLCD.locate(80, 150);
swescott17 12:bd1d030d5c30 145 myLCD.printf("%f degrees N", compass_h);
swescott17 12:bd1d030d5c30 146 //compass
swescott17 12:bd1d030d5c30 147 }
swescott17 12:bd1d030d5c30 148 if (choice == 3) //temperature
swescott17 12:bd1d030d5c30 149 {
swescott17 12:bd1d030d5c30 150 myLCD.locate(260, 100);
swescott17 12:bd1d030d5c30 151 myLCD.printf("T");
swescott17 12:bd1d030d5c30 152 myLCD.fillcircle(260,100,30,Red);
swescott17 12:bd1d030d5c30 153 temp2 = temperature();
swescott17 12:bd1d030d5c30 154 myLCD.locate(80, 150);
swescott17 12:bd1d030d5c30 155 myLCD.printf("%f C", temp2);
swescott17 12:bd1d030d5c30 156 }
swescott17 9:0f4c86e7218a 157 }
swescott17 12:bd1d030d5c30 158 wait(0.040);
swescott17 12:bd1d030d5c30 159 lastDown = down;
swescott17 12:bd1d030d5c30 160 }
swescott17 12:bd1d030d5c30 161 inter_t.attach(&button,10);
swescott17 9:0f4c86e7218a 162 }
swescott17 9:0f4c86e7218a 163 //getacceleration();
swescott17 1:20661421fa4e 164 /*wait(1);
swescott17 0:1ebe73e062a7 165 i2c_port.start(); // forces start condition
swescott17 0:1ebe73e062a7 166 if (interupt == 1){
swescott17 0:1ebe73e062a7 167 i2c_port.start();
swescott17 0:1ebe73e062a7 168 i2c_port.write(addr1);
swescott17 0:1ebe73e062a7 169 i2c_port.write(0x30|0x80);
swescott17 0:1ebe73e062a7 170 i2c_port.stop();
swescott17 0:1ebe73e062a7 171 i2c_port.read(addr1,sensorData,1);
swescott17 0:1ebe73e062a7 172 wait(1); //checks for interupt signal from accelerometer
swescott17 0:1ebe73e062a7 173 if (sensorData[0] & 0x40){ //if one tap
swescott17 0:1ebe73e062a7 174 led1 = 1;
swescott17 0:1ebe73e062a7 175 temp2 = temperature();
swescott17 0:1ebe73e062a7 176 pc.printf("%f", temp2);
swescott17 0:1ebe73e062a7 177 }
swescott17 0:1ebe73e062a7 178 if (sensorData[0] & 0x20) { //if two taps
swescott17 0:1ebe73e062a7 179 led2 = 1;
swescott17 0:1ebe73e062a7 180 compass_n(avg);
swescott17 1:20661421fa4e 181 }*/
swescott17 0:1ebe73e062a7 182 }