C++ Library for the PsiSwarm Robot - Version 0.8
Dependents: PsiSwarm_V8_Blank_CPP Autonomia_RndmWlk
Fork of PsiSwarmV7_CPP by
led.cpp
00001 /* University of York Robotics Laboratory PsiSwarm Library: LED Functions Source File 00002 * 00003 * Copyright 2016 University of York 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 00007 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS 00008 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00009 * See the License for the specific language governing permissions and limitations under the License. 00010 * 00011 * File: led.cpp 00012 * 00013 * (C) Dept. Electronics & Computer Science, University of York 00014 * James Hilder, Alan Millard, Alexander Horsfield, Homero Elizondo, Jon Timmis 00015 * 00016 * PsiSwarm Library Version: 0.8 00017 * 00018 * October 2016 00019 * 00020 * 00021 */ 00022 00023 #include "psiswarm.h" 00024 00025 char green_led_states; 00026 char red_led_states; 00027 char center_led_state; 00028 00029 char held_red_states; 00030 char held_green_states; 00031 Timeout blink_led_timeout; 00032 00033 unsigned short Led::get_led_states() 00034 { 00035 return (green_led_states << 8) + red_led_states; 00036 } 00037 00038 void Led::set_leds(char green, char red) 00039 { 00040 green_led_states = green; 00041 red_led_states = red; 00042 IF_update_leds(); 00043 } 00044 00045 void Led::set_base_led(char state) 00046 { 00047 i2c_setup.IF_set_base_LED(state); 00048 } 00049 00050 void Led::set_green_leds(char green) 00051 { 00052 green_led_states = green; 00053 IF_update_leds(); 00054 } 00055 00056 void Led::set_red_leds(char red) 00057 { 00058 red_led_states = red; 00059 IF_update_leds(); 00060 } 00061 00062 void Led::set_led(char led, char state) 00063 { 00064 if(state % 2 == 1) red_led_states |= 1 << led; 00065 else red_led_states &= ~(1 << led); 00066 if(state / 2) green_led_states |= 1 << led; 00067 else green_led_states &= ~(1 << led); 00068 IF_update_leds(); 00069 } 00070 00071 void Led::blink_leds(float timeout) 00072 { 00073 save_led_states(); 00074 set_leds(0xFF,0xFF); 00075 blink_led_timeout.attach(this,&Led::restore_led_states, timeout); 00076 } 00077 00078 void Led::set_center_led(char state) 00079 { 00080 set_center_led(state, center_led_brightness); 00081 } 00082 00083 void Led::set_center_led(char state, float brightness) 00084 { 00085 center_led_brightness = brightness; 00086 center_led_state = state; 00087 switch(center_led_state) { 00088 case 0: 00089 center_led_red.write(0); 00090 center_led_green.write(0); 00091 break; 00092 case 1: 00093 center_led_red.write(center_led_brightness / 4); 00094 center_led_green.write(0); 00095 break; 00096 case 2: 00097 center_led_red.write(0); 00098 center_led_green.write(center_led_brightness); 00099 break; 00100 case 3: 00101 center_led_red.write(center_led_brightness / 4); 00102 center_led_green.write(center_led_brightness); 00103 break; 00104 } 00105 } 00106 00107 void Led::set_center_led_brightness(float brightness) 00108 { 00109 set_center_led(center_led_state,brightness); 00110 } 00111 00112 void Led::save_led_states() 00113 { 00114 held_red_states = red_led_states; 00115 held_green_states = green_led_states; 00116 } 00117 00118 void Led::restore_led_states() 00119 { 00120 set_leds(held_green_states,held_red_states); 00121 } 00122 00123 void Led::IF_init_leds() 00124 { 00125 green_led_states = 0; 00126 red_led_states = 0; 00127 center_led_red.period_us(100); 00128 center_led_green.period_us(100); 00129 set_center_led(0,0.2); 00130 } 00131 00132 void Led::IF_update_leds() 00133 { 00134 char led_byte_0 = (((green_led_states & (1 << 3)) == 0) << 7) + 00135 (((green_led_states & (1 << 2)) == 0) << 5) + 00136 (((green_led_states & (1 << 1)) == 0) << 3) + 00137 (((green_led_states & (1)) == 0) << 1) + 00138 (((red_led_states & (1 << 3)) == 0) << 6) + 00139 (((red_led_states & (1 << 2)) == 0) << 4) + 00140 (((red_led_states & (1 << 1)) == 0) << 2) + 00141 (((red_led_states & (1)) == 0)); 00142 char led_byte_1 = (((green_led_states & (1 << 7)) == 0) << 7) + 00143 (((green_led_states & (1 << 6)) == 0) << 5) + 00144 (((green_led_states & (1 << 5)) == 0) << 3) + 00145 (((green_led_states & (1 << 4)) == 0) << 1) + 00146 (((red_led_states & (1 << 7)) == 0) << 6) + 00147 (((red_led_states & (1 << 6)) == 0) << 4) + 00148 (((red_led_states & (1 << 5)) == 0) << 2) + 00149 (((red_led_states & (1 << 4)) == 0)); 00150 i2c_setup.IF_write_to_led_ic(led_byte_0,led_byte_1); 00151 }
Generated on Tue Jul 12 2022 21:11:24 by 1.7.2