Show Posts
Pages: 1 [2] 3 4 ... 6
16  Using Arduino / Programming Questions / Re: statechangedetection and debounce on: December 17, 2013, 03:46:31 am
Thanks for explanation.
I, or my students,  will try this later. There are other deadlines at the moment.

(I coach a group of students who do projects by Physics, including some with arduino. And their projecttime is nearly ended. It's all very basic for them and for me, but I hope to enthousiasm them to choose for Arduino.)
17  Using Arduino / Programming Questions / Re: statechangedetection and debounce on: December 12, 2013, 05:35:22 am
Hmm... not as simple as I thought.

When I pushed the button the first time I started millis() to measure the 2 seconds (wherein the 3 pushes must be done).
Evenso I started millis() for debounce.

But the same statements reads the buttonstate for push 1, 2 or 3.

Code:
if (buttonState != lastButtonState) {                // vergelijken met vorige staat van de knop
    if (buttonState == HIGH) {                        // als de status nu HIGH is, is hij dus van LOW naar HIGH gegaan en is de knop dus INgedrukt.
      buttonPushCounter++;                            // we tellen nu +1
      if (buttonPushCounter < 2){                     //als de teller kleiner is dan 2
        starttime = millis();       

I have the measure the time between the first two pushes.

What can I do?

J.
18  Using Arduino / Programming Questions / Re: statechangedetection and debounce on: December 11, 2013, 06:27:27 am
Indeed!
In fact I  coded a 'debounce'-system, only with a debouncetime of 2 seconds.

The only thing i have to do is:
If the second push is within 20 ms, the push isn't a push but a jitter.

Thanks for this eyeopener.

J.
19  Using Arduino / Programming Questions / statechangedetection and debounce on: December 11, 2013, 05:35:41 am
Hi,

When a button is pressed 3 times within 2 seconds, a led light up.
I've done this with the arranged sketch of StateChangeDetection.

Now I want to debounce the button.
But in the Debounce example there look likes a StateChangeDetection too.
When I try to combine this, i think a few statements are double, but I'm not sure of it.

How can i combine these two examples?

This is the my first code (sorry for dutch comment)

Code:
const int  buttonPin = 2;    // the pin that the pushbutton is attached to
const int ledPin = 13;       // the pin that the LED is attached to

// Variables will change:
int buttonPushCounter = 0;   // counter for the number of button presses
int buttonState = 0;         // current state of the button
int lastButtonState = 0;     // previous state of the button

unsigned long starttime;
unsigned long stoptime;
int time;

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
 
  buttonState = digitalRead(buttonPin);                //uitlezen knop

  if (buttonState != lastButtonState) {                // vergelijken met vorige staat van de knop
    if (buttonState == HIGH) {                        // als de status nu HIGH is, is hij dus van LOW naar HIGH gegaan en is de knop dus INgedrukt.
      buttonPushCounter++;                            // we tellen nu +1
      if (buttonPushCounter < 2){                     //als de teller kleiner is dan 2
        starttime = millis();                         //noemen we dit de starttime (gevuld met de functie millis(), die te tijd in millisec. aangeeft vanaf de start van de sketch)
        Serial.print("starttime: ");
        Serial.println(starttime);
      }
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounter);
    }
  }
  lastButtonState = buttonState;                      //nu is deze status (HIGH) dus de vorige status geworden

  if (buttonPushCounter == 3) {                        //als de teller op waarde 3 staat, dus de knop 3 keer HIGH geweest is
    stoptime = millis();                                // noemen we dat de stoptime, ook weer gevuld met millis()
    Serial.print("stoptime: ");
    Serial.println(stoptime);

    time = stoptime-starttime;                          //we trekken stop- en starttijd van elkaar af en noemen dit 'time'

    Serial.print("time between pushes ");
    Serial.println(time);

    buttonPushCounter = 0;                              //dan zetten we de teller weer op 0, klaar voor de volgende ronde

    if (time < 2000){                                  //nu controleren we op de het optellen van 0 tot 3 binnen de 2 seconden is gebeurt
      digitalWrite(ledPin, HIGH);                      //zo ja, ledje aan of wat dan ook...
    }
    else {
      digitalWrite(ledPin, LOW);                      //en anders niks
    }
  }
}

Gr.
Johan
20  Using Arduino / Programming Questions / Re: keypad read out on: April 25, 2013, 05:57:07 am
A little bit strange thing:

after the 4 inputs I see:
Code:
1
12
123
1234 J

It puts a 'J' after the code. Where did he come from?

This is the code:
Code:
char secureCode[4]={'1','2','3','4'};
char code[4];
char c=0;

void loop(){
  char key=keypad.getKey();
  if(key!=NO_KEY){
    code[c++]=key;
    if(c==4){
      char correct=1;
      for(c=0; c<4; c++){
        correct&=(code[c]==secureCode[c]);
      }
      if(correct){
        //Code for correct keys
      }
      else{
        //Code for incorrect keys
      }
      c=0;
    }
  }
}
21  International / Nederlands / Re: keypad code uitlezen on: April 25, 2013, 04:21:13 am
@ruud

Je moet int code gewoon boven de setup() plaatsen, zodat deze voor heel de sketch te gebruiken is.
Als je 'm in de loop plaatst maakt ie 'm iedere loop weer aan.

Gr.
Johan
22  Using Arduino / Programming Questions / Re: keypad read out on: April 25, 2013, 02:13:36 am
With these comments I can get to work! Thanks all for thinging with me.

@billroy
It didn't.
code must be filled with the entered code from the keypad.
And at last all four digits must be in 'code'. So code == 1234.
Therefor code was first 1, after next input 2, then 3, then 4. But not the whole securecode.

Gr.
Johan
23  Using Arduino / Programming Questions / Re: keypad read out on: April 24, 2013, 04:03:01 am
Fine, it works.

But i'm interested in solution with use of an array.
How can I fill 4 positions of an array with 4 different getKeys()?

Gr.
Johan
24  International / Nederlands / Re: keypad code uitlezen on: April 24, 2013, 03:16:00 am
Opgelost:
int code stond op een of andere manier binnen de loop en moest globaal gedefinieerd worden.

Bedankt voor het meedenken...

Gr.
Johan
25  Using Arduino / Programming Questions / keypad read out on: April 24, 2013, 02:39:54 am
Hi,

I want to use a keypad for a security lock.
When I put in the right code (p.e. 1234), the locker is open, or a green led flashes or something.

I used the code from the keypad library with some changes in the loop. Such as:

Code:
#include <Keypad.h>
 
const byte ROWS = 4; //four rows
 const byte COLS = 3; //three columns
 char keys[ROWS][COLS] = {
   {'1','2','3'},
   {'4','5','6'},
   {'7','8','9'},
   {'#','0','*'}
 };
 byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
 byte colPins[COLS] = {8, 7, 6}; //connect to the column pinouts of the keypad
 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
 
void setup(){
   Serial.begin(9600);
 }
 
void loop(){
int code;
int secureCode = 1234;

   char key = keypad.getKey();
 
  if (key != NO_KEY){
    code = code * 10 + key - '0';
     Serial.println(code);
   }
 }
...and other code to check the secureCode...

The problem is that everytime when I put a new number, this number comes on a new line.
So the int code won't be filled with 1234, but first 1, then 2. A new input replaces the old value.
How can i solve this?

I was thinking of an array, to put in the codes. When array is complete, check his content en give action or not. But experts from the dutch forum not recommended this.

Gr.
Johan
26  International / Nederlands / Re: keypad code uitlezen on: April 24, 2013, 02:22:14 am
Hmmm, nog steeds zelfde probleem.
Code uit het O'Reilly Cookbook gebruikt, zonder library.
Ik ga, zonder jouw expertise te onderschatten (de meesten hier zijn vele malen verder dan mij!), de vraag ook even op het algemene forum neerleggen.
Mogelijk krijg ik dan nieuwe inzichten.

Gr.
Johan
27  International / Nederlands / Re: keypad code uitlezen on: April 24, 2013, 01:48:01 am
Ik gebruik de library Keypad.
Om het keypad uit te lezen stond in het voorbeeldbestand de functie getKey()

Zou het mogelijk zijn dat in de functie getKey() standaard een newline commando zit?

Ik zal eens een poging doen met een sketch zonder gebruik van deze library.

Gr.
Johan
28  International / Nederlands / Re: keypad code uitlezen on: April 23, 2013, 06:24:46 am
Beste Jantje,
Even je code geprobeerd, maar dat werkt nog niet.

Code:
int geheimeCode = 1234;
int code = 0;
void loop(){
  char customKey = customKeypad.getKey();
 
  if (customKey){
    code=code*10+customKey-'0';
    Serial.println(code);
  }
}

Ik was dus even bij het begin begonnen en had puur de code geprint. Nog zonder acties van als if code == geheimeCode etc.
Als ik nu 1 druk, komt er 1.
Druk ik daarna 2, komt er alleen 2. En niet 12. Hij vervangt die 1 gewoon door die 2. Lijkt me...

Maar hij moet 4 getallen in één 'ding' zetten en die getallen samen controleren.
Vandaar eigenlijk mijn gedachte met die array. Daarin kun je 4 getallen plaatsen en daarna (dacht ik dus) die 4 getallen als één getal uitlezen.

Whats wrong?

Gr.
Johan
29  International / Nederlands / Re: keypad code uitlezen on: April 23, 2013, 02:03:04 am
Naar zo'n soort truc was ik idd op zoek.
Mijn gedachte was dat de 'int code' steeds weer opnieuw gevuld wordt, dus nooit de totaal ingetoetste code kan bevatten.
Maar door het *10 en minus het nulletje te doen, zou dat moeten kunnen. We gaan het proberen.

Nog even terugkomend op die array gedachte: Je kunt een array toch vullen met 'customKey'? Hoe werkt dat dan?
Ik snap wel hoe je bepaalde waarde uit een array haalt, maar hoe zet je een getal/letter op een bepaalde positie in de array?

Bedankt alvast voor de hulp.

Gr.
Johan
30  International / Nederlands / keypad code uitlezen on: April 22, 2013, 08:40:57 am
Hoi,

Ik wil met een keypad een beveiligingscode intoetsen, deze controleren en vervolgens goed- of foutkeuren.
Met de Custom-keypad uit de  keypad-library zit ik in elk geval al handig op weg om de cijfers weer te geven.

Het lijkt me dat ik een array moet vullen met bijv. 4 cijfers.
Zijn deze cijfers goed (hoe controleer ik dat?) volgt er een actie.

Maar ik snap het principe niet zo van een array en hoe daar mee om te gaan.

Of zou het handiger op een andere manier kunnen?

Hier de code uit de library:
Code:
#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
byte rowPins[ROWS] = {3, 2, 1, 0}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {7, 6, 5, 4}; //connect to the column pinouts of the keypad

//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void setup(){
  Serial.begin(9600);
}
 
void loop(){
  char customKey = customKeypad.getKey();
 
  if (customKey){
    Serial.println(customKey);
  }
}

Is het volgende (afgezien van de syntax) een idee?

Code:
if (customKey){
//zet deze key ergens (in een array?) en wacht op de volgende
}
if (array = in orde){
//maak de deur open o.i.d.
}

Groet,
Johan
Pages: 1 [2] 3 4 ... 6