I have a while loop that can be entered by serial data, in this case pressing a bluetooth button. If the button is pressed a second time during the while loop the serial information is stored and it goes into the second while state immediately after the first becomes false. I want to exit the while loop if the button is pressed a second time. My && Serial.available() == 0 doesn't work, tried -1 also because that is what I think is no data. Tried many things, can't get it to work.
Ideas?
void UpBlue() {
while (digitalRead(limitUp) == LOW && digitalRead(limitStow) == LOW && digitalRead(limitClose) == LOW && digitalRead(button1) == LOW && digitalRead(button2) == LOW && Serial.available() == 0)
{
digitalWrite (up, LOW);
}
while (digitalRead(limitUp) == HIGH && digitalRead(limitStow) == LOW && digitalRead(limitClose) == LOW && digitalRead(button1) == LOW && digitalRead(button2) == LOW && Serial.available() == 0)
{
digitalWrite (up, HIGH);
digitalWrite (stow, LOW);
}
while (digitalRead(limitUp) == HIGH && digitalRead(limitStow) == HIGH && digitalRead(limitClose) == LOW && digitalRead(button1) == LOW && digitalRead(button2) == LOW && Serial.available() == 0)
{
digitalWrite (stow, HIGH);
digitalWrite (Close, LOW);
}
for (int i = 8; i <= 13; i++) {
// all outputs (8-13) off (relay board is active low)
digitalWrite(i, HIGH);
}
}
Complete code
int button1 = 14;
int button2 = 15;
int limitOpen = 2;
int limitDeploy = 3;
int limitDown = 4;
int limitUp = 5;
int limitStow = 6;
int limitClose = 7;
int Open = 8;
int Close = 9;
int deploy = 10;
int stow = 11;
int down = 12;
int up = 13;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode (button1, INPUT_PULLUP);
pinMode (button2, INPUT_PULLUP);
pinMode (limitOpen, INPUT_PULLUP);
pinMode (limitDeploy, INPUT_PULLUP);
pinMode (limitDown, INPUT_PULLUP);
pinMode (limitUp, INPUT_PULLUP);
pinMode (limitStow, INPUT_PULLUP);
pinMode (limitClose, INPUT_PULLUP);
pinMode (Open, OUTPUT);
pinMode (Close, OUTPUT);
pinMode (deploy, OUTPUT);
pinMode (stow, OUTPUT);
pinMode (down, OUTPUT);
pinMode (up, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
char data = 2;
if (Serial.available() > 0)
{
data = Serial.read();
if (data == '0')
{
DownBlue();
}
else if (data == '1')
{
UpBlue();
}
}
else if (digitalRead(button1) == HIGH)
{
Down();
}
else if (digitalRead(button2) == HIGH)
{
Up();
}
else
{
for (int i = 8; i <= 13; i++) {
// all outputs (8-13) off (relay board is active low)
digitalWrite(i, HIGH);
}
}
}
void Down() {
if (digitalRead(limitOpen) == LOW && digitalRead(limitDeploy) == LOW && digitalRead(limitDown) == LOW)
{
digitalWrite (Open, LOW);
}
else if (digitalRead(limitOpen) == HIGH && digitalRead(limitDeploy) == LOW && digitalRead(limitDown) == LOW)
{
digitalWrite (Open, HIGH);
digitalWrite (deploy, LOW);
}
else if (digitalRead(limitOpen) == HIGH && digitalRead(limitDeploy) == HIGH && digitalRead(limitDown) == LOW)
{
digitalWrite (deploy, HIGH);
digitalWrite (down, LOW);
}
}
void Up() {
if (digitalRead(limitUp) == LOW && digitalRead(limitStow) == LOW && digitalRead(limitClose) == LOW)
{
digitalWrite (up, LOW);
}
else if (digitalRead(limitUp) == HIGH && digitalRead(limitStow) == LOW && digitalRead(limitClose) == LOW)
{
digitalWrite (up, HIGH);
digitalWrite (stow, LOW);
}
else if (digitalRead(limitUp) == HIGH && digitalRead(limitStow) == HIGH && digitalRead(limitClose) == LOW)
{
digitalWrite (stow, HIGH);
digitalWrite (Close, LOW);
}
}
void UpBlue() {
while (digitalRead(limitUp) == LOW && digitalRead(limitStow) == LOW && digitalRead(limitClose) == LOW && digitalRead(button1) == LOW && digitalRead(button2) == LOW && Serial.available() == 0)
{
digitalWrite (up, LOW);
}
while (digitalRead(limitUp) == HIGH && digitalRead(limitStow) == LOW && digitalRead(limitClose) == LOW && digitalRead(button1) == LOW && digitalRead(button2) == LOW && Serial.available() == 0)
{
digitalWrite (up, HIGH);
digitalWrite (stow, LOW);
}
while (digitalRead(limitUp) == HIGH && digitalRead(limitStow) == HIGH && digitalRead(limitClose) == LOW && digitalRead(button1) == LOW && digitalRead(button2) == LOW && Serial.available() == 0)
{
digitalWrite (stow, HIGH);
digitalWrite (Close, LOW);
}
for (int i = 8; i <= 13; i++) {
// all outputs (8-13) off (relay board is active low)
digitalWrite(i, HIGH);
}
}
void DownBlue() {
while (digitalRead(limitOpen) == LOW && digitalRead(limitDeploy) == LOW && digitalRead(limitDown) == LOW && digitalRead(button1) == LOW && digitalRead(button2) == LOW && Serial.available() == 0)
{
digitalWrite (Open, LOW);
}
while (digitalRead(limitOpen) == HIGH && digitalRead(limitDeploy) == LOW && digitalRead(limitDown) == LOW && digitalRead(button1) == LOW && digitalRead(button2) == LOW && Serial.available() == 0)
{
digitalWrite (Open, HIGH);
digitalWrite (deploy, LOW);
}
while (digitalRead(limitOpen) == HIGH && digitalRead(limitDeploy) == HIGH && digitalRead(limitDown) == LOW && digitalRead(button1) == LOW && digitalRead(button2) == LOW && Serial.available() == 0)
{
digitalWrite (deploy, HIGH);
digitalWrite (down, LOW);
}
for (int i = 8; i <= 13; i++) {
// all outputs (8-13) off (relay board is active low)
digitalWrite(i, HIGH);
}
}