#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <Arduino.h>

int pins[9] = {PB0, PA14, PB3, PA13, PB13, PD2, PB14, PD0, PB15};
String pins_name[9] = {"PB0", "PA14", "PB3", "PA13", "PB13", "PD2", "PB14", "PD0", "PB15"};

int buttonPin = PA4; 
int ledGreen = PA8;   
int ledRed = PB7;
int ledBlue = PB12;    
bool buttonPressed = false; 

#define SDA_PIN A4
#define SCL_PIN A5

#define I2C_ADDR 0x27 

#define LCD_COLS 16
#define LCD_ROWS 2

LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLS, LCD_ROWS);

void setup() {
  Wire.begin(SDA_PIN, SCL_PIN);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Hello, World!"); 
  pinMode(buttonPin, INPUT_PULLUP); 
  pinMode(ledGreen, OUTPUT);        
  pinMode(ledRed, OUTPUT);     
  pinMode(ledBlue, OUTPUT);      

  digitalWrite(ledGreen, LOW); 
  digitalWrite(ledRed, LOW); 
  digitalWrite(ledBlue, HIGH);     

  lcd.print("Appuyez sur le bouton pour démarrer le test...");
}

int currentButtonState = HIGH;
int lastButtonState = HIGH;

void loop() {
  currentButtonState = digitalRead(buttonPin);
  if (currentButtonState == LOW && lastButtonState == HIGH) {
    digitalWrite(ledGreen , LOW);
digitalWrite(ledRed , LOW);
    lcd.print("Test en cours...");

    for (int i = 0; i < sizeof(pins) / sizeof(pins[0]); i++) {
      pinMode(pins[i], INPUT_PULLUP); 
    }
int i=0 ;
    for ( i = 0; i < 8; i++) {
      lcd.print("Test numéro : ");
      lcd.print(i + 1);
      pinMode(pins[i], OUTPUT);
      digitalWrite(pins[i], LOW);
      delay(1);
      lcd.print("Test Court-circuit entre ");
      lcd.print(pins_name[i]);
      lcd.print(" et ");
      lcd.println(pins_name[i + 1]);
      if (digitalRead(pins[i + 1]) == LOW) {
        lcd.print("i = ");
        lcd.println(i);
        
        break;
      } 
      pinMode(pins[i], INPUT_PULLUP);
      delay(1); 
    }
     Serial.println(i);
   if(i == 8 )
   {
   digitalWrite(ledGreen , HIGH);
   }
   else
   digitalWrite(ledRed , HIGH);
    // fin de test

  }
  lastButtonState = currentButtonState;
  delay(20);
}