Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 0:a9a4c0fd5f8a, committed 2018-11-27
- Comitter:
- DerekW2015
- Date:
- Tue Nov 27 18:01:29 2018 +0000
- Child:
- 1:ad77fbbd36cd
- Commit message:
- Start
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/4DGL-uLCD-SE.lib Tue Nov 27 18:01:29 2018 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/4180_1/code/4DGL-uLCD-SE/#2cb1845d7681
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Motor.lib Tue Nov 27 18:01:29 2018 +0000 @@ -0,0 +1,1 @@ +http://os.mbed.com/users/simon/code/Motor/#f265e441bcd9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDFileSystem.lib Tue Nov 27 18:01:29 2018 +0000 @@ -0,0 +1,1 @@ +http://os.mbed.com/users/neilt6/code/SDFileSystem/#e4d2567200db
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Tue Nov 27 18:01:29 2018 +0000
@@ -0,0 +1,150 @@
+#include "mbed.h"
+#include "rtos.h"
+#include "Motor.h"
+#include "rgbled.h"
+#include "rgbSensor.h"
+#include "SDFileSystem.h"
+#include "wave_player.h"
+
+// Define devices
+Motor left(p22, p16, p15); // pwm, fwd, rev
+Motor right(p23, p19, p20); // pwm, fwd, rev
+BusOut myled(LED1,LED2,LED3,LED4);
+RGBLed myRGBled(p26, p25, p24); // red, green, blue
+rgbSensor rgbsensor(p28, p27);
+Serial blue(p13, p14); // serial tx, serial rx
+SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
+AnalogOut DACout(p18);
+wave_player waver(&DACout);
+
+// Define threads
+Thread thread1;
+Thread thread2;
+Thread thread3;
+
+// Global game actions
+bool game_paused = false;
+void pause_game() {
+ game_paused = true;
+ // code to tell other mbeds game is paused
+}
+
+// Thread for detecting item boxes
+int sensor_addr = 41 << 1;
+void item_thread() {
+ // Read data from color sensor (Clear/Red/Green/Blue)
+ while (true) {
+ myRGBled.write(1.0,0.0,0.0); //red
+ wait(2.0);
+ myRGBled.write(0.0,1.0,0.0); //green
+ wait(2.0);
+ myRGBled.write(0.0,0.0,1.0); //blue
+ wait(2.0);
+ myRGBled.write(1.0,0.2,0.0); //yellow = red + some green
+ wait(2.0);
+ //white with a slow fade to black dimming effect
+ for (float x=1.0; x>=0.0001; x=x*0.99) {
+ myRGBled.write(x, x, x);
+ wait(0.005);
+ }
+ Thread::wait(100);
+ }
+}
+
+
+
+int main() {
+
+
+ // Start threads
+ thread1.start(item_thread);
+
+ // Bluetooth controller code
+ char bnum=0;
+ char bhit=0;
+ while(1) {
+ if (blue.getc()=='!') {
+ if (blue.getc()=='B') { //button data packet
+ bnum = blue.getc(); //button number
+ bhit = blue.getc(); //1=hit, 0=release
+ if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
+ switch (bnum) {
+ case '1': //number button 1, pause
+ if (bhit=='1') {
+ //myled = bnum - '0'; //current button number will appear on LEDs
+ //pause_game();
+ }
+ break;
+ case '2': //number button 2, accelerate
+ if (bhit=='1') {
+ //myled = bnum - '0'; //current button number will appear on LEDs
+ left.speed(1.0);
+ right.speed(1.0);
+ } else {
+ left.speed(0.0);
+ right.speed(0.0);
+ }
+ break;
+ case '3': //number button 3
+ if (bhit=='1') {
+ //myled = bnum - '0'; //current button number will appear on LEDs
+ //add hit code here
+ } else {
+ //add release code here
+ }
+ break;
+ case '4': //number button 4, brakes
+ if (bhit=='1') {
+ //myled = bnum - '0'; //current button number will appear on LEDs
+ //add hit code here
+ } else {
+ //add release code here
+ }
+ break;
+ case '5': //button 5 up arrow
+ if (bhit=='1') {
+ //myled = bnum - '0'; //current button number will appear on LEDs
+ //throw_item();
+ //item_box();
+ } else {
+
+ }
+ break;
+ case '6': //button 6 down arrow
+ if (bhit=='1') {
+ //myled = bnum - '0'; //current button number will appear on LEDs
+ left.speed(-1.0);
+ right.speed(-1.0);
+ } else {
+ left.speed(0.0);
+ right.speed(0.0);
+ }
+ break;
+ case '7': //button 7 left arrow
+ if (bhit=='1') {
+ //myled = bnum - '0'; //current button number will appear on LEDs
+ left.speed(0.3);
+ right.speed(1.0);
+ } else {
+ left.speed(0.0);
+ right.speed(0.0);
+ }
+ break;
+ case '8': //button 8 right arrow
+ if (bhit=='1') {
+ //myled = bnum - '0'; //current button number will appear on LEDs
+ left.speed(1.0);
+ right.speed(0.3);
+ } else {
+ left.speed(0.0);
+ right.speed(0.0);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Tue Nov 27 18:01:29 2018 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/mbed_official/code/mbed-rtos/#58563e6cba1e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Nov 27 18:01:29 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/0ab6a29f35bf \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rgbSensor.cpp Tue Nov 27 18:01:29 2018 +0000
@@ -0,0 +1,68 @@
+#include "mbed.h"
+#include "rgbSensor.h"
+
+rgbSensor::rgbSensor(PinName sda, PinName scl) :
+ _i2c(sda, scl){
+ value_R = 0;
+ value_G = 0;
+ value_B = 0;
+ sensor_addr = 41 << 1;
+
+ _i2c.frequency(200000);
+
+ char id_regval[1] = {146};
+ char data[1] = {0};
+ _i2c.write(sensor_addr,id_regval,1, true);
+ _i2c.read(sensor_addr,data,1,false);
+}
+
+void rgbSensor::update()
+{
+ char clear_reg[1] = {148};
+ char clear_data[2] = {0,0};
+ _i2c.write(sensor_addr,clear_reg,1, true);
+ _i2c.read(sensor_addr,clear_data,2, false);
+
+ value_C = ((int)clear_data[1] << 8) | clear_data[0];
+
+ char red_reg[1] = {150};
+ char red_data[2] = {0,0};
+ _i2c.write(sensor_addr,red_reg,1, true);
+ _i2c.read(sensor_addr,red_data,2, false);
+
+ value_R = ((int)red_data[1] << 8) | red_data[0];
+
+ char green_reg[1] = {152};
+ char green_data[2] = {0,0};
+ _i2c.write(sensor_addr,green_reg,1, true);
+ _i2c.read(sensor_addr,green_data,2, false);
+
+ value_G = ((int)green_data[1] << 8) | green_data[0];
+
+ char blue_reg[1] = {154};
+ char blue_data[2] = {0,0};
+ _i2c.write(sensor_addr,blue_reg,1, true);
+ _i2c.read(sensor_addr,blue_data,2, false);
+
+ value_B = ((int)blue_data[1] << 8) | blue_data[0];
+}
+
+int rgbSensor::get_C()
+{
+ return value_C;
+}
+
+int rgbSensor::get_R()
+{
+ return value_R;
+}
+
+int rgbSensor::get_G()
+{
+ return value_G;
+}
+
+int rgbSensor::get_B()
+{
+ return value_B;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rgbSensor.h Tue Nov 27 18:01:29 2018 +0000
@@ -0,0 +1,18 @@
+class rgbSensor
+{
+protected:
+ I2C _i2c;
+ int sensor_addr;
+ int value_C;
+ int value_R;
+ int value_G;
+ int value_B;
+public:
+ rgbSensor(PinName,PinName);
+ void update();
+ int get_C();
+ int get_R();
+ int get_G();
+ int get_B();
+};
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rgbled.h Tue Nov 27 18:01:29 2018 +0000
@@ -0,0 +1,25 @@
+//Class to control an RGB LED using three PWM pins
+class RGBLed
+{
+public:
+ RGBLed(PinName redpin, PinName greenpin, PinName bluepin);
+ void write(float red,float green, float blue);
+private:
+ PwmOut _redpin;
+ PwmOut _greenpin;
+ PwmOut _bluepin;
+};
+
+RGBLed::RGBLed (PinName redpin, PinName greenpin, PinName bluepin)
+ : _redpin(redpin), _greenpin(greenpin), _bluepin(bluepin)
+{
+ //50Hz PWM clock default a bit too low, go to 2000Hz (less flicker)
+ _redpin.period(0.0005);
+}
+
+void RGBLed::write(float red, float green, float blue)
+{
+ _redpin = red;
+ _greenpin = green;
+ _bluepin = blue;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wave_player.lib Tue Nov 27 18:01:29 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/sravet/code/wave_player/#acc3e18e77ad
