Bluetooth communication for flocking.

Dependencies:   mbed

Fork of BeautifulMemeProject by James Hilder

Committer:
jah128
Date:
Sat Oct 03 22:48:50 2015 +0000
Revision:
0:8a5497a2e366
Child:
6:ff3c66f7372b
Initial commit of PsiSwarm API and example code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jah128 0:8a5497a2e366 1 /* University of York Robotics Laboratory PsiSwarm Library: LED Functions Source File
jah128 0:8a5497a2e366 2 *
jah128 0:8a5497a2e366 3 * File: led.cpp
jah128 0:8a5497a2e366 4 *
jah128 0:8a5497a2e366 5 * (C) Dr James Hilder, Dept. Electronics & Computer Science, University of York
jah128 0:8a5497a2e366 6 *
jah128 0:8a5497a2e366 7 * PsiSwarm Library Version: 0.2
jah128 0:8a5497a2e366 8 *
jah128 0:8a5497a2e366 9 * September 2015
jah128 0:8a5497a2e366 10 *
jah128 0:8a5497a2e366 11 */
jah128 0:8a5497a2e366 12
jah128 0:8a5497a2e366 13 #include "psiswarm.h"
jah128 0:8a5497a2e366 14
jah128 0:8a5497a2e366 15 char green_led_states;
jah128 0:8a5497a2e366 16 char red_led_states;
jah128 0:8a5497a2e366 17 char center_led_state;
jah128 0:8a5497a2e366 18
jah128 0:8a5497a2e366 19 char held_red_states;
jah128 0:8a5497a2e366 20 char held_green_states;
jah128 0:8a5497a2e366 21 Timeout blink_led_timeout;
jah128 0:8a5497a2e366 22
jah128 0:8a5497a2e366 23 unsigned short get_led_states(){
jah128 0:8a5497a2e366 24 return (green_led_states << 8) + red_led_states;
jah128 0:8a5497a2e366 25 }
jah128 0:8a5497a2e366 26
jah128 0:8a5497a2e366 27 void set_leds(char green, char red){
jah128 0:8a5497a2e366 28 green_led_states = green;
jah128 0:8a5497a2e366 29 red_led_states = red;
jah128 0:8a5497a2e366 30 IF_update_leds();
jah128 0:8a5497a2e366 31 }
jah128 0:8a5497a2e366 32
jah128 0:8a5497a2e366 33 void set_base_led(char state){
jah128 0:8a5497a2e366 34 IF_set_base_LED(state);
jah128 0:8a5497a2e366 35 }
jah128 0:8a5497a2e366 36
jah128 0:8a5497a2e366 37 void set_green_leds(char green){
jah128 0:8a5497a2e366 38 green_led_states = green;
jah128 0:8a5497a2e366 39 IF_update_leds();
jah128 0:8a5497a2e366 40 }
jah128 0:8a5497a2e366 41
jah128 0:8a5497a2e366 42 void set_red_leds(char red){
jah128 0:8a5497a2e366 43 red_led_states = red;
jah128 0:8a5497a2e366 44 IF_update_leds();
jah128 0:8a5497a2e366 45 }
jah128 0:8a5497a2e366 46
jah128 0:8a5497a2e366 47 void set_led(char led, char state){
jah128 0:8a5497a2e366 48 if(state % 2 == 1) red_led_states |= 1 << led;
jah128 0:8a5497a2e366 49 else red_led_states &= ~(1 << led);
jah128 0:8a5497a2e366 50 if(state / 2) green_led_states |= 1 << led;
jah128 0:8a5497a2e366 51 else green_led_states &= ~(1 << led);
jah128 0:8a5497a2e366 52 IF_update_leds();
jah128 0:8a5497a2e366 53 }
jah128 0:8a5497a2e366 54
jah128 0:8a5497a2e366 55 void blink_leds(float timeout){
jah128 0:8a5497a2e366 56 held_red_states = red_led_states;
jah128 0:8a5497a2e366 57 held_green_states = green_led_states;
jah128 0:8a5497a2e366 58 set_leds(0xFF,0xFF);
jah128 0:8a5497a2e366 59 blink_led_timeout.attach(&IF_restore_led_state, timeout);
jah128 0:8a5497a2e366 60 }
jah128 0:8a5497a2e366 61
jah128 0:8a5497a2e366 62 void set_center_led(char state){
jah128 0:8a5497a2e366 63 set_center_led(state, center_led_brightness);
jah128 0:8a5497a2e366 64 }
jah128 0:8a5497a2e366 65
jah128 0:8a5497a2e366 66 void set_center_led(char state, float brightness){
jah128 0:8a5497a2e366 67 center_led_brightness = brightness;
jah128 0:8a5497a2e366 68 center_led_state = state;
jah128 0:8a5497a2e366 69 switch(center_led_state){
jah128 0:8a5497a2e366 70 case 0: center_led_red.write(0);
jah128 0:8a5497a2e366 71 center_led_green.write(0);
jah128 0:8a5497a2e366 72 break;
jah128 0:8a5497a2e366 73 case 1: center_led_red.write(center_led_brightness / 4);
jah128 0:8a5497a2e366 74 center_led_green.write(0);
jah128 0:8a5497a2e366 75 break;
jah128 0:8a5497a2e366 76 case 2: center_led_red.write(0);
jah128 0:8a5497a2e366 77 center_led_green.write(center_led_brightness);
jah128 0:8a5497a2e366 78 break;
jah128 0:8a5497a2e366 79 case 3: center_led_red.write(center_led_brightness / 4);
jah128 0:8a5497a2e366 80 center_led_green.write(center_led_brightness);
jah128 0:8a5497a2e366 81 break;
jah128 0:8a5497a2e366 82 }
jah128 0:8a5497a2e366 83 }
jah128 0:8a5497a2e366 84
jah128 0:8a5497a2e366 85 void set_center_led_brightness(float brightness){
jah128 0:8a5497a2e366 86 set_center_led(center_led_state,brightness);
jah128 0:8a5497a2e366 87 }
jah128 0:8a5497a2e366 88
jah128 0:8a5497a2e366 89 void IF_restore_led_state(){
jah128 0:8a5497a2e366 90 set_leds(held_green_states,held_red_states);
jah128 0:8a5497a2e366 91 }
jah128 0:8a5497a2e366 92
jah128 0:8a5497a2e366 93 void IF_init_leds(){
jah128 0:8a5497a2e366 94 green_led_states = 0;
jah128 0:8a5497a2e366 95 red_led_states = 0;
jah128 0:8a5497a2e366 96 center_led_red.period_us(100);
jah128 0:8a5497a2e366 97 center_led_green.period_us(100);
jah128 0:8a5497a2e366 98 set_center_led(0,0.2);
jah128 0:8a5497a2e366 99 }
jah128 0:8a5497a2e366 100
jah128 0:8a5497a2e366 101 void IF_update_leds(){
jah128 0:8a5497a2e366 102 char led_byte_0 = (((green_led_states & (1 << 3)) == 0) << 7) +
jah128 0:8a5497a2e366 103 (((green_led_states & (1 << 2)) == 0) << 5) +
jah128 0:8a5497a2e366 104 (((green_led_states & (1 << 1)) == 0) << 3) +
jah128 0:8a5497a2e366 105 (((green_led_states & (1)) == 0) << 1) +
jah128 0:8a5497a2e366 106 (((red_led_states & (1 << 3)) == 0) << 6) +
jah128 0:8a5497a2e366 107 (((red_led_states & (1 << 2)) == 0) << 4) +
jah128 0:8a5497a2e366 108 (((red_led_states & (1 << 1)) == 0) << 2) +
jah128 0:8a5497a2e366 109 (((red_led_states & (1)) == 0));
jah128 0:8a5497a2e366 110 char led_byte_1 = (((green_led_states & (1 << 7)) == 0) << 7) +
jah128 0:8a5497a2e366 111 (((green_led_states & (1 << 6)) == 0) << 5) +
jah128 0:8a5497a2e366 112 (((green_led_states & (1 << 5)) == 0) << 3) +
jah128 0:8a5497a2e366 113 (((green_led_states & (1 << 4)) == 0) << 1) +
jah128 0:8a5497a2e366 114 (((red_led_states & (1 << 7)) == 0) << 6) +
jah128 0:8a5497a2e366 115 (((red_led_states & (1 << 6)) == 0) << 4) +
jah128 0:8a5497a2e366 116 (((red_led_states & (1 << 5)) == 0) << 2) +
jah128 0:8a5497a2e366 117 (((red_led_states & (1 << 4)) == 0));
jah128 0:8a5497a2e366 118 IF_write_to_led_ic(led_byte_0,led_byte_1);
jah128 0:8a5497a2e366 119 }