Arduino Polska Forum
zliczanie sygnałów do zadanej wartości - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: zliczanie sygnałów do zadanej wartości (/watek-zliczanie-sygna%C5%82%C3%B3w-do-zadanej-warto%C5%9Bci)

Strony: 1 2


zliczanie sygnałów do zadanej wartości - stalker1992 - 09-12-2015

Witam.
Natrafiłem na jeszcze jeden problem.
Chciałbym wykonać licznik sygnałów do zadanej wartości.
Dokładnie.
 1. Do arduino podłączam czujnik indukcyjny lub optyczny który podaje sygnał wysoki lub niski na wejście .
2. układ sterowany przez klawiaturę 4x4 .
3. dane wyświetlacza na wyświetlaczu lcd. 
4. gdy podana będzie wartość np 64 to arduino ma zliczać sygnały aż do osiagnięcia  zadanej wartości i się zatrzymać.

Wiem już jak podłączać klawiaturę i wyświetlacz lcd lecz nie mam pomysłu jak zrealizować całość będę wdzięczny za jakiekolwiek sugestie

Pozdrawiam

wydaję się mnie że zliczanie można by zrealizować przy kodzie puschCounter

( proszę o edytowanie swoich postów a nie pisanie 1 pod drugim )


RE: zliczanie sygnałów do zadanej wartości - JasQ - 09-12-2015

Możesz tak

Kod:
// przed setup

byte czujnik = LOW ;
byte odczyt = LOW ;
int ilosc_czujnik = 0 ;
int z = 0 ;

// wsetup

pinMode( czujnik  ,  INPUT ) ;

// w loop

if ( z => 64 and z <= 128 ){
if ( digitalRead(czujnik) == HIGH  and  odczyt == LOW ;){
    odczyt == HIGH ;
    ilosc_czujnik=ilosc_czujnik + 1 ;
    }}
if ( digitalRead(czujnik) == LOW)odczyt == LOW ;



RE: zliczanie sygnałów do zadanej wartości - stalker1992 - 09-12-2015

Ok chyba rozumiem if z64 do 128 to ilość możliwych impulsów.
A w jaki sposób będą zadawana ilość impulsów do których ma trwać zliczanie
Jak miała by wygląda ta część kodu jutro postaram się wrzucić to część kodu która mam gdy wykonam wstępne próby


RE: zliczanie sygnałów do zadanej wartości - JasQ - 09-12-2015

Od 64 do 128 będzie zliczał później już nie dróga liczba czyli 128 kończy zliczanie w funkcji if zawarty jest przedział zliczania .


RE: zliczanie sygnałów do zadanej wartości - stalker1992 - 10-12-2015

Nie bardzo rozumiem czyli maksymalnie to 128 ?
A co jezli potrzebowal bym np doliczyć do 356.
I w jaki sposób mogę zakończyć odliczanie


RE: zliczanie sygnałów do zadanej wartości - JasQ - 10-12-2015

Ta linijka determinuje od ilu do ilu zmień wartości w niej tylko

if ( z => 64 and z <= 128 )


RE: zliczanie sygnałów do zadanej wartości - stalker1992 - 10-12-2015

ok rozumiem.
Tylko ze ja chcę za pomocą klawiatury definiować wartować do której ma trwać zliczanie...
Na wyświetlaczu ma być wyświetlana zadana wartość i wartość aktualna .
Po dotarciu do zadanej wartości ma się zatrzymać zliczanie i zapalić dioda LED

Mam narzazie taki kod:


Kod:
// Zliczanie impulsów.
LiquidCrystal lcd(52, 50, 48, 46, 44, 42);

#include <Keypad.h>

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

char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'#','0','*'}
};
// przyciski ROW0, ROW1, ROW2 , ROW3 .
byte rowPins[ROWS] = { 22, 24, 26, 28 };
//  przyciski COL0, COL1, COL2 .
byte colPins[COLS] = { 30, 32, 34 };

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

// czujnik
byte optical_sensor = LOW ;
byte optical_sensor_read = LOW ;
int ilosc_czujnik = 0 ;
int z = 0 ;

int led_stop= 53;
void setup()
{
  lcd.begin(16, 2);
  lcd.print("Zliczanie impulsów:");
  pinMode(optical_sensor, INPUT);
pinMiode (led_stop, OUTPUT)
  Serial.begin(9600);
}

void loop()
{
    lcd.setCursor(0, 1);
    
if ( z => 0 and z <= 356 );{
if ( digitalRead(optical_sensor) == HIGH  and  optical_sensor_read == LOW ;){
    optical_sensor_read == HIGH ;
    ilosc_czujnik=ilosc_czujnik + 1 ;
    }}
if ( digitalRead(optical_sensor) == LOW)optical_sensor_read == LOW ;

  
  char key = kpd.getKey();
  if(key)  // sprawdzanie wcisnietego przycisku.
  {

  }
}

proszę używać [code]


RE: zliczanie sygnałów do zadanej wartości - JasQ - 10-12-2015

No to kolego jest wyższa szkoła jazdy , to nie jest komputer że klawisze podpinasz i działa Wink tu masz przykładowy kod jak uzyskać zmienną wielocyfrową z klawiatury . Pobaw się kodem wieczorkiem zerknę na postępy Wink

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 v1 = 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);                    
}

void loop()
{
   v1 = GetNumber();

Serial.println(v1);
}


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.println(key);
            num = num * 10 + (key - '0');
            break;

         case '*':
            num = 0;
            lcd.clear();
            break;
      }
      key = kpd.getKey();
   }
   return num;
}



RE: zliczanie sygnałów do zadanej wartości - stalker1992 - 11-12-2015

kolgeo jasq.
to chyba juz całkiem mnie przerosło .
Był byś może zainteresowany napisaniem takiego kodu odpłatnie.


RE: zliczanie sygnałów do zadanej wartości - JasQ - 11-12-2015

Zerknij .... działa na razie na porcie szeregowym ( w terminalu ) jak będzie ci pasowało to powalczymy z lcd

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 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 ) ;


niski = GetNumber();
Serial.print("min = ");
Serial.println(niski);
wysoki = GetNumber();
Serial.print("max = ");
Serial.println(wysoki);
  
}

void loop()
{
  
  
   if ( digitalRead(czujnik) == HIGH and stan == LOW ){
   stan = HIGH;
   ilosc_og = ilosc_og + 1 ;
   if ( wysoki > 0 ){
   if ( ilosc_og >= niski and ilosc_og <= wysoki ){
   ilosc_licz = ilosc_licz + 1;
  }}}
  
if ( digitalRead(czujnik) == LOW)stan = LOW ;

Serial.print(czujnik);
Serial.print(" / ");
Serial.print(stan);
Serial.print(" / ");
Serial.print(ilosc_og);
Serial.print(" / ");
Serial.println(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':
            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;
}