                                                            /* Truth Table for Dual 7474 D Flip_Flop Chip
                                            
                                                                        ***[Test of Set]***
                                           Preset     Clear      D       CLK   |   Q1       Q1'       Q2      Q2'      
                                            _______________________________________________________________________ 
                                      Test1    0        1        1        1    |    1        0        1        0 
                                      Test2    0        1        1        0    |    1        0        1        0
                                      Test3    0        1        0        1    |    1        0        1        0
                                      Test4    0        1        0        0    |    1        0        1        0

                                                                      ***[Test of Functions]***
                                           Preset     Clear      D         CLK   |   Q1       Q1'      Q2       Q2'      
                                            _________________________________________________________________________
                                      Test1    1        1        1        0-1-0  |    1        0        1        0   D=1 => Set(1)     1=>1
                                      Test2    1        1        0        0-1-0  |    0        1        0        1   D=0 => Reset(0)   1=>0
                                      Test3    1        1        0        0-1-0  |    0        1        0        1   D=0 => Reset(0)   0=>0
                                      Test4    1        1        1        0-1-0  |    1        0        1        0   D=1 => Set(1)     0=>1

                                                                         ***[Test of Reset]***
                                           Preset     Clear      D       CLK   |   Q1       Q1'       Q2      Q2'
                                            ________________________________________________________________________ 
                                      Test1    1        0        1        1    |    0        1        0        1
                                      Test2    1        0        1        0    |    0        1        0        1
                                      Test3    1        0        0        1    |    0        1        0        1
                                      Test4    1        0        0        0    |    0        1        0        1                                   
        */

boolean D_FlipFlop()
{
                                                                  /*        ------------       */  
                                              int D_Clr_1=FP;     /*  Clr1  |   \_/    | Vcc   */  int D_Vcc  =FP+1;
                                              int D_D1   =FP+2;   /*  D1    |          | Clr2  */  int D_Clr_2=FP+3;    
                                              int D_Clk_1=FP+4;   /*  Clk1  |          | D2    */  int D_D2   =FP+5;
                                              int D_Pre_1=FP+6;   /*  Pre1  |          | Clk2  */  int D_Clk_2=FP+7; 
                                              int D_Q1   =FP+8;   /*  Q1    |          | Pre2  */  int D_Pre_2=FP+9;
                                              int D_Q1_n =FP+10;  /*  Q1-n  |          | Q2    */  int D_Q2   =FP+11; 
                                              int D_GND  =FP+12;  /*  GND   |          | Q2-n  */  int D_Q2_n =FP+13; 
                                                                  /*        ------------       */ 
                                                                            int test_Q1   ;
                                                                            int test_Q1_n ;
                                                                            int test_Q2   ;
                                                                            int test_Q2_n ;
                                                                            
                                                                            String Clk1   ;
                                                                            String Clk2   ;
                                                                     
                                                                        boolean test1 = false;
                                                                        boolean test2 = false;
                                                                        boolean test3 = false;
                                                                        boolean test4 = false;
                                                                        
                                                                        boolean test_Set      = false;
                                                                        boolean test_Function = false;
                                                                        boolean test_Reset    = false;

                                                       pinMode(D_Clr_1, OUTPUT); pinMode(D_Vcc  , OUTPUT);
                                                       pinMode(D_D1   , OUTPUT); pinMode(D_Clr_2, OUTPUT);
                                                       pinMode(D_Clk_1, OUTPUT); pinMode(D_D2   , OUTPUT);
                                                       pinMode(D_Pre_1, OUTPUT); pinMode(D_Clk_2, OUTPUT);
                                                       pinMode(D_Q1   , INPUT ); pinMode(D_Pre_2, OUTPUT);
                                                       pinMode(D_Q1_n , INPUT ); pinMode(D_Q2   , INPUT );
                                                       pinMode(D_GND  , OUTPUT); pinMode(D_Q2_n , INPUT );
                                                                                            
                                                                      delay(readDelay);

/*******************************************************************************************************************************
 ******************************************************** [Test of SET] ********************************************************
 *******************************************************************************************************************************/
                                     
/*                                    ***[Test of Set]***
       Preset     Clear      D       CLK   |   Q1       Q1'       Q2      Q2'      
        _______________________________________________________________________
  Test1    0        1        1        1    |    1        0        1        0 
  Test2    0        1        1        0    |    1        0        1        0
  Test3    0        1        0        1    |    1        0        1        0
  Test4    0        1        0        0    |    1        0        1        0
*/
 
  Serial.println("*** Test of SET ***");
  
/**********************************************************************************
            ------------------------TEST 1------------------------
 **********************************************************************************/
  //Serial.println("\nTEST 1: D=1 CLK=1");
  digitalWrite(D_Vcc,   HIGH); digitalWrite(D_GND  , LOW );
  
  digitalWrite(D_Pre_1, LOW ); digitalWrite(D_Pre_2, LOW );
  digitalWrite(D_Clr_1, HIGH); digitalWrite(D_Clr_2, HIGH);
  
  //D=1 CLK=1
  digitalWrite(D_D1   , HIGH); digitalWrite(D_D2   , HIGH);
  digitalWrite(D_Clk_1, HIGH); digitalWrite(D_Clk_2, HIGH);

  test_Q1    = digitalRead(D_Q1)  ;
  test_Q1_n  = digitalRead(D_Q1_n);
  test_Q2    = digitalRead(D_Q2)  ;
  test_Q2_n  = digitalRead(D_Q2_n);
  
  if(test_Q1   == 1 && 
     test_Q1_n == 0 && 
     test_Q2   == 1 && 
     test_Q2_n == 0)
  test1 = true;

  Serial.print("\nTest #\tSide\tPreset\tClear\tD\tCLK\tQ\tQ'\tPass");
  Serial.print("\n1: ");
  Serial.print("\t 1 ");   Serial.print("\t"); Serial.print(digitalRead(D_Pre_1)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_1)); Serial.print("\t"); Serial.print(digitalRead(D_D1)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_1)); Serial.print("\t"); Serial.print(test_Q1);Serial.print("\t"); Serial.print(test_Q1_n);
  Serial.print("\n\t 2 "); Serial.print("\t"); Serial.print(digitalRead(D_Pre_2)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_2)); Serial.print("\t"); Serial.print(digitalRead(D_D2)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_2)); Serial.print("\t"); Serial.print(test_Q2);Serial.print("\t"); Serial.print(test_Q2_n);
  Serial.print("\t"); Serial.print(test1);

/**********************************************************************************
            ------------------------TEST 2------------------------
 **********************************************************************************/
  //Serial.print("\nTEST 2: D=1 CLK=0");
  digitalWrite(D_Vcc,   HIGH); digitalWrite(D_GND, LOW);
  
  digitalWrite(D_Pre_1, LOW ); digitalWrite(D_Pre_2, LOW );
  digitalWrite(D_Clr_1, HIGH); digitalWrite(D_Clr_2, HIGH);
  
  // D=1 CLK=0
  digitalWrite(D_D1   , HIGH); digitalWrite(D_D2   , HIGH);
  digitalWrite(D_Clk_1, LOW) ; digitalWrite(D_Clk_2, LOW);
  
  test_Q1    = digitalRead(D_Q1)  ;
  test_Q1_n  = digitalRead(D_Q1_n);
  test_Q2    = digitalRead(D_Q2)  ;
  test_Q2_n  = digitalRead(D_Q2_n);
  if(test_Q1   == 1 && 
     test_Q1_n == 0 && 
     test_Q2   == 1 && 
     test_Q2_n == 0)
  test2 = true;

  Serial.print("\n2: ");
  Serial.print("\t 1 ");   Serial.print("\t"); Serial.print(digitalRead(D_Pre_1)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_1)); Serial.print("\t"); Serial.print(digitalRead(D_D1)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_1)); Serial.print("\t"); Serial.print(test_Q1);Serial.print("\t"); Serial.print(test_Q1_n);
  Serial.print("\n\t 2 "); Serial.print("\t"); Serial.print(digitalRead(D_Pre_2)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_2)); Serial.print("\t"); Serial.print(digitalRead(D_D2)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_2)); Serial.print("\t"); Serial.print(test_Q2);Serial.print("\t"); Serial.print(test_Q2_n);
  Serial.print("\t"); Serial.print(test2);

/**********************************************************************************
            ------------------------TEST 3------------------------
 **********************************************************************************/
  //Serial.print("\nTEST 3: D=0 CLK=1");
  digitalWrite(D_Vcc,   HIGH); digitalWrite(D_GND  , LOW );
  
  digitalWrite(D_Pre_1, LOW ); digitalWrite(D_Pre_2, LOW );
  digitalWrite(D_Clr_1, HIGH); digitalWrite(D_Clr_2, HIGH);
  
  // D=0 CLK=1
  digitalWrite(D_D1   , LOW ); digitalWrite(D_D2   , LOW );
  digitalWrite(D_Clk_1, HIGH); digitalWrite(D_Clk_2, HIGH);


  test_Q1    = digitalRead(D_Q1)  ;
  test_Q1_n  = digitalRead(D_Q1_n);
  test_Q2    = digitalRead(D_Q2)  ;
  test_Q2_n  = digitalRead(D_Q2_n);
  
  if(test_Q1   == 1 && 
     test_Q1_n == 0 && 
     test_Q2   == 1 && 
     test_Q2_n == 0)
  test3 = true;

  Serial.print("\n3: ");
  Serial.print("\t 1 ");   Serial.print("\t"); Serial.print(digitalRead(D_Pre_1)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_1)); Serial.print("\t"); Serial.print(digitalRead(D_D1)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_1)); Serial.print("\t"); Serial.print(test_Q1);Serial.print("\t"); Serial.print(test_Q1_n);
  Serial.print("\n\t 2 "); Serial.print("\t"); Serial.print(digitalRead(D_Pre_2)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_2)); Serial.print("\t"); Serial.print(digitalRead(D_D2)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_2)); Serial.print("\t"); Serial.print(test_Q2);Serial.print("\t"); Serial.print(test_Q2_n);
  Serial.print("\t"); Serial.print(test3);

/**********************************************************************************
            ------------------------TEST 4------------------------
 **********************************************************************************/
  //Serial.println("\nTEST 4: D=0 CLK=0");
  digitalWrite(D_Vcc,   HIGH); digitalWrite(D_GND  , LOW );
  
  digitalWrite(D_Pre_1, LOW ); digitalWrite(D_Pre_2, LOW );
  digitalWrite(D_Clr_1, HIGH); digitalWrite(D_Clr_2, HIGH);
  
  // D=0 CLK=0
  digitalWrite(D_D1   , LOW ); digitalWrite(D_D2   , LOW );
  digitalWrite(D_Clk_1, LOW ); digitalWrite(D_Clk_2, LOW );
  
  test_Q1    = digitalRead(D_Q1)  ;
  test_Q1_n  = digitalRead(D_Q1_n);
  test_Q2    = digitalRead(D_Q2)  ;
  test_Q2_n  = digitalRead(D_Q2_n);
  if(test_Q1   == 1 && 
     test_Q1_n == 0 && 
     test_Q2   == 1 && 
     test_Q2_n == 0)
  test4 = true;

  Serial.print("\n4: ");
  Serial.print("\t 1 ");   Serial.print("\t"); Serial.print(digitalRead(D_Pre_1)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_1)); Serial.print("\t"); Serial.print(digitalRead(D_D1)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_1)); Serial.print("\t"); Serial.print(test_Q1);Serial.print("\t"); Serial.print(test_Q1_n);
  Serial.print("\n\t 2 "); Serial.print("\t"); Serial.print(digitalRead(D_Pre_2)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_2)); Serial.print("\t"); Serial.print(digitalRead(D_D2)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_2)); Serial.print("\t"); Serial.print(test_Q2);Serial.print("\t"); Serial.print(test_Q2_n);
  Serial.print("\t"); Serial.print(test4);

  if(test1 == true && 
     test2 == true && 
     test3 == true && 
     test4 == true)
     {
          test_Set = true;
          Serial.println("\nD Chip SET Test Passed\n"); 
     }
  else 
     {
          Serial.println("\nD Chip SET Test Failed\n"); 
     }

/*******************************************************************************************************************************
 ************************************************* [Test of D Functions] ******************************************************
 *******************************************************************************************************************************/

/*                                                                        ***[Test of Functions]***
                                           Preset     Clear      D         CLK   |   Q1       Q1'      Q2       Q2'      
                                            _________________________________________________________________________
                                      Test1    1        1        1        0-1-0  |    1        0        1        0   D=1 => Set(1)     1=>1
                                      Test2    1        1        0        0-1-0  |    0        1        0        1   D=0 => Reset(0)   1=>0
                                      Test3    1        1        0        0-1-0  |    0        1        0        1   D=0 => Reset(0)   0=>0
                                      Test4    1        1        1        0-1-0  |    1        0        1        0   D=1 => Set(1)     0=>1
                                    
*/

  Serial.println("*** Test of D Functions ***");
  test1 = test2 = test3 = test4 = false;
  
/**********************************************************************************
         ------------------------ TEST 1 - SET(1) ------------------------
 **********************************************************************************/ 
  //Serial.println("\nTEST 1: D=1,CLK=010 => Set(1)");  
  digitalWrite(D_Vcc,   HIGH) ; digitalWrite(D_GND  , LOW );
  
  digitalWrite(D_Pre_1, HIGH ); digitalWrite(D_Pre_2, HIGH);
  digitalWrite(D_Clr_1, HIGH) ; digitalWrite(D_Clr_2, HIGH);

   // D=1,CLK=010 => Set(1)
  digitalWrite(D_D1   , HIGH) ; digitalWrite(D_D2   , HIGH);
  
  digitalWrite(D_Clk_1, LOW)  ; digitalWrite(D_Clk_2, LOW);
  Clk1 = digitalRead(D_Clk_1) ; Clk2 = digitalRead(D_Clk_2);
  digitalWrite(D_Clk_1, HIGH) ; digitalWrite(D_Clk_2, HIGH);
  Clk1 = Clk1 + digitalRead(D_Clk_1); Clk2 = Clk2 + digitalRead(D_Clk_2);
  digitalWrite(D_Clk_1, LOW)  ; digitalWrite(D_Clk_2, LOW);
  Clk1 = Clk1 + digitalRead(D_Clk_1); Clk2 = Clk2 + digitalRead(D_Clk_2);
  
  test_Q1    = digitalRead(D_Q1)  ;
  test_Q1_n  = digitalRead(D_Q1_n);
  test_Q2    = digitalRead(D_Q2)  ;
  test_Q2_n  = digitalRead(D_Q2_n);
  if(test_Q1   == 1 && 
     test_Q1_n == 0 && 
     test_Q2   == 1 && 
     test_Q2_n == 0)
  test1 = true;

  Serial.print("\nTest #\tSide\tPreset\tClear\tD\tCLK\tQ\tQ'\tPass");
  Serial.print("\n1: ");
  Serial.print("\t 1 ");   Serial.print("\t"); Serial.print(digitalRead(D_Pre_1)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_1)); Serial.print("\t"); Serial.print(digitalRead(D_D1)); Serial.print("\t"); Serial.print(Clk1); Serial.print("\t"); Serial.print(test_Q1);Serial.print("\t"); Serial.print(test_Q1_n); Serial.print("\t\tD=1 => Set(1)    1=>1");
  Serial.print("\n\t 2 "); Serial.print("\t"); Serial.print(digitalRead(D_Pre_2)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_2)); Serial.print("\t"); Serial.print(digitalRead(D_D2)); Serial.print("\t"); Serial.print(Clk2); Serial.print("\t"); Serial.print(test_Q2);Serial.print("\t"); Serial.print(test_Q2_n);
  Serial.print("\t"); Serial.print(test1);
  Clk1 = Clk2 = "";

/**********************************************************************************
         ------------------------ TEST 2 - RESET(0) ------------------------
 **********************************************************************************/ 
  //Serial.println("\nTEST 2: D=0,CLK=010 => Reset(0)");   
  digitalWrite(D_Vcc,   HIGH) ; digitalWrite(D_GND  , LOW );
  
  digitalWrite(D_Pre_1, HIGH ); digitalWrite(D_Pre_2, HIGH );
  digitalWrite(D_Clr_1, HIGH) ; digitalWrite(D_Clr_2, HIGH);

   // D=1,CLK=010 => Reset(0)
  digitalWrite(D_D1   , LOW)  ; digitalWrite(D_D2   , LOW);
  
  digitalWrite(D_Clk_1, LOW)  ; digitalWrite(D_Clk_2, LOW);
  Clk1 = digitalRead(D_Clk_1)      ; Clk2 = digitalRead(D_Clk_2);
  digitalWrite(D_Clk_1, HIGH) ; digitalWrite(D_Clk_2, HIGH);
  Clk1 = Clk1 + digitalRead(D_Clk_1); Clk2 = Clk2 + digitalRead(D_Clk_2);
  digitalWrite(D_Clk_1, LOW)  ; digitalWrite(D_Clk_2, LOW);
  Clk1 = Clk1 + digitalRead(D_Clk_1); Clk2 = Clk2 + digitalRead(D_Clk_2);
  
  test_Q1    = digitalRead(D_Q1)  ;
  test_Q1_n  = digitalRead(D_Q1_n);
  test_Q2    = digitalRead(D_Q2)  ;
  test_Q2_n  = digitalRead(D_Q2_n);
  if(test_Q1   == 0 && 
     test_Q1_n == 1 && 
     test_Q2   == 0 && 
     test_Q2_n == 1)
  test2 = true;
  Serial.print("\n2: ");
  Serial.print("\t 1 ");   Serial.print("\t"); Serial.print(digitalRead(D_Pre_1)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_1)); Serial.print("\t"); Serial.print(digitalRead(D_D1)); Serial.print("\t"); Serial.print(Clk1); Serial.print("\t"); Serial.print(test_Q1);Serial.print("\t"); Serial.print(test_Q1_n); Serial.print("\t\tD=0 => Reset(0)  1=>0");
  Serial.print("\n\t 2 "); Serial.print("\t"); Serial.print(digitalRead(D_Pre_2)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_2)); Serial.print("\t"); Serial.print(digitalRead(D_D2)); Serial.print("\t"); Serial.print(Clk2); Serial.print("\t"); Serial.print(test_Q2);Serial.print("\t"); Serial.print(test_Q2_n);
  Serial.print("\t"); Serial.print(test2);
  Clk1 = Clk2 = "";

/**********************************************************************************
         ------------------------ TEST 3 - RESET(0) ------------------------
 **********************************************************************************/   
  //Serial.println("\nTEST 3: D=0,CLK=010 => Reset(0)");    
  digitalWrite(D_Vcc,   HIGH) ; digitalWrite(D_GND  , LOW );
  
  digitalWrite(D_Pre_1, HIGH ); digitalWrite(D_Pre_2, HIGH);
  digitalWrite(D_Clr_1, HIGH) ; digitalWrite(D_Clr_2, HIGH);

  // D=0,CLK=010 => Reset(0)
  digitalWrite(D_D1   , LOW) ; digitalWrite(D_D2   , LOW);
  
  digitalWrite(D_Clk_1, LOW)  ; digitalWrite(D_Clk_2, LOW);
  Clk1 = digitalRead(D_Clk_1)      ; Clk2 = digitalRead(D_Clk_2);
  digitalWrite(D_Clk_1, HIGH) ; digitalWrite(D_Clk_2, HIGH);
  Clk1 = Clk1 + digitalRead(D_Clk_1); Clk2 = Clk2 + digitalRead(D_Clk_2);
  digitalWrite(D_Clk_1, LOW)  ; digitalWrite(D_Clk_2, LOW);
  Clk1 = Clk1 + digitalRead(D_Clk_1); Clk2 = Clk2 + digitalRead(D_Clk_2);
  
  test_Q1    = digitalRead(D_Q1)  ;
  test_Q1_n  = digitalRead(D_Q1_n);
  test_Q2    = digitalRead(D_Q2)  ;
  test_Q2_n  = digitalRead(D_Q2_n);
  if(test_Q1   == 0 && 
     test_Q1_n == 1 && 
     test_Q2   == 0 && 
     test_Q2_n == 1)
   test3 = true;
   Serial.print("\n3: ");
  Serial.print("\t 1 ");   Serial.print("\t"); Serial.print(digitalRead(D_Pre_1)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_1)); Serial.print("\t"); Serial.print(digitalRead(D_D1)); Serial.print("\t"); Serial.print(Clk1); Serial.print("\t"); Serial.print(test_Q1);Serial.print("\t"); Serial.print(test_Q1_n); Serial.print("\t\tD=0 => Reset(0)  0=>0");
  Serial.print("\n\t 2 "); Serial.print("\t"); Serial.print(digitalRead(D_Pre_2)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_2)); Serial.print("\t"); Serial.print(digitalRead(D_D2)); Serial.print("\t"); Serial.print(Clk2); Serial.print("\t"); Serial.print(test_Q2);Serial.print("\t"); Serial.print(test_Q2_n);
  Serial.print("\t"); Serial.print(test3);
  Clk1 = Clk2 = "";

/**********************************************************************************
         ------------------------ TEST 4 - SET(1) ------------------------
 **********************************************************************************/  
  //Serial.println("\nTEST 4: D=1,CLK=010 => Set(1)"); 
  digitalWrite(D_Vcc,   HIGH) ; digitalWrite(D_GND  , LOW );
  
  digitalWrite(D_Pre_1, HIGH ); digitalWrite(D_Pre_2, HIGH);
  digitalWrite(D_Clr_1, HIGH) ; digitalWrite(D_Clr_2, HIGH);

  // D=1,CLK=010 => Set(1)
  digitalWrite(D_D1   , HIGH) ; digitalWrite(D_D2   , HIGH);
  
  digitalWrite(D_Clk_1, LOW)  ; digitalWrite(D_Clk_2, LOW);
  Clk1 = digitalRead(D_Clk_1)      ; Clk2 = digitalRead(D_Clk_2);
  digitalWrite(D_Clk_1, HIGH) ; digitalWrite(D_Clk_2, HIGH);
  Clk1 = Clk1 + digitalRead(D_Clk_1); Clk2 = Clk2 + digitalRead(D_Clk_2);
  digitalWrite(D_Clk_1, LOW)  ; digitalWrite(D_Clk_2, LOW);
  Clk1 = Clk1 + digitalRead(D_Clk_1); Clk2 = Clk2 + digitalRead(D_Clk_2);
  
  test_Q1    = digitalRead(D_Q1)  ;
  test_Q1_n  = digitalRead(D_Q1_n);
  test_Q2    = digitalRead(D_Q2)  ;
  test_Q2_n  = digitalRead(D_Q2_n);
  if(test_Q1   == 1 && 
     test_Q1_n == 0 && 
     test_Q2   == 1 && 
     test_Q2_n == 0)
  test4 = true;
  Serial.print("\n4: ");
  Serial.print("\t 1 ");   Serial.print("\t"); Serial.print(digitalRead(D_Pre_1)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_1)); Serial.print("\t"); Serial.print(digitalRead(D_D1)); Serial.print("\t"); Serial.print(Clk1); Serial.print("\t"); Serial.print(test_Q1);Serial.print("\t"); Serial.print(test_Q1_n); Serial.print("\t\tD=1 => Set(1)    0=>1");
  Serial.print("\n\t 2 "); Serial.print("\t"); Serial.print(digitalRead(D_Pre_2)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_2)); Serial.print("\t"); Serial.print(digitalRead(D_D2)); Serial.print("\t"); Serial.print(Clk2); Serial.print("\t"); Serial.print(test_Q2);Serial.print("\t"); Serial.print(test_Q2_n);
  Serial.print("\t"); Serial.print(test4);
  Clk1 = Clk2 = "";

  if(test1 == true && 
     test2 == true && 
     test3 == true && 
     test4 == true)
     {
          test_Function = true;
          Serial.println("\nD Chip Function Test Passed\n"); 
     }
  else 
     {
          Serial.println("\nD Chip Function Test Failed\n"); 
     }

/*******************************************************************************************************************************
 **************************************************** [TEST OF RESET] **********************************************************
 *******************************************************************************************************************************/

/*                                                                   ***[Test of Reset]***
                                           Preset     Clear      D       CLK   |   Q1       Q1'       Q2      Q2'
                                            ________________________________________________________________________ 
                                      Test1    1        0        1        1    |    0        1        0        1
                                      Test2    1        0        1        0    |    0        1        0        1
                                      Test3    1        0        0        1    |    0        1        0        1
                                      Test4    1        0        0        0    |    0        1        0        1                                   
   
*/
  
  Serial.println("*** Test of RESET ***");
  test1 = test2 = test3 = test4 = false;
    
/**********************************************************************************
         ------------------------TEST 1 ------------------------
 **********************************************************************************/ 
  //Serial.println("\nTEST 1: D=1 CLK=1");
  digitalWrite(D_Vcc,   HIGH) ; digitalWrite(D_GND  , LOW );
  
  digitalWrite(D_Pre_1, HIGH) ; digitalWrite(D_Pre_2, HIGH);
  digitalWrite(D_Clr_1, LOW)  ; digitalWrite(D_Clr_2, LOW);

  // D=1 CLK=1
  digitalWrite(D_D1   , HIGH) ; digitalWrite(D_D2   , HIGH);
  digitalWrite(D_Clk_1, HIGH) ; digitalWrite(D_Clk_2, HIGH);
  
  test_Q1    = digitalRead(D_Q1)  ;   
  test_Q1_n  = digitalRead(D_Q1_n); 
  test_Q2    = digitalRead(D_Q2)  ; 
  test_Q2_n  = digitalRead(D_Q2_n); 
  if(test_Q1   == 0 && 
     test_Q1_n == 1 && 
     test_Q2   == 0 && 
     test_Q2_n == 1)
  test1 = true;
  Serial.print("\nTest #\tSide\tPreset\tClear\tD\tCLK\tQ\tQ'\tPass");
  Serial.print("\n1: ");
  Serial.print("\t 1 ");   Serial.print("\t"); Serial.print(digitalRead(D_Pre_1)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_1)); Serial.print("\t"); Serial.print(digitalRead(D_D1)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_1)); Serial.print("\t"); Serial.print(test_Q1);Serial.print("\t"); Serial.print(test_Q1_n);
  Serial.print("\n\t 2 "); Serial.print("\t"); Serial.print(digitalRead(D_Pre_2)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_2)); Serial.print("\t"); Serial.print(digitalRead(D_D2)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_2)); Serial.print("\t"); Serial.print(test_Q2);Serial.print("\t"); Serial.print(test_Q2_n);
  Serial.print("\t"); Serial.print(test1);

/**********************************************************************************
         ------------------------TEST 2 ------------------------
 **********************************************************************************/ 
  //Serial.println("\nTEST 2: D=1 CLK=0");
  digitalWrite(D_Vcc,   HIGH) ; digitalWrite(D_GND  , LOW );
  
  digitalWrite(D_Pre_1, HIGH); digitalWrite(D_Pre_2, HIGH);
  digitalWrite(D_Clr_1, LOW)  ; digitalWrite(D_Clr_2, LOW);
 
  // D=1 CLK=0
  digitalWrite(D_D1   , HIGH) ; digitalWrite(D_D2   , HIGH);
  digitalWrite(D_Clk_1, LOW)  ; digitalWrite(D_Clk_2, LOW);
  
  test_Q1    = digitalRead(D_Q1)  ;   
  test_Q1_n  = digitalRead(D_Q1_n); 
  test_Q2    = digitalRead(D_Q2)  ; 
  test_Q2_n  = digitalRead(D_Q2_n); 
  if(test_Q1   == 0 && 
     test_Q1_n == 1 && 
     test_Q2   == 0 && 
     test_Q2_n == 1)
  test2 = true;
  Serial.print("\n1: ");
  Serial.print("\t 2 ");   Serial.print("\t"); Serial.print(digitalRead(D_Pre_1)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_1)); Serial.print("\t"); Serial.print(digitalRead(D_D1)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_1)); Serial.print("\t"); Serial.print(test_Q1);Serial.print("\t"); Serial.print(test_Q1_n);
  Serial.print("\n\t 2 "); Serial.print("\t"); Serial.print(digitalRead(D_Pre_2)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_2)); Serial.print("\t"); Serial.print(digitalRead(D_D2)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_2)); Serial.print("\t"); Serial.print(test_Q2);Serial.print("\t"); Serial.print(test_Q2_n);
  Serial.print("\t"); Serial.print(test2);

/**********************************************************************************
         ------------------------TEST 3 ------------------------
 **********************************************************************************/ 
  //Serial.println("\nTEST 3: D=0 CLK=1");
  digitalWrite(D_Vcc,   HIGH) ; digitalWrite(D_GND  , LOW );
  
  digitalWrite(D_Pre_1, HIGH); digitalWrite(D_Pre_2, HIGH);
  digitalWrite(D_Clr_1, LOW)  ; digitalWrite(D_Clr_2, LOW);
 
  // D=0 CLK=1
  digitalWrite(D_D1   , LOW)   ; digitalWrite(D_D2   , LOW);
  digitalWrite(D_Clk_1, HIGH)  ; digitalWrite(D_Clk_2, HIGH);
  
  test_Q1    = digitalRead(D_Q1)  ;   
  test_Q1_n  = digitalRead(D_Q1_n); 
  test_Q2    = digitalRead(D_Q2)  ; 
  test_Q2_n  = digitalRead(D_Q2_n); 
  if(test_Q1   == 0 && 
     test_Q1_n == 1 && 
     test_Q2   == 0 && 
     test_Q2_n == 1)
  test3 = true;
  Serial.print("\n3: ");
  Serial.print("\t 1 ");   Serial.print("\t"); Serial.print(digitalRead(D_Pre_1)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_1)); Serial.print("\t"); Serial.print(digitalRead(D_D1)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_1)); Serial.print("\t"); Serial.print(test_Q1);Serial.print("\t"); Serial.print(test_Q1_n);
  Serial.print("\n\t 2 "); Serial.print("\t"); Serial.print(digitalRead(D_Pre_2)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_2)); Serial.print("\t"); Serial.print(digitalRead(D_D2)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_2)); Serial.print("\t"); Serial.print(test_Q2);Serial.print("\t"); Serial.print(test_Q2_n);
  Serial.print("\t"); Serial.print(test3);

/**********************************************************************************
         ------------------------TEST 4 ------------------------
 **********************************************************************************/  
  //Serial.println("\nTEST 4: D=0 CLK=0");
  digitalWrite(D_Vcc,   HIGH) ; digitalWrite(D_GND  , LOW );
  
  digitalWrite(D_Pre_1, HIGH); digitalWrite(D_Pre_2, HIGH);
  digitalWrite(D_Clr_1, LOW)  ; digitalWrite(D_Clr_2, LOW);
 
  // D=0 CLK=0
  digitalWrite(D_D1   , LOW)   ; digitalWrite(D_D2   , LOW);
  digitalWrite(D_Clk_1, LOW)   ; digitalWrite(D_Clk_2, LOW);
  
  test_Q1    = digitalRead(D_Q1)  ;   
  test_Q1_n  = digitalRead(D_Q1_n); 
  test_Q2    = digitalRead(D_Q2)  ; 
  test_Q2_n  = digitalRead(D_Q2_n); 
  if(test_Q1   == 0 && 
     test_Q1_n == 1 && 
     test_Q2   == 0 && 
     test_Q2_n == 1)
  test4 = true;
  Serial.print("\n4: ");
  Serial.print("\t 1 ");   Serial.print("\t"); Serial.print(digitalRead(D_Pre_1)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_1)); Serial.print("\t"); Serial.print(digitalRead(D_D1)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_1)); Serial.print("\t"); Serial.print(test_Q1);Serial.print("\t"); Serial.print(test_Q1_n);
  Serial.print("\n\t 2 "); Serial.print("\t"); Serial.print(digitalRead(D_Pre_2)); Serial.print("\t"); Serial.print(digitalRead(D_Clr_2)); Serial.print("\t"); Serial.print(digitalRead(D_D2)); Serial.print("\t"); Serial.print(digitalRead(D_Clk_2)); Serial.print("\t"); Serial.print(test_Q2);Serial.print("\t"); Serial.print(test_Q2_n);
  Serial.print("\t"); Serial.print(test4);

  if(test1 == true && 
     test2 == true && 
     test3 == true && 
     test4 == true)
     {
          test_Reset = true;
          Serial.println("\nD Chip RESET Test Passed"); 
     }
  else 
      {
            Serial.println("\nD Chip RESET Test Failed"); 
      }

  if(test_Set      == true && 
     test_Function == true && 
     test_Reset    == true)
      {
            test1 = test2 = test3 = test4 = test_Set = test_Function = test_Reset = false;
            return 1;
      }
  else
      {
            test1 = test2 = test3 = test4 = test_Set = test_Function = test_Reset = false;
            return 0;
      }
}
