Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino - tutorijali, pitanja, primjeri i projekti
Evo kod sa debounce do duse malo prepravljen u odnosu na orginal jer se moralo prilagoditi tvom kodu

Hvala @mikikg ovo je stvarno jednostavno a radi posao...

Code:
/****************************************************************************** debounce.c written by Kenneth A. Kuhn version 1.00 This is an algorithm that debounces or removes random or spurious transistions of a digital signal read as an input by a computer. This is particularly applicable when the input is from a mechanical contact. An integrator is used to perform a time hysterisis so that the signal must persistantly be in a logical state (0 or 1) in order for the output to change to that state. Random transitions of the input will not affect the output except in the rare case where statistical clustering is longer than the specified integration time. The following example illustrates how this algorithm works. The sequence labeled, real signal, represents the real intended signal with no noise. The sequence labeled, corrupted, has significant random transitions added to the real signal. The sequence labled, integrator, represents the algorithm integrator which is constrained to be between 0 and 3. The sequence labeled, output, only makes a transition when the integrator reaches either 0 or 3. Note that the output signal lags the input signal by the integration time but is free of spurious transitions. real signal 0000111111110000000111111100000000011111111110000000000111111100000 corrupted 0100111011011001000011011010001001011100101111000100010111011100010 integrator 0100123233233212100012123232101001012321212333210100010123233321010 output 0000001111111111100000001111100000000111111111110000000001111111000 I have been using this algorithm for years and I show it here as a code fragment in C. The algorithm has been around for many years but does not seem to be widely known. Once in a rare while it is published in a tech note. It is notable that the algorithm uses integration as opposed to edge logic (differentiation). It is the integration that makes this algorithm so robust in the presence of noise. ******************************************************************************/ /* The following parameters tune the algorithm to fit the particular application. The example numbers are for a case where a computer samples a mechanical contact 10 times a second and a half-second integration time is used to remove bounce. Note: DEBOUNCE_TIME is in seconds and SAMPLE_FREQUENCY is in Hertz */ #define DEBOUNCE_TIME 0.3 #define SAMPLE_FREQUENCY 10 #define MAXIMUM (DEBOUNCE_TIME * SAMPLE_FREQUENCY) /* These are the variables used */ //unsigned int input; /* 0 or 1 depending on the input signal */ unsigned int integrator; /* Will range from 0 to the specified MAXIMUM */ //unsigned int output; /* Cleaned-up version of the input signal */ int keyStart = 13; //deklarises i inicijalizujes globalnu promenljivu za taster boolean toggleKey = false; //promenljiva za status tastera dali ako je stisnut menja vrednost START/PAUSA int num = 0; //tvoja promenljiva za broj samo sto je sad inicijalizujemo int aPin = 2; // A int bPin = 3; // ________ int cPin = 4; // | | int dPin = 5; // F | | B int ePin = 6; // | G | int fPin = 7; // |________| int gPin = 8; // | | int GND1 = 9; // | | int GND2 = 10; // E | | C int GND3 = 11; // |________| int GND4 = 12; // // D int dig1 = 0; int dig2 = 0; int dig3 = 0; int dig4 = 0; int DTime = 4; int tmp = 0; void setup() { pinMode(keyStart, INPUT); // ovo stavis u void setup() pinMode(aPin, OUTPUT); pinMode(bPin, OUTPUT); pinMode(cPin, OUTPUT); pinMode(dPin, OUTPUT); pinMode(ePin, OUTPUT); pinMode(fPin, OUTPUT); pinMode(gPin, OUTPUT); pinMode(GND1, OUTPUT); pinMode(GND2, OUTPUT); pinMode(GND3, OUTPUT); pinMode(GND4, OUTPUT); } void loop() { digitalWrite( GND1, LOW); digitalWrite( GND2, LOW); digitalWrite( GND3, LOW); digitalWrite( GND4, LOW); int taster = digitalRead(keyStart); if(taster == 1 ) // Svaki put kad se pritisne taster menja se status START ili PAUSA { if (integrator > 0) { integrator--; toggleKey = !toggleKey; } } else if (integrator < MAXIMUM) { integrator++; } if(toggleKey) //u zavisnosti ako je true(START) onda broj se uvecava i prikazuje novi { if(++num > 9999) { num = 0; } } dig1 = num / 1000; tmp = num - (dig1 * 1000); dig2 = tmp / 100; tmp = tmp - (dig2 * 100); dig3 = tmp / 10; dig4 = tmp - (dig3 *10); digitalWrite( GND4, HIGH); //digit 4 pickNumber(dig4); delay(DTime); digitalWrite( GND4, LOW); clearLEDs(); digitalWrite( GND3, HIGH); //digit 3 pickNumber(dig3); delay(DTime); digitalWrite( GND3, LOW); clearLEDs(); digitalWrite( GND2, HIGH); //digit 2 pickNumber(dig2); delay(DTime); digitalWrite( GND2, LOW); clearLEDs(); digitalWrite( GND1, HIGH); //digit 1 pickNumber(dig1); delay(DTime); digitalWrite( GND1, LOW); clearLEDs(); } void pickNumber(int x){ switch(x){ case 0: zero(); break; case 1: one(); break; case 2: two(); break; case 3: three(); break; case 4: four(); break; case 5: five(); break; case 6: six(); break; case 7: seven(); break; case 8: eight(); break; case 9: nine(); break; default: break; } } void clearLEDs() { digitalWrite( 2, LOW); // A digitalWrite( 3, LOW); // B digitalWrite( 4, LOW); // C digitalWrite( 5, LOW); // D digitalWrite( 6, LOW); // E digitalWrite( 7, LOW); // F digitalWrite( 8, LOW); // G } void one() { digitalWrite( aPin, LOW); digitalWrite( bPin, HIGH); digitalWrite( cPin, HIGH); digitalWrite( dPin, LOW); digitalWrite( ePin, LOW); digitalWrite( fPin, LOW); digitalWrite( gPin, LOW); } void two() { digitalWrite( aPin, HIGH); digitalWrite( bPin, HIGH); digitalWrite( cPin, LOW); digitalWrite( dPin, HIGH); digitalWrite( ePin, HIGH); digitalWrite( fPin, LOW); digitalWrite( gPin, HIGH); } void three() { digitalWrite( aPin, HIGH); digitalWrite( bPin, HIGH); digitalWrite( cPin, HIGH); digitalWrite( dPin, HIGH); digitalWrite( ePin, LOW); digitalWrite( fPin, LOW); digitalWrite( gPin, HIGH); } void four() { digitalWrite( aPin, LOW); digitalWrite( bPin, HIGH); digitalWrite( cPin, HIGH); digitalWrite( dPin, LOW); digitalWrite( ePin, LOW); digitalWrite( fPin, HIGH); digitalWrite( gPin, HIGH); } void five() { digitalWrite( aPin, HIGH); digitalWrite( bPin, LOW); digitalWrite( cPin, HIGH); digitalWrite( dPin, HIGH); digitalWrite( ePin, LOW); digitalWrite( fPin, HIGH); digitalWrite( gPin, HIGH); } void six() { digitalWrite( aPin, HIGH); digitalWrite( bPin, LOW); digitalWrite( cPin, HIGH); digitalWrite( dPin, HIGH); digitalWrite( ePin, HIGH); digitalWrite( fPin, HIGH); digitalWrite( gPin, HIGH); } void seven() { digitalWrite( aPin, HIGH); digitalWrite( bPin, HIGH); digitalWrite( cPin, HIGH); digitalWrite( dPin, LOW); digitalWrite( ePin, LOW); digitalWrite( fPin, LOW); digitalWrite( gPin, LOW); } void eight() { digitalWrite( aPin, HIGH); digitalWrite( bPin, HIGH); digitalWrite( cPin, HIGH); digitalWrite( dPin, HIGH); digitalWrite( ePin, HIGH); digitalWrite( fPin, HIGH); digitalWrite( gPin, HIGH); } void nine() { digitalWrite( aPin, HIGH); digitalWrite( bPin, HIGH); digitalWrite( cPin, HIGH); digitalWrite( dPin, HIGH); digitalWrite( ePin, LOW); digitalWrite( fPin, HIGH); digitalWrite( gPin, HIGH); } void zero() { digitalWrite( aPin, HIGH); digitalWrite( bPin, HIGH); digitalWrite( cPin, HIGH); digitalWrite( dPin, HIGH); digitalWrite( ePin, HIGH); digitalWrite( fPin, HIGH); digitalWrite( gPin, LOW); }
meraRadioPlayer - Internet radio player koji razvijam i testiram u realnom vremenu
Reply


Messages In This Thread
RE: Arduino - tutorijali, pitanja, primjeri i projekti - by me[R]a - 10-12-2016, 10:01 PM

Forum Jump:


Users browsing this thread: 3 Guest(s)