// const int buttonA = 11; // main external press button A
// const int buttonB = 12; // internal button B
// const int buttonC = 13; // internal button C
// const int IN1Pin = 5;
// const int IN2Pin = 6;
// bool running = 0;
// bool flag3 = 0;
const int dataPin595 = 5; /* DS */
const int clockPin595 = 6; /* SHCP */
const int latchPin595 = 7; /* STCP */
//IN1Pin = Q0 595
//IN2Pin = Q1 595
const int dataPin165 = 10; /* Q7 */
const int clockPin165 = 9; /* CP */
const int latchPin165 = 8; /* PL */
const int clockEnablePin165 = 11; /* CE */
// ButtonA = DO 165 B11111110
// ButtonB = D1 165 B11111101
// ButtonC = D2 165 B11111011
int pattern0 = 0b00000000;
int pattern1 = 0b10000000;
int pattern2 = 0b01000000;
bool motorForward = false;
bool motorOff = true;
bool motorBack = false;
void setup() {
// put your setup code here, to run once:
// pinMode (buttonA,INPUT_PULLUP);
// pinMode (buttonB,INPUT_PULLUP);
// pinMode (buttonC,INPUT_PULLUP);
// pinMode ( IN1Pin,OUTPUT);
// pinMode ( IN2Pin,OUTPUT);
pinMode(dataPin595, OUTPUT);
pinMode(clockPin595, OUTPUT);
pinMode(latchPin595, OUTPUT);
pinMode(dataPin165, INPUT);
pinMode(clockPin165, OUTPUT);
pinMode(latchPin165, OUTPUT);
pinMode(clockEnablePin165, OUTPUT);
Serial.begin (9600);
}
void loop () {
digitalWrite(latchPin165, LOW);
delayMicroseconds(5);
digitalWrite(latchPin165, HIGH);
delayMicroseconds(5);
digitalWrite(clockPin165,HIGH);
digitalWrite(clockEnablePin165, LOW);
byte incoming = shiftIn(dataPin165,clockPin165,MSBFIRST );
digitalWrite(clockEnablePin165,HIGH);
Serial.print("Pin States:\r\n");
Serial.println(incoming, BIN);
delay(300);
// while the motor still resting on ButtonB (B11111101),
if((incoming == B11111100)&& !motorForward)
{ // press the buttonA when the motor is stopMode
digitalWrite(latchPin595, LOW);
shiftOut(dataPin595, clockPin595, LSBFIRST, pattern1); // motor start pushing 0b10000000
digitalWrite(latchPin595, HIGH);
motorForward = true;
motorBack = false;
Serial.print("Start pushing");
}
// after the release of buttonA keep pushing (B11111111),
if((incoming == B11111111)&& motorForward)
{ // after release of Button A and B
digitalWrite(latchPin595, LOW);
shiftOut(dataPin595, clockPin595, LSBFIRST, pattern1); // keep pushing 0b10000000
digitalWrite(latchPin595, HIGH);
motorForward = true;
motorBack = false;
Serial.print("Pushing");
}
// Reverse after heating buttonC (B11111011),
if((incoming == B11111011)&& !motorBack && motorForward){
digitalWrite(latchPin595, LOW);
shiftOut(dataPin595, clockPin595, LSBFIRST, pattern2); // motor start pulling
digitalWrite(latchPin595, HIGH);
motorOff = false;
motorForward = false;
motorBack = true;
Serial.print("Start pulling");
}
// after the release of buttonC keep pulling (B11111111),
if((incoming == B11111111)&& motorBack && !motorForward){
digitalWrite(latchPin595, LOW);
shiftOut(dataPin595, clockPin595, LSBFIRST, pattern2); // motor start pulling
digitalWrite(latchPin595, HIGH);
motorOff = false;
motorBack = true;
motorForward = false;
Serial.print("Start pulling");
}
// on a touch with buttonC Stop (B11111101),
if((incoming == B11111101)&& motorBack && !motorForward && !motorOff){
digitalWrite(latchPin595, LOW);
shiftOut(dataPin595, clockPin595, LSBFIRST, pattern0); // motor start pulling
digitalWrite(latchPin595, HIGH);
motorOff = true;
motorForward = false;
motorBack = false;
Serial.print("Stop");
}
}
// void loop() {
// // put your main code here, to run repeatedly:
// if ((digitalRead(buttonA) == LOW) and (digitalRead(buttonB) == HIGH) and (digitalRead(buttonC) == LOW)) //On a press
// {
// digitalWrite(IN1Pin,LOW);
// digitalWrite(IN2Pin,HIGH);
// Serial.println ("start");
// }
// if ( (digitalRead(buttonA)== HIGH) and (digitalRead(buttonB) == LOW) and(digitalRead(buttonC)==HIGH) )// switch to go back
// {
// digitalWrite(IN1Pin,HIGH);
// digitalWrite(IN2Pin,LOW);
// Serial.println ("moving back");
// }
// if ( (digitalRead(buttonA)== HIGH) and (digitalRead(buttonB) ==HIGH) and(digitalRead(buttonC)==LOW) )
// {
// digitalWrite(IN1Pin, LOW);
// digitalWrite(IN2Pin, LOW);
// Serial.println ("stop");
// }
// }