Random walk for psiSwarm

Dependencies:   PsiSwarmV8_CPP mbed

Fork of PsiSwarm_V8_Blank_CPP by Psi Swarm Robot

Committer:
alixander
Date:
Thu Aug 03 13:00:02 2017 +0000
Revision:
3:5d11c69d95df
Parent:
2:5d37e5fd7141
Random walk for PsiSwarm

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jah128 0:9c0ccd879613 1 /***********************************************************************
jah128 0:9c0ccd879613 2 ** ██████╗ ███████╗██╗███████╗██╗ ██╗ █████╗ ██████╗ ███╗ ███╗ **
jah128 0:9c0ccd879613 3 ** ██╔══██╗██╔════╝██║██╔════╝██║ ██║██╔══██╗██╔══██╗████╗ ████║ **
jah128 0:9c0ccd879613 4 ** ██████╔╝███████╗██║███████╗██║ █╗ ██║███████║██████╔╝██╔████╔██║ **
jah128 0:9c0ccd879613 5 ** ██╔═══╝ ╚════██║██║╚════██║██║███╗██║██╔══██║██╔══██╗██║╚██╔╝██║ **
jah128 0:9c0ccd879613 6 ** ██║ ███████║██║███████║╚███╔███╔╝██║ ██║██║ ██║██║ ╚═╝ ██║ **
jah128 0:9c0ccd879613 7 ** ╚═╝ ╚══════╝╚═╝╚══════╝ ╚══╝╚══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ **
jah128 0:9c0ccd879613 8 ************************************************************************
jah128 2:5d37e5fd7141 9 ** Copyright 2016 University of York - See notice at end of file **
jah128 0:9c0ccd879613 10 ***********************************************************************/
jah128 0:9c0ccd879613 11
jah128 2:5d37e5fd7141 12 /// PsiSwarm C++ Blank Example Code - Version 0.8
jah128 0:9c0ccd879613 13 /// James Hilder, Alan Millard, Alexander Horsfield, Homero Elizondo, Jon Timmis
jah128 0:9c0ccd879613 14
jah128 0:9c0ccd879613 15 /// Include main.h - this includes psiswarm.h all the other necessary core files
jah128 0:9c0ccd879613 16 #include "main.h"
alixander 3:5d11c69d95df 17 #include <cstdlib>
jah128 0:9c0ccd879613 18
jah128 2:5d37e5fd7141 19 Psiswarm psi;
jah128 2:5d37e5fd7141 20
jah128 0:9c0ccd879613 21 char * program_name = "Blank";
jah128 0:9c0ccd879613 22 char * author_name = "YRL";
jah128 2:5d37e5fd7141 23 char * version_name = "0.80";
jah128 0:9c0ccd879613 24
alixander 3:5d11c69d95df 25 Timer t; //set a timer
alixander 3:5d11c69d95df 26 int how_long;
alixander 3:5d11c69d95df 27
jah128 2:5d37e5fd7141 28 ///User code loop: This is where user code should go; it is run as an infinite loop
jah128 0:9c0ccd879613 29 void user_code_loop()
jah128 0:9c0ccd879613 30 {
alixander 3:5d11c69d95df 31 motors.forward(0.2); //simple code, the psiswarm continues forwards
alixander 3:5d11c69d95df 32 led.set_leds(0b10101010,0b01010101); //illuminate circumference with alternating led pattern
alixander 3:5d11c69d95df 33
alixander 3:5d11c69d95df 34 t.start();
alixander 3:5d11c69d95df 35 how_long = t.read();
alixander 3:5d11c69d95df 36
alixander 3:5d11c69d95df 37 if(how_long > 1) {
alixander 3:5d11c69d95df 38 float turn = (rand()%6)/10.0f - 0.25;
alixander 3:5d11c69d95df 39 //float turn =
alixander 3:5d11c69d95df 40
alixander 3:5d11c69d95df 41 char s1[17];
alixander 3:5d11c69d95df 42
alixander 3:5d11c69d95df 43 sprintf(s1,"%.3f",turn);
alixander 3:5d11c69d95df 44 display.clear_display();
alixander 3:5d11c69d95df 45 display.set_position(0,0);
alixander 3:5d11c69d95df 46 display.write_string(s1);
alixander 3:5d11c69d95df 47
alixander 3:5d11c69d95df 48 motors.turn(turn);
alixander 3:5d11c69d95df 49 wait(1);
alixander 3:5d11c69d95df 50 t.reset();
alixander 3:5d11c69d95df 51 }
alixander 3:5d11c69d95df 52
jah128 0:9c0ccd879613 53 }
jah128 0:9c0ccd879613 54
jah128 0:9c0ccd879613 55 ///Place user code here that should be run after initialisation but before the main loop
jah128 0:9c0ccd879613 56 void user_code_setup()
jah128 0:9c0ccd879613 57 {
jah128 0:9c0ccd879613 58 wait(1);
jah128 0:9c0ccd879613 59 display.clear_display();
jah128 0:9c0ccd879613 60 display.set_position(0,0);
alixander 3:5d11c69d95df 61 display.write_string("Going for a walk..."); //display 'Going for a walk...' to indicate robot's function
jah128 0:9c0ccd879613 62 }
jah128 0:9c0ccd879613 63
jah128 0:9c0ccd879613 64 /// Code goes here to handle what should happen when the user switch is pressed
jah128 0:9c0ccd879613 65 void handle_switch_event(char switch_state)
jah128 0:9c0ccd879613 66 {
jah128 0:9c0ccd879613 67 /// Switch_state = 1 if up is pressed, 2 if down is pressed, 4 if left is pressed, 8 if right is pressed and 16 if the center button is pressed
jah128 0:9c0ccd879613 68 /// NB For maximum compatability it is recommended to minimise reliance on center button press
jah128 0:9c0ccd879613 69 }
jah128 0:9c0ccd879613 70
jah128 0:9c0ccd879613 71 void handle_user_serial_message(char * message, char length, char interface)
jah128 0:9c0ccd879613 72 {
jah128 0:9c0ccd879613 73 // This is where user code for handling a (non-system) serial message should go
jah128 0:9c0ccd879613 74 //
jah128 0:9c0ccd879613 75 // message = pointer to message char array
jah128 0:9c0ccd879613 76 // length = length of message
jah128 0:9c0ccd879613 77 // interface = 0 for PC serial connection, 1 for Bluetooth
jah128 0:9c0ccd879613 78 }
jah128 0:9c0ccd879613 79
jah128 0:9c0ccd879613 80 /// The main routine: it is recommended to leave this function alone and add user code to the above functions
jah128 0:9c0ccd879613 81 int main()
jah128 0:9c0ccd879613 82 {
jah128 2:5d37e5fd7141 83 psi.init(); ///psi.init() in psiswarm.cpp sets up the robot
jah128 2:5d37e5fd7141 84 user_code_setup(); ///run user code setup block
jah128 2:5d37e5fd7141 85 user_code_running = 1; ///nb. user code can be paused by external commands sent from PC\BT interfaces
jah128 0:9c0ccd879613 86 while(1) {
jah128 2:5d37e5fd7141 87 user_code_loop(); ///run user code
jah128 0:9c0ccd879613 88 }
jah128 2:5d37e5fd7141 89 }
jah128 2:5d37e5fd7141 90
jah128 2:5d37e5fd7141 91
jah128 2:5d37e5fd7141 92 /***********************************************************************
jah128 2:5d37e5fd7141 93 ** Copyright 2016 University of York **
jah128 2:5d37e5fd7141 94 ** **
jah128 2:5d37e5fd7141 95 ** Licensed under the Apache License, Version 2.0 (the "License") **
jah128 2:5d37e5fd7141 96 ** You may not use this file except in compliance with the License. **
jah128 2:5d37e5fd7141 97 ** You may obtain a copy of the License at **
jah128 2:5d37e5fd7141 98 ** http://www.apache.org/licenses/LICENSE-2.0 Unless required by **
jah128 2:5d37e5fd7141 99 ** applicable law or agreed to in writing, software distributed under **
jah128 2:5d37e5fd7141 100 ** under the License is distributed on an "AS IS" BASIS WITHOUT **
jah128 2:5d37e5fd7141 101 ** WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. **
jah128 2:5d37e5fd7141 102 ** See the License for the specific language governing permissions **
jah128 2:5d37e5fd7141 103 ** and limitations under the License. **
jah128 2:5d37e5fd7141 104 ***********************************************************************/