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: mbed threeAxis mbed-rtos 4DGL-uLCD-SE
Diff: main.cpp
- Revision:
- 12:2bc6047d219b
- Parent:
- 11:0309bef74ba8
- Child:
- 13:8231d6cce099
--- a/main.cpp Wed Feb 15 14:04:02 2017 -0600
+++ b/main.cpp Wed Dec 15 00:02:35 2021 +0000
@@ -1,22 +1,222 @@
#include "mbed.h"
#include "rtos.h"
-
-DigitalOut led1(LED1);
-DigitalOut led2(LED2);
+#include "uLCD_4DGL.h"
+#include "string"
+#include "threeAxis.h"
+//#define stepToInch 0.0006723474
+//#define stepToInch 0.0007925725
+//#define maxX 11.5
+//#define maxY 6.75
+//#define maxZ 1.75
+
+//Enable is active low.
+
+//xStep, yStep, zStep, xDir, yDir, zDir, xEnable, yEnable, zEnable, stepRatio, xBound, yBound, zBound, xLimit, yLimit, zLimit
+threeAxis table(p23, p25, p21, p24, p26, p22, p19, p18, p20, 0.0007925725, 11.5, 6.75, 1.75, p12, p14, p16);
+
+DigitalOut xLimit(p13);
+DigitalOut yLimit(p15);
+DigitalOut zLimit(p17);
+
+//DigitalOut zStep(p21);
+//DigitalOut zEnable(p20);
+//DigitalOut zDir(p22);
+
+//DigitalOut xEnable(p19);
+//DigitalOut xStep(p23);
+//DigitalOut xDir(p24);
+
+//DigitalOut yEnable(p18);
+//DigitalOut yStep(p25);
+//DigitalOut yDir(p26);
+
+
+Serial bluetooth(p28,p27);
+uLCD_4DGL uLCD(p9,p10,p11);
+DigitalOut actualLED(LED1);
+Mutex LCD;
+/*
+volatile int currX;
+volatile int currY;
+volatile int currZ;
+volatile int toX;
+volatile int toY;
+volatile int toZ;
+*/
Thread thread;
-
-void led2_thread() {
- while (true) {
- led2 = !led2;
- Thread::wait(1000);
+Thread thread2;
+
+
+void parseCoords(std::string coords){
+
+ int start = 0;
+ int end = coords.find(',');
+
+ float tempX = atof(coords.substr(start, end-start).c_str());
+
+ start = end + 1;
+ end = coords.find(',', start);
+
+ float tempY = atof(coords.substr(start, end-start).c_str());
+
+ start = end + 1;
+ end = coords.length();
+ float tempZ = atof(coords.substr(start, end-start).c_str());
+
+ table.goTo(tempX, tempY, tempZ);
+ LCD.lock();
+ uLCD.printf("\n");
+ uLCD.printf("%d, %d, %d", tempX,tempY,tempZ);
+ LCD.unlock();
+
+}
+
+void bluetoothFlush(){
+ char temp;
+ while(bluetooth.readable()){
+ temp = bluetooth.getc();
}
}
-
-int main() {
- thread.start(led2_thread);
-
- while (true) {
- led1 = !led1;
- Thread::wait(500);
+
+void bluetooth_thread(){
+
+ //char bnum=0;
+ while(1) {
+ std::string coords = "";
+ Thread::wait(100);
+
+ if (bluetooth.readable()){
+ while (bluetooth.readable()){
+ char temp = bluetooth.getc();
+ if (temp == 'z'){
+ table.setZero();
+ }
+
+ else{
+ coords += temp;
+ }
+ }
+ //Thread::wait(1000);
+ if (coords.find('z') == -1){
+ LCD.lock();
+ uLCD.printf("\n");
+ uLCD.printf(coords.c_str());
+ LCD.unlock();
+ parseCoords(coords);
+
+ }
+ else{
+ LCD.lock();
+ uLCD.printf("\n");
+ uLCD.printf("Zeroed!");
+ LCD.unlock();
+ }
+ }
+
+
}
}
+
+int main() {
+ //Y axis direction inverted from others to get behavior that makes me happy (rewards = negative, forward = positive)
+ table.invertY();
+ table.invertZ();
+ uLCD.baudrate(300000);
+ wait(0.5);
+
+
+ //I'm going to be honest, my understanding of my own code means that ANY character should start the zero'ing process, and that nothing should skip it
+ //As such its technically a bug that it skips zeroing a given axis if something is entered
+ //However, I like this functionality more than what I intended
+ //So I'm labeling the "bug" as a feature
+ LCD.lock();
+ uLCD.printf("Enter null value to begin X zero, anything else to skip");
+ //LCD.unlock();
+ while(1){
+ if(bluetooth.readable()){
+ bluetoothFlush();
+ break;
+ }
+ }
+ //LCD.lock();
+ uLCD.printf("\n");
+ uLCD.printf("Enter anything to stop");
+ LCD.unlock();
+
+ table.zeroX();
+ uLCD.printf("Running!");
+ while(1){
+ if(bluetooth.readable()){
+ bluetoothFlush();
+ xLimit = 1;
+ break;
+ }
+ }
+
+ LCD.lock();
+ uLCD.cls();
+ uLCD.printf("Enter null value to begin Y zero, anything else to skip");
+ LCD.unlock();
+
+ while(1){
+ if(bluetooth.readable()){
+ bluetoothFlush();
+ break;
+ }
+ }
+
+ LCD.lock();
+ uLCD.printf("\n");
+ uLCD.printf("Enter anything to stop");
+ LCD.unlock();
+
+ table.zeroY();
+ while(1){
+ if(bluetooth.readable()){
+ bluetoothFlush();
+ yLimit = 1;
+ break;
+ }
+ }
+
+ LCD.lock();
+ uLCD.cls();
+ uLCD.printf("Enter null value to begin Z zero, anything else to skip");
+ LCD.unlock();
+
+ while(1){
+ if(bluetooth.readable()){
+ bluetoothFlush();
+ break;
+ }
+ }
+
+ LCD.lock();
+ uLCD.printf("\n");
+ uLCD.printf("Enter anything to stop");
+ LCD.unlock();
+
+ table.zeroZ();
+ while(1){
+ if(bluetooth.readable()){
+ bluetoothFlush();
+ zLimit = 1;
+ break;
+ }
+ }
+
+ LCD.lock();
+ uLCD.cls();
+
+ table.setLimits(true);
+ xLimit = 0;
+ yLimit = 0;
+ zLimit = 0;
+
+ uLCD.printf("Waiting...");
+ LCD.unlock();
+
+ thread.start(bluetooth_thread);
+
+ while(1);
+}