Version 16 Working

Dependencies:   mbed mbed-rtos TextLCD

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
+            }
+        }
+    }
+}