• 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
#1
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 )
 
Odpowiedź
#2
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 ;
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#3
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
 
Odpowiedź
#4
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 .
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#5
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
 
Odpowiedź
#6
Ta linijka determinuje od ilu do ilu zmień wartości w niej tylko

if ( z => 64 and z <= 128 )
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#7
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]
 
Odpowiedź
#8
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;
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#9
kolgeo jasq.
to chyba juz całkiem mnie przerosło .
Był byś może zainteresowany napisaniem takiego kodu odpłatnie.
 
Odpowiedź
#10
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;
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości