Table controller for piswarm-office

Dependencies:   mbed

Fork of PiSwarmTableController by piswarm

Committer:
jah128
Date:
Thu May 22 14:25:10 2014 +0000
Revision:
2:c81f4ef63132
Parent:
1:e4a0d424ac8d
Child:
3:bc7a0f14b28a
Added RF stack to source; turned on IR LEDs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jah128 0:d88fd55a27a6 1 /* University of York Robot Lab
jah128 0:d88fd55a27a6 2 *
jah128 1:e4a0d424ac8d 3 * Pi Swarm Table Controller Demo Code
jah128 0:d88fd55a27a6 4 *
jah128 1:e4a0d424ac8d 5 * This file is intended for use exclusively with the Pi Swarm Table Controller (PCB 1.0)
jah128 0:d88fd55a27a6 6 *
jah128 0:d88fd55a27a6 7 * (C) Dr James Hilder, Dept. Electronics & Computer Science, University of York
jah128 0:d88fd55a27a6 8 *
jah128 1:e4a0d424ac8d 9 * May 2014
jah128 0:d88fd55a27a6 10 *
jah128 0:d88fd55a27a6 11 */
jah128 0:d88fd55a27a6 12
jah128 0:d88fd55a27a6 13 #include "mbed.h"
jah128 2:c81f4ef63132 14 #include "main.h"
jah128 2:c81f4ef63132 15 #include "communications.h"
jah128 0:d88fd55a27a6 16 #include "display.h" //Display driver for the Midas 16x2 I2C Display
jah128 0:d88fd55a27a6 17
jah128 2:c81f4ef63132 18
jah128 1:e4a0d424ac8d 19 PwmOut ir_pwm_out(p21); //PWM Output for the IR LED driver
jah128 1:e4a0d424ac8d 20 DigitalOut ir_led(LED1);
jah128 2:c81f4ef63132 21 DigitalOut tx_led(LED3);
jah128 1:e4a0d424ac8d 22 DigitalOut pir_led(LED4);
jah128 1:e4a0d424ac8d 23 AnalogIn input_1(p20);
jah128 1:e4a0d424ac8d 24 AnalogIn input_2(p19);
jah128 1:e4a0d424ac8d 25 DigitalIn input_3(p18);
jah128 1:e4a0d424ac8d 26 DigitalIn input_4(p17);
jah128 1:e4a0d424ac8d 27 DigitalIn input_5(p16);
jah128 1:e4a0d424ac8d 28 DigitalIn input_6(p15);
jah128 2:c81f4ef63132 29 Serial pc (USBTX, USBRX);
jah128 0:d88fd55a27a6 30
jah128 0:d88fd55a27a6 31 Display display;
jah128 2:c81f4ef63132 32 Alpha433 rf;
jah128 0:d88fd55a27a6 33 Timer system_timer; //System timer is used for timer the on-off periods for the LEDs
jah128 1:e4a0d424ac8d 34 Ticker polling_ticker; //Ticker for polling the input sensors
jah128 0:d88fd55a27a6 35
jah128 1:e4a0d424ac8d 36 int off_period = 950000; //Off-period for the IR LEDs in microseconds
jah128 1:e4a0d424ac8d 37 int on_period = 50000; //On-period for the IR LEDs in microseconds
jah128 2:c81f4ef63132 38 char power = 1; //Output power for the IR LEDs : 0=25%, 1=50%, 2=75%, 3=100% (700mA) [NB The LEDs are rated 20mA and are in parallel runs of 20, so a maximum power of 50% is recommended for long term use]
jah128 2:c81f4ef63132 39 char use_ir_leds = 1; //Set to 0 to disable IR LEDs, 1 to enable
jah128 2:c81f4ef63132 40
jah128 2:c81f4ef63132 41 char input_3_active = 0;
jah128 2:c81f4ef63132 42 char input_4_active = 0;
jah128 2:c81f4ef63132 43 char input_5_active = 0;
jah128 2:c81f4ef63132 44 char input_6_active = 0;
jah128 2:c81f4ef63132 45
jah128 2:c81f4ef63132 46 int input_3_window = 0;
jah128 2:c81f4ef63132 47 int input_4_window = 0;
jah128 2:c81f4ef63132 48 int input_5_window = 0;
jah128 2:c81f4ef63132 49 int input_6_window = 0;
jah128 2:c81f4ef63132 50
jah128 2:c81f4ef63132 51 float polling_rate = 0.1; // Period in seconds to poll sensors
jah128 2:c81f4ef63132 52 int polling_decay = 300; // Number of polls to decrement counters
jah128 2:c81f4ef63132 53 int polling_count = 0;
jah128 0:d88fd55a27a6 54
jah128 0:d88fd55a27a6 55 void init()
jah128 0:d88fd55a27a6 56 {
jah128 0:d88fd55a27a6 57 display.init_display();
jah128 0:d88fd55a27a6 58 display.set_position(0,2);
jah128 0:d88fd55a27a6 59 display.write_string("YORK ROBOTICS",13);
jah128 0:d88fd55a27a6 60 display.set_position(1,3);
jah128 0:d88fd55a27a6 61 display.write_string("LABORATORY",10);
jah128 0:d88fd55a27a6 62 wait(0.45);
jah128 0:d88fd55a27a6 63 display.clear_display();
jah128 1:e4a0d424ac8d 64 display.set_position(0,1);
jah128 1:e4a0d424ac8d 65 display.write_string("Pi Swarm Table",14);
jah128 0:d88fd55a27a6 66 display.set_position(1,3);
jah128 1:e4a0d424ac8d 67 display.write_string("Controller",10);
jah128 0:d88fd55a27a6 68 wait(0.45);
jah128 0:d88fd55a27a6 69 }
jah128 0:d88fd55a27a6 70
jah128 1:e4a0d424ac8d 71 int get_output_power(){
jah128 1:e4a0d424ac8d 72 switch(power){
jah128 1:e4a0d424ac8d 73 case 1: return 500;
jah128 1:e4a0d424ac8d 74 case 2: return 750;
jah128 1:e4a0d424ac8d 75 case 3: return 1000;
jah128 1:e4a0d424ac8d 76 }
jah128 1:e4a0d424ac8d 77 return 250;
jah128 0:d88fd55a27a6 78 }
jah128 0:d88fd55a27a6 79
jah128 1:e4a0d424ac8d 80 void polling(){
jah128 2:c81f4ef63132 81 polling_count ++;
jah128 2:c81f4ef63132 82 char pir_active = 0;
jah128 2:c81f4ef63132 83 char state_changed = 0;
jah128 2:c81f4ef63132 84 if(input_3.read()==1){
jah128 2:c81f4ef63132 85 pir_active = 1;
jah128 2:c81f4ef63132 86 if(input_3_active == 0){
jah128 2:c81f4ef63132 87 state_changed = 1;
jah128 2:c81f4ef63132 88 input_3_active = 1;
jah128 2:c81f4ef63132 89 input_3_window ++;
jah128 2:c81f4ef63132 90 }
jah128 2:c81f4ef63132 91 }else {
jah128 2:c81f4ef63132 92 input_3_active = 0;
jah128 2:c81f4ef63132 93 if(polling_count == polling_decay){
jah128 2:c81f4ef63132 94 input_3_window --;
jah128 2:c81f4ef63132 95 if(input_3_window < 0) input_3_window = 0;
jah128 2:c81f4ef63132 96 }
jah128 2:c81f4ef63132 97 }
jah128 2:c81f4ef63132 98
jah128 2:c81f4ef63132 99 if(input_4.read()==1){
jah128 2:c81f4ef63132 100 pir_active = 1;
jah128 2:c81f4ef63132 101 if(input_4_active == 0){
jah128 2:c81f4ef63132 102 state_changed = 1;
jah128 2:c81f4ef63132 103 input_4_active = 1;
jah128 2:c81f4ef63132 104 input_4_window ++;
jah128 2:c81f4ef63132 105 }
jah128 2:c81f4ef63132 106 }else {
jah128 2:c81f4ef63132 107 input_4_active = 0;
jah128 2:c81f4ef63132 108 if(polling_count == polling_decay){
jah128 2:c81f4ef63132 109 input_4_window --;
jah128 2:c81f4ef63132 110 if(input_4_window < 0) input_4_window = 0;
jah128 2:c81f4ef63132 111 }
jah128 2:c81f4ef63132 112 }
jah128 2:c81f4ef63132 113
jah128 2:c81f4ef63132 114 if(input_5.read()==1){
jah128 2:c81f4ef63132 115 pir_active = 1;
jah128 2:c81f4ef63132 116 if(input_5_active == 0){
jah128 2:c81f4ef63132 117 state_changed = 1;
jah128 2:c81f4ef63132 118 input_5_active = 1;
jah128 2:c81f4ef63132 119 input_5_window ++;
jah128 2:c81f4ef63132 120 }
jah128 2:c81f4ef63132 121 }else {
jah128 2:c81f4ef63132 122 input_5_active = 0;
jah128 2:c81f4ef63132 123 if(polling_count == polling_decay){
jah128 2:c81f4ef63132 124 input_5_window --;
jah128 2:c81f4ef63132 125 if(input_5_window < 0) input_5_window = 0;
jah128 2:c81f4ef63132 126 }
jah128 2:c81f4ef63132 127 }
jah128 2:c81f4ef63132 128
jah128 2:c81f4ef63132 129 if(input_6.read()==1){
jah128 2:c81f4ef63132 130 pir_active = 1;
jah128 2:c81f4ef63132 131 if(input_6_active == 0){
jah128 2:c81f4ef63132 132 state_changed = 1;
jah128 2:c81f4ef63132 133 input_6_active = 1;
jah128 2:c81f4ef63132 134 input_6_window ++;
jah128 2:c81f4ef63132 135 }
jah128 2:c81f4ef63132 136 }else {
jah128 2:c81f4ef63132 137 input_6_active = 0;
jah128 2:c81f4ef63132 138 if(polling_count == polling_decay){
jah128 2:c81f4ef63132 139 input_6_window --;
jah128 2:c81f4ef63132 140 if(input_6_window < 0) input_6_window = 0;
jah128 2:c81f4ef63132 141 }
jah128 2:c81f4ef63132 142 }
jah128 2:c81f4ef63132 143
jah128 2:c81f4ef63132 144 pir_led=pir_active;
jah128 2:c81f4ef63132 145 if(polling_count == polling_decay) {
jah128 2:c81f4ef63132 146 polling_count = 0;
jah128 2:c81f4ef63132 147 state_changed = 1;
jah128 2:c81f4ef63132 148 }
jah128 2:c81f4ef63132 149 if(state_changed == 1){
jah128 2:c81f4ef63132 150 display.clear_display();
jah128 2:c81f4ef63132 151 display.set_position(0,0);
jah128 2:c81f4ef63132 152 char text [17];
jah128 2:c81f4ef63132 153 snprintf(text,17,"3:%i 4:%i 5:%i 6:%i",input_3_window,input_4_window,input_5_window,input_6_window);
jah128 2:c81f4ef63132 154 display.write_string(text,16);
jah128 2:c81f4ef63132 155 }
jah128 0:d88fd55a27a6 156 }
jah128 0:d88fd55a27a6 157
jah128 0:d88fd55a27a6 158 int main()
jah128 0:d88fd55a27a6 159 {
jah128 0:d88fd55a27a6 160 init();
jah128 1:e4a0d424ac8d 161 char phase = 0;
jah128 0:d88fd55a27a6 162 system_timer.start();
jah128 1:e4a0d424ac8d 163 ir_pwm_out.period_us(1000);
jah128 1:e4a0d424ac8d 164 ir_pwm_out.pulsewidth_us(0);
jah128 1:e4a0d424ac8d 165 polling_ticker.attach(&polling,0.1);
jah128 1:e4a0d424ac8d 166
jah128 0:d88fd55a27a6 167
jah128 0:d88fd55a27a6 168 while(1) {
jah128 0:d88fd55a27a6 169 if(phase==0){
jah128 1:e4a0d424ac8d 170 if(system_timer.read_us() >= off_period){
jah128 0:d88fd55a27a6 171 system_timer.reset();
jah128 1:e4a0d424ac8d 172 int pw = get_output_power();
jah128 1:e4a0d424ac8d 173 if(use_ir_leds) ir_pwm_out.pulsewidth_us(pw);
jah128 1:e4a0d424ac8d 174 ir_led=1;
jah128 0:d88fd55a27a6 175 phase = 1;
jah128 0:d88fd55a27a6 176 }
jah128 0:d88fd55a27a6 177 }else{
jah128 1:e4a0d424ac8d 178 if(system_timer.read_us() >= on_period){
jah128 0:d88fd55a27a6 179 system_timer.reset();
jah128 1:e4a0d424ac8d 180 ir_pwm_out.pulsewidth_us(0);
jah128 1:e4a0d424ac8d 181 ir_led=0;
jah128 0:d88fd55a27a6 182 phase = 0;
jah128 0:d88fd55a27a6 183 }
jah128 0:d88fd55a27a6 184 }
jah128 0:d88fd55a27a6 185 }
jah128 2:c81f4ef63132 186 }
jah128 2:c81f4ef63132 187
jah128 2:c81f4ef63132 188
jah128 2:c81f4ef63132 189 void handleUserRFCommand(char sender, char broadcast_message, char request_response, char id, char is_command, char function, char * data, char length){
jah128 2:c81f4ef63132 190 }
jah128 2:c81f4ef63132 191
jah128 2:c81f4ef63132 192 void handleUserRFResponse(char sender, char broadcast_message, char success, char id, char is_command, char function, char * data, char length){
jah128 2:c81f4ef63132 193 }
jah128 2:c81f4ef63132 194
jah128 2:c81f4ef63132 195 void processRawRFData(char * rstring, char cCount){
jah128 2:c81f4ef63132 196 }
jah128 2:c81f4ef63132 197
jah128 2:c81f4ef63132 198
jah128 2:c81f4ef63132 199 void handleData(char * data, char length)
jah128 2:c81f4ef63132 200 {
jah128 2:c81f4ef63132 201 display.set_position(1,1);
jah128 2:c81f4ef63132 202 display.write_string(data,length);
jah128 2:c81f4ef63132 203 }