Level 2 Project Range Device
Dependencies: N5110 SDFileSystem SRF02 TMP102 mbed
Revision 2:329597081c06, committed 2016-04-01
- Comitter:
- el15pjt
- Date:
- Fri Apr 01 23:09:07 2016 +0000
- Parent:
- 1:5b991c2302e1
- Child:
- 3:8782b8b8658b
- Commit message:
- Added flashing to struct array and and interrupt for the flashing
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Mar 22 20:00:59 2016 +0000
+++ b/main.cpp Fri Apr 01 23:09:07 2016 +0000
@@ -4,27 +4,27 @@
Embedded System Project
EL2645
-
- Have added the N5110 Libary and set up a a basic disply of the Range reading
- as well as added LED indictors to range
*/
-
#include "mbed.h"
#include "SRF02.h"
#include "N5110.h"
-BusOut output(PTB2,PTB3,PTB10,PTB11,PTC11,PTC10);
+#define LOW 0
+#define HIGH 1
+
+DigitalOut rr_led (PTA1);
+DigitalOut a_led (PTC2);
+DigitalOut gg_led(PTB23);
// Ranger object
SRF02 srf02(I2C_SDA,I2C_SCL);
-// UART connection for PC
-Serial pc(USBTX,USBRX);
-
//N5110 Object VCC, SCE,RST, D/C, MOSI,SCLK, LED
N5110 lcd(PTE26,PTA0,PTC4,PTD0,PTD2,PTD1,PTC3);
+Ticker ticker;
+
// K64F on-board LEDs
DigitalOut r_led(LED_RED);
DigitalOut g_led(LED_GREEN);
@@ -34,81 +34,115 @@
InterruptIn sw2(SW2);
InterruptIn sw3(SW3);
+volatile int g_timer_flag = 0;
+
int distance;
int length;
-int alert
+int alert;
+
+char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
-// setup serial port
-void init_serial();
+// struct for state
+struct Alertlevel {
+ char srr_led; // output value
+ char sa_led; // time in state
+ char sgg_led; // array of next states
+ char frr_led;
+ char fa_led;
+ char fgg_led;
+};
+typedef const struct Alertlevel STyp;
+
+STyp Alertlevel[8] = {
+ {LOW,LOW,LOW,LOW,LOW,LOW}, // no output
+ {LOW,LOW,LOW,LOW,LOW,HIGH}, //flash green
+ {LOW,LOW,HIGH,LOW,LOW,LOW}, //steady green
+ {LOW,LOW,HIGH,LOW,HIGH,LOW}, //flash amber
+ {LOW,HIGH,HIGH,LOW,LOW,LOW}, //steady amber
+ {LOW,HIGH,HIGH,HIGH,LOW,LOW}, //flash red
+ {HIGH,HIGH,HIGH,LOW,LOW,LOW},// steady red
+ {LOW,LOW,LOW,HIGH,HIGH,HIGH} // all flash
+};
+// timed interuprt
+void timer_isr();
// set up board
void init_K64F();
-char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
-
int main()
{
lcd.init();
- init_serial();
init_K64F();
-
+ ticker.attach(&timer_isr,0.05);
while(1) {
- // read sensor distance in cm and print over serial port
+// read sensor distance in cm and print over serial port
int distance = srf02.getDistanceCm();
+ length = sprintf(buffer,"D = %i Cm",distance);
+ if (length <= 14)
+ lcd.printString(buffer,0,2);
+// need to refresh display after setting pixels
+ lcd.refresh();
- //serial link reading of range
- pc.printf("Distance = %i Cm\n",distance);
-
- // short delay before next measurement
+// short delay before next measurement
wait(0.25);
- length = sprintf(buffer,"D = %i Cm",distance);
-
- if (length <= 14)
-
- lcd.printString(buffer,0,2);
- // need to refresh display after setting pixels
- lcd.refresh();
+//Range Alert selection use to adjust alert boundarys
+ if (distance >= 200 && distance < 250) {
+ alert = 1; //flash green
+ } else if (distance >= 150 && distance < 200) {
+ alert = 2; //steady green
+ } else if (distance >= 100 && distance < 150) {
+ alert = 3; //flashing amber
+ } else if (distance >= 50 && distance < 100) {
+ alert = 4; //steady amber
+ } else if ( distance > 10 && distance < 50) {
+ alert = 5; //flashing red
+ } else if (distance > 1 && distance <= 10) {
+ alert = 6; //steady red
+ } else if (distance <=1) {
+ alert = 7; //all flashing
+ } else {
+ alert = 0; //no output
+ }
+// Steady light outputs
+ rr_led = Alertlevel[alert].srr_led;
+ a_led = Alertlevel[alert].sa_led;
+ gg_led = Alertlevel[alert].sgg_led;
-//Range Alert selection
- if (distance <= 200) {
- alert = 6;
- } else if (150 <= distance < 200) {
- alert = 6;
- } else if (100 <=distance < 150) {
- alert = 5;
- } else if (50 <= distance < 100) {
- alert = 4;
- } else if ( 10 <=distance < 150) {
- alert = 3;
- } else if (distance <10) {
- alert = 2;
- } else {
- output = 1;
+//Flashing light outputs
+ if (g_timer_flag) {
+ g_timer_flag = 0; // if it has, clear the flag
+
+ if ( Alertlevel[alert].frr_led == HIGH) {
+ rr_led = !rr_led;
+ } else if ( Alertlevel[alert].fa_led == HIGH) {
+ a_led = !a_led;
+ } else if ( Alertlevel[alert].fgg_led == HIGH) {
+ gg_led = !gg_led;
+ }
}
}
}
-
-// Used to return a range readig thru a serial connection
- void init_serial() {
- // set to highest baud - ensure terminal software matches
- pc.baud(115200);
- }
-
-
//Set up board switches and LEDS
- void init_K64F() {
+void init_K64F()
+{
//on-board LEDs are active-low, so set pin high to turn them off.
- r_led = 1;
- g_led = 1;
- b_led = 1;
+ r_led = 1;
+ g_led = 1;
+ b_led = 1;
// since the on-board switches have external pull-ups, we should disable the internal pull-down
// resistors that are enabled by default using InterruptIn
- sw2.mode(PullNone);
- sw3.mode(PullNone);
- }
\ No newline at end of file
+ sw2.mode(PullNone);
+ sw3.mode(PullNone);
+}
+
+
+void timer_isr()
+{
+ g_timer_flag = 1; // set flag in ISR
+}
\ No newline at end of file