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 tu masz przykładowy kod jak uzyskać zmienną wielocyfrową z klawiatury . Pobaw się kodem wieczorkiem zerknę na postępy
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;
}
|