Skocz do zawartości

Program magazynowy Arduino


kuba1334

Pomocna odpowiedź

Witajcie, 

ostatnio zajmuję się projektem, aby wprowadzić w firmie system zdalnego zapisywania stanu towarów, i do tego planu postanowiłem wykorzystać arduino.

Niestety napotkałem na problem z którym nie mogę sobie poradzić z błędem którego nie potrafię wyłapać.

Mam wrażenie że mikro kontroler  w tym przypadku jakby się cofał.

a oto mój kod

pod piny <13,7> podpięta klawiatura 4x4,

Jeśli ktoś miałby jakiś pomysł co z kodem może być nie tak to bardzo proszę o pomoc gdyż siedzę nad tym już około tygodnia i nie mogę ruszyć dalej

Wielkie dzięki za pomoc !

#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// set the LCD address to 0x27 for a 16 chars and 2 line display




//deklaracja typu wyświetlacza
// włączenie podwietlenia
const byte ROWS = 4;                         // Ilość wierszy klawiatury
const byte COLS = 4;                         // Ilość kolumn klawiatury
byte rowPins[ROWS] = {13, 12, 11, 10};       //numery pinów w arduino dla wierszy
byte colPins[COLS] = {9, 8, 7, 6};           //numery pinów w arduino dla kolumn



char keys[ROWS][COLS] = {
  {'A','#','0','*'},
  {'B','3','2','1'},
  {'C','6','5','4'},
  {'D','9','8','7'}                
};

Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

//Zmienne do przechowywania wartości
long Numer1, Numer2, Numer;
char klawisz;
char akcja;
boolean wynik = false;
char Stan = 'M';
long kod;
long szt;
// sa 3 stany, stan 'M' oznacza Menu i wlacza sie tylko po skoncu innego stanu
// stan 'O' oznacza odejmowanie towaru ze stanu i po jego koncu wlacza sie menu
// stan 'D' oznacza dodawanie towaru i dziala podobie jak 'O'
// stan 'S' oznacza eksport listy towaru na komputer 

void setup()

{

  pinMode(4, INPUT_PULLUP);       // przycisk oznaczajacy odejmowanie
  pinMode(3, INPUT_PULLUP);       // przycisk oznaczajacy dodawanie
  lcd.begin(16, 2);               //deklaracja typu wyświetlacza
  lcd.backlight();                // włączenie podwietlenia
  Serial.begin(9600);
  // Print a message to the LCD.
  lcd.backlight();


}



int tablica_stan [70];     // numer tabeli to kod towaru a wartosc tabeli to ilosc na magazynie



// I      1      I   2      I    3      I    X(up)         I
// I      4      I   6      I    6      I    Y(down)       I
// I      7      I   8      I    9      I    C(kasuj)      I
// I  Z(wstecz)  I  puste   IW(wyb. tow)I    K(zatwierdz)  I


void loop() {
  while (Stan == 'M') {
    lcd.setCursor(0, 0);
    lcd.print("wybierz -> aby dod");
    lcd.setCursor(0, 1);
    lcd.print("wybierz -> aby odj");
    while (digitalRead(3) == LOW) {
      Serial.println ("przycisk dodawania");
      Stan = 'D';
    }
    while (digitalRead(4) == LOW) {
      Serial.println ("przycisk odejmowania");
      Stan = 'O';
    }
  }
  while (Stan == 'O') {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("wybrales usuwanie");
    lcd.setCursor(0, 1);
    lcd.print("wprowadz kod");
    delay(1000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Wprowadz kod ");
    lcd.setCursor(0, 1);
    lcd.print("towaru");
    delay(1000);
    INKL();
    while (Numer =! kod){
    Numer = kod;
    Numer = 0;
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Wprowadz ilosc ");
    lcd.setCursor(0, 1);
    lcd.print("sztuk");
    INKL();
    Numer = szt;

    tablica_stan[kod] = tablica_stan[kod] + szt;

    if (tablica_stan[kod] == ( tablica_stan[kod] + szt) && tablica_stan[kod] > 0) {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("dodanie towaru  ");
      lcd.setCursor(0, 1);
      lcd.print("powiodlo sie");
      szt = 0;
      kod = 0;
      Numer = 0;
      Stan = 'M';
      delay(1000);
      lcd.clear();

    }
  
  }
  }
  while (Stan == 'D') {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("wybrales dodawanie");
    lcd.setCursor(0, 1);
    lcd.print("towaru");
    delay(1000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Wprowadz kod ");
    lcd.setCursor(0, 1);
    lcd.print("towaru");
    delay(1000);
    INKL();
    Numer = kod;
    Numer = 0;
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Wprowadz ilosc ");
    lcd.setCursor(0, 1);
    lcd.print("sztuk");
    INKL();
    Numer = szt;

    tablica_stan[kod] = tablica_stan[kod] + szt;

    if (tablica_stan[kod] == ( tablica_stan[kod] + szt) && tablica_stan[kod] > 0) {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("dodanie towaru  ");
      lcd.setCursor(0, 1);
      lcd.print("powiodlo sie");
      szt = 0;
      kod = 0;
      Numer = 0;
      Stan = 'M';
      delay(1000);
      lcd.clear();
    }
    
  }
}


void INKL() {                         // Oznacza inicacje klawisza
  klawisz = klawiatura.getKey();      //pobranie wartości i przypisanie do zmiennej klawisz
  if (klawisz != NO_KEY)                //jeśli nie ma wartości wzmiennej klawisz
    WykryjKlawisz();                      // wykonaj "WykryjKlawisz"
  if (wynik == true)                    //jeśli wartość wynik jest prawdziwa
  Wyswietl();                           // wykonaj "Wyswietl"
}



//Wykryj klawisz
void WykryjKlawisz()
{
  lcd.clear();                              //wyczyszczenie wyswietlacza

  if (klawisz == '*')                       //jeżeli wciśnięty klawisz C
  {
    Serial.println ("klawisz c");             //w monitorze portu wyświetl "klawisz c"
    Numer = Numer1 = Numer2 = 0; wynik = false; //Przypisz 0 do zmiennych Numer, Numer1, Numer2
  }

  if (klawisz == '1')                       //jeżeli klawisz 1 wciśnięty
  {
    Serial.println ("klawisz 1");             // w konsoli wyświetl klawisz 1
    if (Numer == 0)                           //jeżeli zmienna jest pusta
      Numer = 1;                                //zmień wartość zmiennej na 1
    else                                      // jeżeli w zmiennej jest już jakaś liczba/cyfra
      Numer = (Numer * 10) + 1;                 //wpisz 1 za tą liczbą/cyfrą
  }

  if (klawisz == '2')
  {
    Serial.println ("klawisz 2");
    if (Numer == 0)
      Numer = 2;
    else
      Numer = (Numer * 10) + 2;
  }

  if (klawisz == '3')
  {
    Serial.println ("klawisz 3");
    if (klawisz == 0)
      Numer = 3;
    else
      Numer = (Numer * 10) + 3;
  }

  if (klawisz == '4')
  {
    Serial.println ("klawisz 4");
    if (Numer == 0)
      Numer = 4;
    else
      Numer = (Numer * 10) + 4;
  }

  if (klawisz == '5')
  {
    Serial.println ("klawisz 5");
    if (Numer == 0)
      Numer = 5;
    else
      Numer = (Numer * 10) + 5;
  }

  if (klawisz == '6')
  {
    Serial.println ("klawisz 6");
    if (Numer == 0)
      Numer = 6;
    else
      Numer = (Numer * 10) + 6;
  }

  if (klawisz == '7')
  {
    Serial.println ("klawisz 7");
    if (Numer == 0)
      Numer = 7;
    else
      Numer = (Numer * 10) + 7;
  }

  if (klawisz == '8')
  {
    Serial.println ("klawisz 8");
    if (Numer == 0)
      Numer = 8;
    else
      Numer = (Numer * 10) + 8;
  }

  if (klawisz == '9')
  {
    Serial.println ("klawisz 9");
    if (Numer == 0)
      Numer = 9;
    else
      Numer = (Numer * 10) + 9;
  }

  if (klawisz == '0')
  {
    Serial.println ("klawisz 0");
    if (Numer == 0)
      Numer = 0;
    else
      Numer = (Numer * 10) + 0;
  }

  if (klawisz == '#')
  {
    Serial.println ("klawisz =");
    Numer2 = Numer;
    wynik = true;
  }

  
    delay(100);
  }


}





void Wyswietl()
{
  lcd.setCursor(0, 0);

  if (wynik == true) {


  }

  lcd.setCursor(0, 1);
  lcd.print(Numer);

}

 

Link do komentarza
Share on other sites

Witam na forum 🙂

19 godzin temu, kuba1334 napisał:

Mam wrażenie że mikro kontroler  w tym przypadku jakby się cofał.

Co to dokładnie znaczy? Jak program powinien się według Ciebie zachowywać, a co dokładnie się dzieje? Na czym polega ten błąd?

Link do komentarza
Share on other sites

Anonim

Radził bym zainwestować w czytniki kodów kreskowych i oprogramowanie typu qguar lub podobne. Na logistyce nie warto oszczędzać :D Wybacz ale gdybym wiedział, że magazyn mojego dostawcy jest obsługiwany takim oprogramowaniem to zmienił bym dostawce albo poradził bym mu zmianę magazynu. A jeśli się już upierać przy tego typu mikrokontrolerach to ESP chyba lepiej się nada.

Cóż, poświęciłem trochę czasu na analizę Twojego programu i poza widocznym brakiem doświadczenia w programowaniu nie natrafiłem na przyczynę owego tajemniczego cofania. Jeśli piszesz to w edytorze arduino to może spróbuj jakimś innym to łatwiej będzie wzrokowo coś wyłapać i powstawiaj sobie jakieś komunikaty do rs z wartościami zmiennych w kluczowych miejscach to może to coś rozjaśni.

Życzę sukcesów zawodowych, tylko nie chwal się nikomu, że postawiłeś magazyn na arduino ;D

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.