• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
zliczanie sygnałów do zadanej wartości
#11
ok o coś takiego i chodzi ale dokładnie.
1. Po włączeniu zasilanie chciałbym aby najpierw został wyświetlony napis: Proszę podać ilość sztuk.
2. podaję np. 25 zatwierdzam gwiazdką.
3. wyświetla się napis :
zadana ilość sztuk: 10
aktualna wartość zliczonych sztuk: 0
4. każde kolejne zwarcie do masy to jedna sztuka
5. gdy osiągnę 10 zwarć odliczanie się zatrzymuje,
zapala się czerwona dioda..

Potrzebne mi to jest do odliczania gołębi.

Prosiłbym aby próbka byłą tylko pod monitor szeregowy jeżeli to możliwe gdyż mój wyświetlacz uległ uszkodzeniu i muszę czekać na nowy.
 
Odpowiedź
#12
czujnik pin 10 , dioda pin 13 , zatwierdzenie # , skasowanie i ponowne wprowadzenie *



Kod:
#include <Keypad.h>

#include <ShiftRegLCD123.h>            // te 2 linijki odpowiadają za  
ShiftRegLCD123 lcd(12, 13, SRLCD123);  // mój wyświetlacz daj taki jaki masz

int niski = 0;
int wysoki = 0;

byte czujnik = 10  ;
byte odliczone = 13 ;
byte stan = LOW ;
int ilosc_og = 0 ;
int ilosc_licz = 0 ;

int z = 0 ;

const byte ROWS = 4;
const byte COLS = 3;

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

byte rowPins[ROWS] = { 2,3,4,5 };  
byte colPins[COLS] = { 6,7,8 };
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup()
{
  lcd.begin(16,2);            
  lcd.clear();                            
  Serial.begin(9600);
  pinMode( czujnik  ,  INPUT_PULLUP ) ;
  pinMode( odliczone , OUTPUT );
  digitalWrite( odliczone , LOW );

//niski = GetNumber();
//Serial.print("min = ");
//Serial.println(niski);

Serial.println("Wprowadz ilosc szt. i zatwierdz # lud skasuj *");
wysoki = GetNumber();
Serial.print("Zadana ilosc = ");
Serial.println(wysoki);
  
}

void loop()
{
  
  
   if ( digitalRead(czujnik) == LOW and stan == LOW ){
   delay(50);
   stan = HIGH;
   ilosc_og = ilosc_og + 1 ;
   if ( wysoki > 0 ){
   if ( ilosc_og >= niski and ilosc_og <= wysoki ){ ilosc_licz = ilosc_licz + 1;
   if ( (wysoki - ilosc_licz) == 0 )digitalWrite( odliczone , HIGH );
  
  }}
Serial.print("Zadana ilosc - ");
Serial.print(wysoki - niski);
Serial.print(" / Aktualna ilosc - ");
Serial.println(ilosc_licz);

}
  
if ( digitalRead(czujnik) == HIGH)stan = LOW ;


}


int GetNumber()
{
   int num = 0;
   char key = kpd.getKey();
   while(key != '#')
   {
      switch (key)
      {
         case NO_KEY:
            break;

         case '0': case '1': case '2': case '3': case '4':
         case '5': case '6': case '7': case '8': case '9':
            lcd.print(key);
            Serial.print(key);
            num = num * 10 + (key - '0');
            break;

         case '*':
            num = 0;
            lcd.clear();
            break;
      }
      key = kpd.getKey();
   }
   Serial.println();return num;
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#13
Dzięki kolego JasQ.
Nie miałem jeszcze czasu sprawdzić programu.
Dzisiaj to zrobię .
Kolego mógłbyś sprawdzić czy w ten sposób mogę zaprogramować wyświetlacz i będzie to działać tak jak ci pisałem:


Kod:
#include <LiquidCrystal.h>

#include <Keypad.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int niski = 0;
int wysoki = 0;

byte czujnik = 10  ;
byte odliczone = 13 ;
byte stan = LOW ;
int ilosc_og = 0 ;
int ilosc_licz = 0 ;

int z = 0 ;

const byte ROWS = 4;
const byte COLS = 3;

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

byte rowPins[ROWS] = { 2,3,4,5 };  
byte colPins[COLS] = { 6,7,8 };
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup()
{
                        
  Serial.begin(9600);
  pinMode( czujnik  ,  INPUT_PULLUP ) ;
  pinMode( odliczone , OUTPUT );
  digitalWrite( odliczone , LOW );
  lcd.begin(16, 2);
  Serial.print("Zliczamie sztuk v.1");
  lcd.print("Zliczanie sztuk v.1");
  delay(180);
  lcd.clear();
//niski = GetNumber();
//Serial.print("min = ");
//Serial.println(niski);

Serial.println("Wprowadz ilosc szt. i zatwierdz # lud skasuj *");
lcd.print("Wprowadz ilosc szt. i zatwierdz # lud skasuj *");
delay(180);
lcd.clear();
wysoki = GetNumber();
Serial.print("Zadana ilosc = ");
lcd.print("Zadana ilosc= ");
Serial.println(wysoki);
  
}

void loop()
{
  
  
   if ( digitalRead(czujnik) == LOW and stan == LOW ){
   delay(50);
   stan = HIGH;
   ilosc_og = ilosc_og + 1 ;
   if ( wysoki > 0 ){
   if ( ilosc_og >= niski and ilosc_og <= wysoki ){ ilosc_licz = ilosc_licz + 1;
   if ( (wysoki - ilosc_licz) == 0 )digitalWrite( odliczone , HIGH );
  
  }}
Serial.print("Zadana ilosc - ");
Serial.print(wysoki - niski);
Serial.print(" / Aktualna ilosc - ");
Serial.println(ilosc_licz);

}
  
if ( digitalRead(czujnik) == HIGH)stan = LOW ;


}


int GetNumber()
{
   int num = 0;
   char key = kpd.getKey();
   while(key != '#')
   {
      switch (key)
      {
         case NO_KEY:
            break;

         case '0': case '1': case '2': case '3': case '4':
         case '5': case '6': case '7': case '8': case '9':
            Serial.print(key);
            lcd.print(key);
            num = num * 10 + (key - '0');
            break;

         case '*':
            num = 0;
            lcd.clear();
            break;
      }
      key = kpd.getKey();
   }
   Serial.println();return num;
}
 
Odpowiedź
#14
Nie . wyświetlacz ma 16 znaków w linijce a tu masz ze 30

" lcd.print("Wprowadz ilosc szt. i zatwierdz # lud skasuj *");"
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#15
ale gdybym zastosował większy wyświetlacz to może być.
A jak podzielić tą ścieżkę na dwa wiersze bo ona by miała zniknąć po wyświetleniu
 
Odpowiedź
#16
Proszę bardzo , jak widzisz głupie parę literek na lcd potrafią porządnie skomplikować kod programu miłej zabawy Wink

Kod:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#include <Keypad.h>

int niski = 0;
int wysoki = 0;

long pm = 0;

byte czujnik = 10  ;
byte odliczone = 13 ;
byte stan = LOW ;
int ilosc_og = 0 ;
int ilosc_licz = 0 ;
int przekroczono = 0;

int z = 0 ;

const byte ROWS = 4;
const byte COLS = 3;

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

byte rowPins[ROWS] = { 2,3,4,5 };  
byte colPins[COLS] = { 6,7,8 };
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup()
{
                        
  Serial.begin(9600);
  pinMode( czujnik  ,  INPUT_PULLUP ) ;
  pinMode( odliczone , OUTPUT );
  digitalWrite( odliczone , LOW );
  
lcd.begin(16, 2);
lcd.clear();
wysoki = GetNumber();
lcd.clear();

Serial.print("Zadana ilosc = ");
Serial.println(wysoki);
  
}

void loop()
{
  
  
   if ( digitalRead(czujnik) == LOW and stan == LOW ){
   delay(50);
   stan = HIGH;
   ilosc_og = ilosc_og + 1 ;
   if ( wysoki > 0 ){
   if ( ilosc_og >= niski and ilosc_og <= wysoki ){ ilosc_licz = ilosc_licz + 1;
   if ( (wysoki - ilosc_licz) == 0 )digitalWrite( odliczone , HIGH );
   }
    if ( ilosc_og > wysoki ){przekroczono = przekroczono - 1;}
  }
Serial.print("Zadana ilosc - ");
Serial.print( wysoki - niski );
Serial.print(" / Aktualna ilosc - ");
Serial.println(ilosc_licz);

}
  
if ( digitalRead(czujnik) == HIGH)stan = LOW ;
if ( przekroczono < 0 ){
lcd.setCursor(0,0);lcd.print("  ODLICZONO !!  ");lcd.print(wysoki - niski);
lcd.setCursor(0,1);lcd.print("ZA DUZO = ");lcd.print(przekroczono);lcd.print("   ");}
else {
lcd.setCursor(0,0);lcd.print("Zadana = ");lcd.print(wysoki - niski);
lcd.setCursor(0,1);lcd.print("Aktualna = ");lcd.print(ilosc_licz);}

}


int GetNumber()
{
   int num = 0;
   char key = kpd.getKey();
   while(key != '#')
   {
      switch (key)
      {
         case NO_KEY:
            break;

         case '0': case '1': case '2': case '3': case '4':
         case '5': case '6': case '7': case '8': case '9':
            Serial.print(key);
            
            num = num * 10 + (key - '0');
            break;

         case '*':
            num = 0;
            break;
      }
      key = kpd.getKey();
unsigned long cm = millis();
if ( cm - pm < 1000){lcd.setCursor(0,0);lcd.print("Licznik szt.v1");}
if ( cm - pm > 1000 and cm - pm < 2000){lcd.setCursor(0,0);lcd.print("Wprowadz ilosc");}
if ( cm - pm > 2000 and cm - pm < 3000){lcd.setCursor(0,0);lcd.print("zatwierdz #   ");}
if ( cm - pm > 3000 and cm - pm < 4000){lcd.setCursor(0,0);lcd.print("skasuj *      ");}
if ( cm - pm > 4000 ){pm = cm;}
lcd.setCursor(0,1);lcd.print("Ilosc = ");lcd.print(num);lcd.print("      ");
   }
   Serial.println();return num;
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#17
dziekuje bardzo kolego twoja pomoc jest nio oceniona
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości