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.
Dependencies: DoubleCoilGun 4DGL-uLCD-SE ExternalIn HumanInterfaceT14 LedOut MCP3021 MODSERIAL Motor1Pwm1Dir PCA9555 PinDetect QED RgbLedPCA9555 WDT_K64F mbed-src
Fork of Telliskivi2plus by
Revision 0:22a7683646d1, committed 2013-09-18
- Comitter:
- Reiko
- Date:
- Wed Sep 18 07:50:53 2013 +0000
- Child:
- 1:79ac4e293661
- Commit message:
- Created new project based on tellis2plus
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BallSens.lib Wed Sep 18 07:50:53 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Reiko/code/BallSens/#962fa32d6675
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CoilGun.lib Wed Sep 18 07:50:53 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Reiko/code/CoilGun/#0e2bdd3d52bc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EthernetInterface.lib Wed Sep 18 07:50:53 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Reiko/code/EthernetInterface/#99356499d898
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ExternalIn.lib Wed Sep 18 07:50:53 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Reiko/code/ExternalIn/#7e487b9595e4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LedOut.lib Wed Sep 18 07:50:53 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Reiko/code/LedOut/#e84e28f3573f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Motor2.lib Wed Sep 18 07:50:53 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Reiko/code/Motor2/#fbd3fa0445e5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PCA9555.lib Wed Sep 18 07:50:53 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Reiko/code/PCA9555/#0373a167d58b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QED.lib Wed Sep 18 07:50:53 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Reiko/code/QED/#72d7f93f2881
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Wed Sep 18 07:50:53 2013 +0000
@@ -0,0 +1,350 @@
+#include "mbed.h"
+#include "EthernetInterface.h"
+//#include "ADXL345_I2C.h"
+//#include "L3G4200D.h"
+//#include "HMC5883L.h"
+#include "PCA9555.h"
+#include "motor.h"
+#include "qed.h"
+#include "ballsens.h"
+#include "ledout.h"
+#include "externalin.h"
+#include "coilgun.h"
+
+#define SERVER_PORT 8042
+
+Ticker sensorUpdate;
+
+DigitalOut led1(LED1);
+
+Serial pc(USBTX, USBRX); // tx, rx
+//ADXL345_I2C accelerometer(p9, p10);
+//L3G4200D gyro(p9, p10);
+//HMC5883L compass(p9, p10);
+
+PCA9555 ioExt(p9, p10, p8, 0x40);
+
+//int readings[3] = {0, 0, 0};
+//int gyroData[3] = {0, 0, 0};
+//int16_t compassData[3] = {0, 0, 0};
+
+//DigitalOut led3(LED3);
+
+volatile int update = 0;
+volatile int extInChanged = 0;
+
+void executeCommand(short *cmd);
+void executeCommandOld(char *buffer);
+
+/*
+void updateSensors() {
+ if (led1 == 1.0) {
+ led1 = 0;
+ } else {
+ led1 = 1.0;
+ }
+ accelerometer.getOutput(readings);
+ pc.printf("<acc:%i:%i:%i>\n", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]);
+
+ gyro.read(gyroData);
+ pc.printf("<gyro:%i:%i:%i>\n", (int16_t)gyroData[0], (int16_t)gyroData[1], (int16_t)gyroData[2]);
+
+ compass.getXYZ(compassData);
+ pc.printf("<comps:%i:%i:%i>\n", compassData[0], compassData[1], compassData[2]);
+}*/
+
+Motor motor1(p25, &ioExt, 0, 1, p5, p6);
+Motor motor2(p24, &ioExt, 2, 3, p7, p11);
+Motor motor3(p23, &ioExt, 4, 5, p12, p13);
+Motor motor4(p22, &ioExt, 6, 7, p14, p15);
+Motor motor5(p21, &ioExt, 9, 8, p16, p17);
+
+LedOut redLed(&ioExt, 13);
+LedOut blueLed(&ioExt, 12);
+LedOut yellowLed(&ioExt, 11);
+
+CoilGun coilgun(p19, p20, p18);
+//CoilGun coilgun(LED3, LED4, p18);
+//Timeout kickFinish;
+
+void updateTick() {
+ //led3 = 1;
+ motor1.pid();
+ motor2.pid();
+ motor3.pid();
+ motor4.pid();
+ motor5.pid();
+ //led3 = 0;
+ update = 1;
+}
+
+void extChangedCallback() {
+ extInChanged = 1;
+}
+
+BallSens ballSens(&ioExt, 10);
+ExternalIn button1(&ioExt, 14);
+ExternalIn button2(&ioExt, 15);
+
+UDPSocket server;
+Endpoint client;
+char buffer[256];
+char sendBuffer[256];
+int charCounter = 0;
+
+DigitalOut led2(LED2);
+
+//void readSerial() {
+
+ //int n = pc.readable();
+ //if (pc.readable()) {
+
+ //pc.printf("Received packet from: %s\n", client.get_address());
+ //pc.printf("n: %d\n", n);
+ //pc.scanf("%s", &buffer);
+ //pc.printf("%c\n", pc.getc());
+ //buffer[charCounter] = pc.getc();
+ //led2 = !led2;
+ /*printf("%c\n", buffer[charCounter]);
+ //pc.printf("%s\n", buffer);
+ if (buffer[charCounter] == '\n') {
+ buffer[charCounter] = '\0';
+ executeCommand(buffer);
+ charCounter = 0;
+ } else {
+ charCounter++;
+ }*/
+ //}
+
+//}
+
+const char *byte_to_binary(int x) {
+ static char b[9];
+ b[0] = '\0';
+
+ int z;
+ for (z = 32768; z > 0; z >>= 1) {
+ strcat(b, ((x & z) == z) ? "1" : "0");
+ }
+
+ return b;
+}
+
+int main (void) {
+ pc.baud(115200);
+ EthernetInterface eth;
+ //eth.init(); //Use DHCP
+ eth.init("192.168.4.1", "255.255.255.0", "192.168.4.8");
+ eth.connect();
+ printf("IP Address is %s\n", eth.getIPAddress());
+
+ server.bind(SERVER_PORT);
+
+ //pc.printf("Starting ADXL345 test...\n");
+ //wait(.001);
+ //pc.printf("Device ID is: 0x%02x\n", accelerometer.getDeviceID());
+ //wait(.001);
+
+ // These are here to test whether any of the initialization fails. It will print the failure
+ /*if (accelerometer.setPowerControl(0x00)){
+ pc.printf("didn't intitialize power control\n");
+ return 0;
+ }*/
+ //Full resolution, +/-16g, 4mg/LSB.
+ /*wait(.001);
+
+ if(accelerometer.setDataFormatControl(0x0B)){
+ pc.printf("didn't set data format\n");
+ return 0;
+ }
+
+ wait(.001);*/
+
+ //3.2kHz data rate.
+ /*if(accelerometer.setDataRate(ADXL345_3200HZ)){
+ pc.printf("didn't set data rate\n");
+ return 0;
+ }
+
+ wait(.001);*/
+
+ //Measurement mode.
+
+ /*if (accelerometer.setPowerControl(MeasurementMode)) {
+ pc.printf("didn't set the power control to measurement\n");
+ return 0;
+ }
+ */
+
+ server.set_blocking(false, 1);
+
+ //int ioExtBefore = ioExt.read();
+ //pc.printf("ioExt: %s\n", byte_to_binary(ioExt.read()));
+ pc.printf("ioExt: %x\n", ioExt.read());
+ ioExt.setDirection(0xC400);
+ ioExt.write(0x0155);
+ //int ioExtAfter = ioExt.read();
+ pc.printf("ioExt: %x\n", ioExt.read());
+ //pc.printf("ioExt: %s\n", byte_to_binary(ioExt.read()));
+
+ ballSens.change(&extChangedCallback);
+ button1.change(&extChangedCallback);
+ button2.change(&extChangedCallback);
+
+ //InterruptIn change(p8);
+ //change.rise(&ballCallBack);
+ //change.fall(&ballCallBack);
+
+
+ redLed.set();
+ //blueLed.set();
+ //yellowLed.set();
+
+ //int charCount = sprintf(sendBuffer, "<ready>");
+ //server.sendTo(client, sendBuffer, charCount);
+
+ sensorUpdate.attach(&updateTick, 1.0 / 60.0);
+
+ led1 = 1;
+
+ while (1) {
+ //coilgun.kick(5000);
+ //kickFinish.detach();
+ //kickFinish.attach_us(&coilgun, &CoilGun::kickEnd, 1000);
+
+ if (update) {
+ update = 0;
+ ioExt.writePins();
+ //coilgun.kick(100);
+
+ //led3 = 1;
+ //updateSensors();
+ //pc.printf("update");
+ /*motor1.pid();
+ motor2.pid();
+ motor3.pid();
+ motor4.pid();
+ motor5.pid();*/
+
+ //led3 = 0;
+ //int charCount = sprintf(sendBuffer, "<speeds:%d:%d:%d:%d:%d>", motor1.getSpeed(), motor2.getSpeed(), motor3.getSpeed(), motor4.getSpeed(), motor5.getSpeed());
+ //server.sendTo(client, sendBuffer, charCount);
+ //pc.printf("<speeds:%d:%d:%d:%d:%d>\n", motor1.getSpeed(), motor2.getSpeed(), motor3.getSpeed(), motor4.getSpeed(), motor5.getSpeed());
+ //redLed.toggle();
+ led1 = !led1;
+ }
+
+ if (extInChanged) {
+ extInChanged = 0;
+ bool ballState = ballSens.read();
+ bool button1State = button1.read();
+ bool button2State = button2.read();
+ if (button1State) {
+ led1 = 1;
+ } else {
+ led1 = 0;
+ }
+ pc.printf("<ball:%d>\n", ballState ? 1 : 0);
+ pc.printf("<btn1:%d>\n", button1State ? 1 : 0);
+ pc.printf("<btn2:%d>\n", button2State ? 1 : 0);
+ }
+
+ //printf("\nWait for packet...\n");
+
+ int n = server.receiveFrom(client, buffer, sizeof(buffer));
+
+ if (n > 0) {
+ //pc.printf("Received packet from: %s\n", client.get_address());
+ //pc.printf("n: %d\n", n);
+ buffer[n] = '\0';
+ //server.sendTo(client, buffer, n);
+ executeCommandOld(buffer);
+ //coilgun.kick(1000);
+ //executeCommand((short*)buffer);
+ }
+
+ //int n = pc.readable();
+ /*if (pc.readable()) {
+ //pc.printf("Received packet from: %s\n", client.get_address());
+ //pc.printf("n: %d\n", n);
+ //pc.scanf("%s", &buffer);
+ buffer[charCounter] = pc.getc();
+ //pc.printf("%c\n", buffer[charCounter]);
+ //fflush(stdout);
+ //fflush(stdin);
+ //pc.printf("%s\n", buffer);
+ if (buffer[charCounter] == '\n') {
+ buffer[charCounter] = '\0';
+ executeCommand(buffer);
+ charCounter = 0;
+ } else {
+ charCounter++;
+ }
+
+ //server.sendTo(client, buffer, n);
+ }*/
+ }
+}
+
+void executeCommand(short *cmd) {
+ if (cmd[0] == 1) {
+ motor1.setSpeed(cmd[1]);
+ motor2.setSpeed(cmd[2]);
+ motor3.setSpeed(cmd[3]);
+ motor4.setSpeed(cmd[4]);
+ motor5.setSpeed(cmd[5]);
+ } else if (cmd[0] == 2) {
+ int charCount = sprintf(sendBuffer, "<speeds:%d:%d:%d:%d:%d>", motor1.getSpeed(), motor2.getSpeed(), motor3.getSpeed(), motor4.getSpeed(), motor5.getSpeed());
+ //pc.printf("%d\n", sizeof(sendBuffer));
+ //pc.printf("sendTo %s\n", client.get_address());
+ server.sendTo(client, sendBuffer, charCount);
+ led2 = !led2;
+ } else if (cmd[0] == 3) {
+ pc.printf("kick\n");
+ coilgun.kick(cmd[1]);
+ } else if (cmd[0] == 4) {
+ pc.printf("charge\n");
+ coilgun.setCharge(cmd[1]);
+ }
+}
+
+void executeCommandOld(char *buffer) {
+ pc.printf("%s\n", buffer);
+ char *cmd;
+ cmd = strtok(buffer, " ");
+
+ //pc.printf("%s\n", cmd);
+
+ if (strncmp(cmd, "speeds", 6) == 0) {
+ motor1.setSpeed(atoi(strtok(NULL, " ")));
+ motor2.setSpeed(atoi(strtok(NULL, " ")));
+ motor3.setSpeed(atoi(strtok(NULL, " ")));
+ motor4.setSpeed(atoi(strtok(NULL, " ")));
+ motor5.setSpeed(atoi(strtok(NULL, " ")));
+ } else if (strncmp(cmd, "gs", 2) == 0) {
+ int charCount = sprintf(sendBuffer, "<speeds:%d:%d:%d:%d:%d>", motor1.getSpeed(), motor2.getSpeed(), motor3.getSpeed(), motor4.getSpeed(), motor5.getSpeed());
+ //pc.printf("%d\n", sizeof(sendBuffer));
+ //pc.printf("sendTo %s\n", client.get_address());
+ server.sendTo(client, sendBuffer, charCount);
+ led2 = !led2;
+ } else if (strncmp(cmd, "k", 1) == 0) {
+ pc.printf("kick\n");
+ int length = atoi(strtok(NULL, " "));
+ coilgun.kick(length);
+ //kickFinish.detach();
+ //kickFinish.attach_us(&coilgun, &CoilGun::kickEnd, length);
+ } else if (strncmp(cmd, "c", 1) == 0) {
+ pc.printf("charge\n");
+ coilgun.setCharge(atoi(strtok(NULL, " ")));
+ } else if (strncmp(cmd, "d", 1) == 0) {
+ pc.printf("discharge\n");
+ coilgun.discharge();
+ } /*else if (strncmp(cmd, "t", 1) == 0) {
+ float newPWM = atof(strtok(NULL, " "));
+ motor1.setPWM(newPWM);
+ motor2.setPWM(newPWM);
+ motor3.setPWM(newPWM);
+ motor4.setPWM(newPWM);
+ motor5.setPWM(newPWM);
+ }*/
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Wed Sep 18 07:50:53 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-rtos/#ee87e782d34f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Sep 18 07:50:53 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/e3affc9e7238 \ No newline at end of file
