Witam znajomy poprosił mnie o pomoc z programem na Arduino. Ja osobiście nigdy nie miałem do czynienia z arduino więc nie za bardzo kumam o co mu chodzi.
W związku z powyższym pomoże mi ktoś rozwiązać problem nieprawidłowo działającego kodu.

Kod, który napisał znajomy.

//Testy do programu spirala
//Compatible with the Arduino IDE 1.0
//[email protected]

#include <Wire.h> //biblioteka komunikacji I2C
int niski = 0; //zmienna niski
int wysoki = 0; //zmienna wysoki

long pm = 0; //długa zmienna o nazwie pm, przypisana wartść 0

byte silnik1 = 9;
byte silnik2 = 10;
byte koniec = 13;
byte start = 11;
byte kran = 12;
byte hall = 2;
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);  // określenie adresu konwertera I2C - 0x3F oraz typu wyświetlacza - 16 znaków w 2 linach
#include <Keypad.h>
const byte ROWS = 4; // ile wierszy
const byte COLS = 3; //ile kolumn
byte rowPins[ROWS] = {2, 3, 4, 5}; //piny wierszy
byte colPins[COLS] = {6, 7, 8}; //piny kolumn
char keys[ROWS][COLS] = { //mapowanie klawiatury
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //inicjalizacja klawiatury
void setup()
{
  lcd.init();                      // inicjalizacja LCD
  lcd.backlight();                 // podswietlenie 
  lcd.setCursor(1,0);             //linia 0, pozycja 1
  lcd.print("SPIRALA V2");
  lcd.setCursor(0,1);             //linia 1, pozycja 0
  lcd.print("Test Arduino!");
  delay(2000);
 // lcd.init;
  lcd.setCursor(0,0);
  lcd.print("Wprowadz liczbe  ");
  lcd.setCursor(0,1);
  lcd.print("*-TAK #-NIE  ");
  Serial.begin(9600);
  pinMode(silnik1 , OUTPUT ); //deklaracja we-wy
  pinMode(silnik2 , OUTPUT );
  pinMode (koniec , OUTPUT);
  pinMode (kran , INPUT_PULLUP);
  pinMode (hall , INPUT);
  digitalWrite (silnik1 , LOW);
  digitalWrite (silnik2 , LOW);
  digitalWrite (koniec , LOW);
}


void loop()
{
 // int GetNumber()

    int num = 0; //zmienna num ustaw na 0
    char key = klawiatura.getKey(); //zmienna key, pobierz z klawiatury
    while(key != '#') //dopoki key nie wyniesie #
  {
       switch (key) //wybor wartsci z klawiatury
    {
         case NO_KEY:
         break;
         
      case '0': case '1': case '2': case '3': case '4':
      case '5': case '6': case '7': case '8': case '9': //przyjmuje wartosci
      Serial.print(key);
      num = num * 10 +(key - '0'); // ustawienie liczb jako dwucyfrowe
      break;
      case '*':
      num = 0;
      break;
    }
    key = klawiatura.getKey();
    }
  }

 char key = klawiatura.getKey(); //zmienna do przechowywania znaku (klawisz), odczyt z klawiatury
  
//  if (digitalRead(key) == LOW and start == LOW){   //warunek spełniony jeżeli wartość jest większa od 0
//  koniec = HIGH;
//   delay(50);
//    Serial.println(klawisz);
// lcd.setCursor(0,0);
//  lcd.print(klawiatura);}

Ponad to przesyłam opis, który otrzymałem od znajomego.

Opis ogólny:

Ma to być półautomatyczna nawijarka.
Po włączeniu zasilania na wyświetlaczu LCD ma być napis "Podaj ile zwoi", w drugiej linii "TAK-* NIE #". Po wpisaniu liczby zwoi akceptacja za pomocą *, lub w czasie pomyłki #, lub zmiana ilości zwoi # liczba *.
Stół musi być w pozycji góra, czyli zwarta krańcówka A0.
Naciśnięcie pedału START spowoduje uruchomienie silnika 2 - ruch stolika w dół i do góry do krańcówki A0 (ruch silnika w jedną stronę, gdyż ten mechanizm co mam jest mimośrodowy), następnie załącza silnik 1 i od wartości zadanej na wyświetlaczu odejmuje wartość zliczonych impulsów z czujnika Halla znajdującego się na zębatce przekładni silnika 1.
Gdy wynik odejmowania jest 0 następuje STOP, a na wyświetlaczu wyświetla się ostatnio wprowadzona wartość. Koniec.
Naciśnięcie pedału START spowoduje uruchomienie silnika 2 - ruch stolika w dół i do góry do krańcówki A0 (ruch silnika w jedną stronę, gdyż ten mechanizm co mam jest mimośrodowy), następnie załącza silnik 1 i od wartości zadanej na wyświetlaczu odejmuje wartość zliczonych impulsów z czujnika Halla znajdującego się na zębatce przekładni silnika 1.
Gdy wynik odejmowania jest 0 następuje STOP, a na wyświetlaczu wyświetla się ostatnio wprowadzona wartość. Koniec.
I tak w kóło.

Uwagi!!!
Krańcówka A0 ma charakterystykę zwłoczną.
Podświetlenie może się świecić cały czas lub nie.

Srodowisko ARDUINO, uruchomiłem wyświetlacz pod I2C, działa klawiatura, ale z resztą mam problem. Model czynnymam, którym można się bawić.

Za pomoc z góry dzięki.