Silvan Li / Mbed OS mbedKart_sp

Dependencies:   Motor

Files at this revision

API Documentation at this revision

Comitter:
DerekW2015
Date:
Tue Nov 27 18:01:29 2018 +0000
Child:
1:ad77fbbd36cd
Commit message:
Start

Changed in this revision

4DGL-uLCD-SE.lib Show annotated file Show diff for this revision Revisions of this file
Motor.lib Show annotated file Show diff for this revision Revisions of this file
SDFileSystem.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
rgbSensor.cpp Show annotated file Show diff for this revision Revisions of this file
rgbSensor.h Show annotated file Show diff for this revision Revisions of this file
rgbled.h Show annotated file Show diff for this revision Revisions of this file
wave_player.lib Show annotated file Show diff for this revision Revisions of this file
--- /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