switch box for pneumatic state machine. Simple version with no grab drop features. Mid state of converting script to function calls within main()
main.cpp
- Committer:
- joliu
- Date:
- 2014-01-31
- Revision:
- 1:2ee833c4b76f
- Parent:
- 0:ae0fe1adad01
File content as of revision 1:2ee833c4b76f:
#include "mbed.h"
//Serial pc(USBTX, USBRX);
Serial lcd(p28, p27);
// V+/V- outputs cylinder down
DigitalOut out1(p7);
DigitalOut out2(p8);
DigitalOut out3(p9);
DigitalOut out4(p10);
// V+/V- outputs cylinder up
DigitalOut out5(p11);
DigitalOut out6(p12);
DigitalOut out7(p13);
DigitalOut out8(p14);
// Four push buttons left to right
DigitalIn pushOne(p21);
DigitalIn pushTwo(p22);
DigitalIn pushThree(p23);
DigitalIn pushFour(p24);
// Run switch where p26 will be kept high
// Can probably connect it to the 3.3V out
DigitalIn runIn(p25);
DigitalOut runOut(p26);
float upTime;
float downTime;
float waitTime;
unsigned int count = 0;
typedef char * string;
string strs[5] = {
"Up Time", // 0
"Down Time", // 1
"Wait Time", // 2
"Target Count", // 3
"Reset Counter" // 4
};
enum ValveMode {
UP,
DOWN
};
void clearLCD()
{
lcd.printf("%c%c",0xFE,0x01);
}
void setLCDpos(int xpos, int ypos)
{
int pos = 0x80;
switch (xpos) {
case 1:
pos +=0;
break;
case 2:
pos +=64;
break;
case 3:
pos +=20;
break;
case 4:
pos +=84;
break;
}
pos += (ypos-1);
lcd.printf("%c%c",0xFE,pos);
}
void setBrightness(int lev)
{
lcd.printf("%c%c",0x7C,lev+127);
wait(.1);
}
void setValve(ValveMode dir, int val)
{
switch(dir) {
case DOWN:
out1 = val;
out2 = val;
out3 = val;
out4 = val;
break;
case UP:
out5 = val;
out6 = val;
out7 = val;
out8 = val;
break;
}
}
/*void lcdShowParameters(int delay, int cycles)
{
clearLCD();
setLCDpos(1,1);
lcd.printf(strs[strPos]);
setLCDpos(2,1);
if (strPos<=2) {
lcd.printf("%f",times[strPos]);
} else if(strPos==3) {
lcd.printf("%d",target);
} else if(strPos==4) {
lcd.printf("Y/N?");
}
}
void lcdConfirmStart()
{
clearLCD();
setLCDpos(1,1);
lcd.printf(strs[strPos]);
setLCDpos(2,1);
if (strPos<=2) {
lcd.printf("%f",times[strPos]);
} else if(strPos==3) {
lcd.printf("%d",target);
} else if(strPos==4) {
lcd.printf("Y/N?");
}
}
*/
void printCount (int count)
{
clearLCD();
setLCDpos(1,1);
lcd.printf("CURRENT COUNT IS");
setLCDpos(2,1);
lcd.printf("%d",count);
}
int main()
{
unsigned int route1 = 0;
//unsigned int route2 = 0;
float times[3];
times[0] = 1.0;
times[1] = 1.0;
times[2] = 0.2;
int target = 2000;
int strPos = 0;
Timer timer1;
wait(1);
clearLCD();
//setLCDpos(1,1);
//lcd.printf("Current count is:");
//setLCDpos(2,1);
//lcd.printf("%d",0);
runOut = 1;
while (1) {
if (!runIn) {
if (!route1) {
clearLCD();
route1 = 1;
timer1.start();
}
else {
if(pushOne && timer1.read_ms()>500) {
//Go Left
if(strPos<1) {
strPos=4;
} else {
strPos--;
}
clearLCD();
setLCDpos(1,1);
lcd.printf(strs[strPos]);
setLCDpos(2,1);
if (strPos<=2) {
lcd.printf("%f",times[strPos]);
} else if(strPos==3) {
lcd.printf("%d",target);
} else if(strPos==4) {
lcd.printf("Y/N?");
}
timer1.reset();
} else if(pushTwo && timer1.read_ms()>100) {
//Increment
clearLCD();
setLCDpos(1,1);
lcd.printf(strs[strPos]);
setLCDpos(2,1);
if(strPos<=2) {
times[strPos]=times[strPos]+0.1;
lcd.printf("%f",times[strPos]);
} else if(strPos==3) {
target=target+100;
lcd.printf("%d",target);
} else if(strPos==4) {
setLCDpos(2,1);
lcd.printf("YES");
count=0;
}
timer1.reset();
} else if(pushThree && timer1.read_ms()>100) {
//Decrement
clearLCD();
setLCDpos(1,1);
lcd.printf(strs[strPos]);
setLCDpos(2,1);
if(strPos<=2) {
times[strPos]=times[strPos]- 0.1;
lcd.printf("%f",times[strPos]);
} else if(strPos==3) {
target=target-100;
lcd.printf("%d",target);
} else if(strPos==4) {
lcd.printf("NO");
}
timer1.reset();
} else if(pushFour && timer1.read_ms()>150) {
if(strPos>3) {
strPos=0;
} else {
strPos++;
}
clearLCD();
setLCDpos(1,1);
lcd.printf(strs[strPos]);
setLCDpos(2,1);
if (strPos<=2) {
lcd.printf("%f",times[strPos]);
} else if(strPos==3) {
lcd.printf("%d",target);
} else if(strPos==4) {
lcd.printf("Y/N?");
}
timer1.reset();
}
}
} else if (runIn && count<=target) {
route1=0;
upTime = times[0];
downTime = times[1];
waitTime = times[2];
setValve(UP, 1);
wait(upTime);
setValve(UP, 0);
wait(waitTime);
setValve(DOWN, 1);
wait(downTime);
setValve(DOWN,0);
wait(waitTime);
count++;
printCount(count);
} else if (count>target) {
clearLCD();
setLCDpos(1,1);
lcd.printf("TARGET REACHED");
setLCDpos(2,1);
lcd.printf("%d",target);
wait(0.1);
}
}
}