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 mbed-rtos TextLCD
Diff: main.cpp
- Revision:
- 12:d9c133b360b0
- Parent:
- 11:0309bef74ba8
- Child:
- 13:c681f340909b
--- a/main.cpp Wed Feb 15 14:04:02 2017 -0600
+++ b/main.cpp Tue Feb 05 16:20:32 2019 +0000
@@ -1,22 +1,201 @@
#include "mbed.h"
#include "rtos.h"
-
+#include "TextLCD.h"
+#include "iostream"
+#include "SETUP.hpp"
+#include "stdio.h"
+#include "string.h"
+
+//Digital Outputs
DigitalOut led1(LED1);
DigitalOut led2(LED2);
-Thread thread;
-
-void led2_thread() {
- while (true) {
+
+//Thread Setups
+Thread lcd_thread;
+Thread led_thread;
+TextLCD lcd(D0,D1,D4,D5,D6,D7); // rs, e, d4-d7
+Serial pc(USBTX, USBRX); //Define serial namespace so the serial comms can be printed to
+
+
+//Switch toggling to bools for readability
+InterruptIn button_up(A0); // UP BUTTON
+InterruptIn button_down(A1); // These setup the button interupts
+InterruptIn button_start(A2); // START / STOP BUTTON
+InterruptIn button_funct(A3);// Random pin CHANGE FOR FUNCTION BUTTON
+InterruptIn button_select(A4);// Random pin CHANGE FOR SELECT BUTTON
+
+PwmOut Tendon_Power(PE_8);
+
+//VARIABLE DEFINITIONS
+int No_Of_Rotations;
+int Function;
+bool Twist_Go;
+bool Anneal_Go;
+bool Test_Go;
+bool Select;
+
+int turns_done;
+int turns_todo;
+int Loop;
+int Wait_Time;//IN SECONDS
+
+int Duty_Cycle;
+int Power_Time;
+
+
+//Thread Functions
+void LCD_thread(){
+ while(1){
+ //lcd.printf("Test\n");
+ lcd.cls();
+ if(Function == 0){
+ lcd.printf("Mode: Anneal\n");
+ lcd.printf("Loop:%d Wait:%d\n",Loop,Wait_Time);
+ }else if(Function == 1){
+ lcd.printf("Mode: Test\n");
+ lcd.printf("Duty: %d Time: %d\n",Duty_Cycle,Power_Time);
+ }else if(Function == 2){
+
+ lcd.printf("Mode: Turn\n");
+ lcd.printf("Done: %d ToDo: %d\n",turns_done,turns_todo);
+ }
+ Thread::wait(5000);
+ lcd.cls();
+ Function = Function +1;
+ if(Function >2)
+ {
+ Function = 0;
+ }
+ }
+}
+void LED_thread(){
+ while (1){
led2 = !led2;
Thread::wait(1000);
}
}
-
-int main() {
- thread.start(led2_thread);
-
- while (true) {
- led1 = !led1;
- Thread::wait(500);
+//Interrupt functions
+void up(){//Action if the up button is pressed increment
+ if (Function == 0){
+ No_Of_Rotations = No_Of_Rotations + 1;//Increases Turn number
+ }else if (Function == 1){
+ if (Select == false){
+ Loop = Loop + 1; //Increases Repetitions in Annealing
+ }else if (Select == true){
+ Wait_Time = Wait_Time + 1; //Increases Wait time
+ }
+ }else if (Function == 2){
+ if (Select == false){
+ if (Duty_Cycle < 100){
+ Duty_Cycle = Duty_Cycle + 10; //Increases Testing Duty Cycle
+ }}else if (Select == true){
+ Power_Time = Power_Time + 1; //Increases time on
+ }
+ }
+}
+void down(){ //Action if the down button is pressed decrement
+ if (Function == 0){
+ No_Of_Rotations = No_Of_Rotations - 1;
+ }else if (Function == 1){
+ if (Select == false){
+ if (Loop > 0){
+ Loop = Loop - 1;
+ }
+ }else if (Select == true){
+ if (Wait_Time > 0){
+ Wait_Time = Wait_Time - 1;
+ }
+ }
+ }else if (Function == 2){
+ if (Select == false){
+ if (Duty_Cycle > 0){
+ Duty_Cycle = Duty_Cycle - 10; //Decreases duty
+ }}else if (Select == true){
+ if (Power_Time > 0){
+ Power_Time = Power_Time - 1; //Decreases Time on
+ }
+ }
+ }
+}
+void start_stop() { //Action if the Start/Stop button is pressed
+ if (Function == 0)//Twist selected
+ {
+ Twist_Go = !Twist_Go;//toggle used for coiling and twisting
+ }else if (Function == 1){ //Annealing selected
+ Anneal_Go = !Anneal_Go;//toggle
+ }else if (Function == 2){ //Testing selected
+ Test_Go = !Test_Go;//toggle
+ }
+}
+void Function_Selection() { //Action if the Function button is pressed
+ if (Function < 2){
+ Function = Function + 1;
+ }else{
+ Function = 0;
}
}
+void Selection() { //Action if the Select button is pressed
+ Select = !Select;
+}
+int main()
+{
+ //Interrupt setters
+ button_up.rise(&up); //Sets up Up button
+ button_down.rise(&down); //Sets up Down Button
+ button_start.rise(&start_stop); //Sets up Start/Stop Button
+ button_funct.rise(&Function_Selection); //Sets up Function Button
+ button_select.rise(&Selection); //Sets up Select Button
+
+ No_Of_Rotations = 20;//Defaults at 20 as a starting value
+
+ Twist_Go = false; //
+ Anneal_Go = false; // The Values for the start/ stop button on each select setting
+ Test_Go = false; //
+
+ Function = 0; //These values are used to navigate the differing modes
+ Select = false; //
+
+ Loop = 8; //Default loops
+ Wait_Time = 6; //Default wait time
+
+ Duty_Cycle = 50; //Percent
+ Power_Time = 6; //Seconds
+
+ /*
+ Function 0 = Turn code
+ Function 1 = Anneleaing
+ Function 2 = Test
+ */
+ pc.printf("testing\n");
+ //Thread Starts
+ lcd_thread.start(LCD_thread);
+ led_thread.start(LED_thread);
+ while(1) // Main code
+ {
+ if (Function == 0){ //Turning Code
+ if (Twist_Go == true){
+ STEPPER_MOTOR_1.Rotate_Steps(No_Of_Rotations);
+ }
+ }else if (Function == 1){ //Annealing Code
+ if (Anneal_Go == true)
+ {
+ for ( int counter = 0; counter < Loop; counter++) //Loop value, check if works
+ {
+ Tendon_Power.period(0.01); // set PWM period to 10 ms don't use pwm have this just to declare
+ Tendon_Power=1; // set duty cycle to 100%
+ wait(Wait_Time);//Variable
+ Tendon_Power=0; // set duty cycle to 0%
+ wait(6);//Fixed off time
+ }
+ }
+ }else if (Function == 2){ //Testing Code
+ if (Test_Go == true)
+ {
+ Tendon_Power.period(0.01); // set PWM period to 10 ms don't use pwm have this just to declare
+ Tendon_Power= Duty_Cycle / 100; // set duty cycle to variable input from buttons between 0-1 (on lcd this is a percentage) also increment by values of 10
+ wait(Power_Time);//Variable on time for power on
+ Tendon_Power=0; // set duty cycle to 0% and power off
+ }
+ }
+ }
+}