digital read issue

Dear all

I am using arduino Uno board.i have 2 slide switch which decide my sequence of operation. sequence should be decided when power off to power on condition.

IN below code i am facing issue while power off and power on condition . some time slide switch read and display output properly. sometime it take 2 attempt to read.

I have checked my hardware in this condition when slide switch shorted it read 5V and open it read 0V through multi meter.
Can someone suggest me what i can do solve above issue.

/*SEQ_A   SEQ_   B   Output
  0             0                8 Set
  0             1               16 Set
  1             0               24 Set
  1             1                32 Set
*/

#define SEQ_A  8
#define SEQ_B  9

unsigned char Flag24 = 0;
unsigned char Flag16 = 0;
unsigned char Flag8 = 0;
unsigned char Flag32 = 0;
unsigned char Flash_Min;
unsigned char Flash_Max;
unsigned char Relay_MinC;
unsigned char Relay_MaxC;
unsigned char Reset_MinC;
unsigned char Reset_MaxC;
unsigned char Ack_MinC;
unsigned char Ack_MaxC;
unsigned char CHK_FAULT_MinC;
unsigned char CHK_FAULT_MaxC;
unsigned char Chk_Fault_Counter = 32;
unsigned char MUTECOUNT;

void SEQ_FUN_CHK() {
  if ((digitalRead(8) == 1) && (digitalRead(9)  == 1)) {
    // 32 window
    Flag32 = 1;
    Flag24 = 0;
    Flag16 = 0;
    Flag8 = 0;
    Flash_Min = 1;
    Flash_Max = 32;
    Relay_MinC = 1;
    Relay_MaxC = 32;
    Ack_MinC = 1;
    Ack_MaxC = 32;
    Reset_MinC = 1;
    Reset_MaxC = 32;
    CHK_FAULT_MinC = 1;
    CHK_FAULT_MaxC = 32;
    Chk_Fault_Counter = 32;
    MUTECOUNT = 0;





  } else  if ((digitalRead(8) == 0) && (digitalRead(9)  == 0)) {
    // 8 window  Both are shorted
    Flag24 = 0;
    Flag16 = 0;
    Flag8 = 1;
    Flag32 = 0;
    Flash_Min = 25;
    Flash_Max = 32;
    Relay_MinC = 25;
    Relay_MaxC = 31;
    Ack_MinC = 25;
    Ack_MaxC = 32;
    Reset_MinC = 25;
    Reset_MaxC = 32;
    CHK_FAULT_MinC = 25;
    CHK_FAULT_MaxC = 32;
    Chk_Fault_Counter = 8;
    MUTECOUNT = 24;



  } else  if ((digitalRead(8) == 1) && (digitalRead(9)  == 0)) {
    //16 window
    Flag32 = 0;
    Flag24 = 0;
    Flag16 = 1;
    Flag8 = 0;
    Flash_Min = 17;
    Flash_Max = 32;
    Relay_MinC = 17;
    Relay_MaxC = 32;
    Ack_MinC = 17;
    Ack_MaxC = 32;
    Reset_MinC = 17;
    Reset_MaxC = 32;
    CHK_FAULT_MinC = 17;
    CHK_FAULT_MaxC = 32;
    Chk_Fault_Counter = 16;
    MUTECOUNT = 16;


  } else  if ((digitalRead(8) == 0) && (digitalRead(9)  == 1)) {
    //24 window
    Flag32 = 0;
    Flag24 = 1;
    Flag16 = 0;
    Flag8 = 0;
    Flash_Min = 9;
    Flash_Max = 32;
    Relay_MinC = 9;
    Relay_MaxC = 32;
    Ack_MinC = 9;
    Ack_MaxC = 32;
    Reset_MinC = 9;
    Reset_MaxC = 32;
    CHK_FAULT_MinC = 9;
    CHK_FAULT_MaxC = 32;
    Chk_Fault_Counter = 24;
    MUTECOUNT = 8;


  }



}




void setup() {
  // put your setup code here, to run once:
  pinMode(8, INPUT);
  pinMode(9, INPUT);
  Serial.begin(9600);
  SEQ_FUN_CHK();
}

void loop() {

  Serial.print("Flash_Max:");
  Serial.println(Flash_Max);

  Serial.print("Reset_MaxC:");
  Serial.println(Reset_MaxC);

  Serial.print(" CHK_FAULT_MaxC:");
  Serial.println(CHK_FAULT_MaxC);

  delay(1000);

}

For your code to be stable, the digitalReads need to be performed once, early, and sequentially.

Got external pullups?

Hi,

Can you please post a copy of your circuit, in CAD or a picture of a hand drawn circuit in jpg, png?

Thanks.. Tom.. :slight_smile: