waarde optellen

Arduino specifieke Software
Berichten: 6
Geregistreerd: 12 Sep 2017, 10:46

waarde optellen

Berichtdoor Driewegstekker » 24 Sep 2017, 13:03

Beste mensen,

Ik ben pas nieuw hier en ook pas begonnen met programeren.
ik heb nu twee projekten gedaan een windrichtingsmeter met lcd uitlezing en een met led uitlezing.
Eerder werkte ik met Flowcode dat werd te duur om te upgrade daarom ben ik begonnen met arduino.
Ik heb nu een digitale klok geprogrameerd met externe sec puls gever.
Dat zou niet hoeven maar ik vond dat gewoon leuk.
Ik kom er maar niet uit hoe ik nu knoppen moet programeren om de klok op tijd te zetten.
Ik kan wel een knop programeren maar dan telt hij met de snelheid van 16mHz de waarde op.
Ik wil natuurlijk een knop indrukken en dan met 1 ophogen.
Hoe moet ik dat nu doen?
Hier is mijn code.
cpp code
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //These are the pins used on this shield

void setup(){
pinMode(PulsIn, INPUT);
attachInterrupt(0,rpm, RISING);
pinMode(3,OUTPUT);
lcd.begin(16, 2);
lcd.setCursor(0,0);
}
void loop(){

led=digitalRead(2);

if(led == HIGH)
{digitalWrite(3,HIGH);}
else{digitalWrite(3,LOW);}

if(puls>59){
puls=0;
minuten++;
lcd.clear();}


if(minuten>59){
minuten=0;
uren++;}

if(uren>23){
uren=0;}


lcd.setCursor(5,0);
lcd.print("TIME");
lcd.setCursor(5,2);
lcd.print(":");
lcd.print(puls);
lcd.setCursor(2,2);
lcd.print(":");
lcd.print(minuten);
lcd.setCursor(0,2);
lcd.print(uren);
}

Groet Henk.

Advertisement

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: waarde optellen

Berichtdoor Gij Kieken » 24 Sep 2017, 14:04

Het eerste wat opvalt is, de code is niet compleet behoudens de andere fouten.
Waar is de ISR routine (vreemde benaming ook rpm?)

Berichten: 6
Geregistreerd: 12 Sep 2017, 10:46

Re: waarde optellen

Berichtdoor Driewegstekker » 24 Sep 2017, 20:29

Hallo Gij,

Ik ben een beginneling en ik had niet het gevoel dat er fouten in zouden zitten.
Ik heb veel op internet gekeken en stukjes uitgeprobeerd wat met een klok te maken had.
Bij het wegschrijven was er geen foutmelding en de klok loopt goed.

Wat bedoel je met een ISR routine?

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: waarde optellen

Berichtdoor Gij Kieken » 24 Sep 2017, 22:02

Regel 5 < pinMode(PulsIn, INPUT);>
PulsIn is niet gedeclareerd.

Regel 6 < attachInterrupt(0,rpm, RISING);> verwijst naar een interrupt service routine.
Die zie ik niet staan in jouw code.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: waarde optellen

Berichtdoor shooter » 25 Sep 2017, 22:53

Code: Alles selecteren
led=digitalRead(2);
 
 if(led == HIGH)
  {[code]digitalWrite(3,HIGH);[/code]}
  else{digitalWrite(3,LOW);}

kun je vervangen door
Code: Alles selecteren
digitalWrite(3,digitalRead(2));

verder mis ik de routine (interupt ) om de puls op te hogen
als je daarin ook een regel erbij maakt dat er 1 opgeteld wordt als er een knop ingedrukt wordt dan ben je er al.
overigens zou ik de display maar 1 keer per seconde beschrijven.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: waarde optellen

Berichtdoor Gij Kieken » 26 Sep 2017, 14:16

Hallo Driewegstekker hier wat leesvoer <https://www.arduino.cc/en/Reference/AttachInterrupt>

Berichten: 6
Geregistreerd: 12 Sep 2017, 10:46

Re: waarde optellen

Berichtdoor Driewegstekker » 28 Sep 2017, 15:25

Hallo allen,

Ik ben er inmiddels uit en de knoppen werken.
Ik ben een beginneling en ik moet nog veel leren dat zie ik wel alle begin is moeilijk.
En ik weet dat er meerdere wegen naar Rome leiden.
Bedankt voor jullie reacties!

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: waarde optellen

Berichtdoor Gij Kieken » 28 Sep 2017, 15:43

Leuk om te horen dat het werkt.
Nog leuker is het wanneer mede forum leden de oplossing ook zien, iedereen heeft er dan iets aan.

Berichten: 6
Geregistreerd: 12 Sep 2017, 10:46

Re: waarde optellen

Berichtdoor Driewegstekker » 28 Sep 2017, 19:03

Beste forum leden,

Dit is mijn digitale klok.
Ik weet bijna zeker dat er hobbyisten zijn die het anders geprogrammeerd zouden hebben.
Maar ik ben net begonnen met programeren en ik zag nog geen betere manier.
Er moeten nog verbeteringen aangebracht worden maar dat komt later.

// variable benoemen.
int volatile sec;
int optel;
int laastestatus;
int laastestat;
int knopstatus;
int knopstat;
int knop=A2;
int knoppe=A3;
int minuten;
int uren;
int led;
int PulsIn = 2;
void rpm(){sec++;}

/*-----( Import needed libraries )-----*/

#include <LiquidCrystal.h>
/*-----( Declare objects )-----*/
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup(){
pinMode(knop, INPUT); //ingang A2
pinMode(PulsIn, INPUT); //digitale ingang 2
attachInterrupt(0,rpm, RISING);
pinMode(3,OUTPUT);
lcd.begin(16, 2);
lcd.setCursor(0,0);

}
void loop(){

knopstatus = digitalRead(knop);

if (knopstatus != laastestatus) {
if (knopstatus == HIGH) {
minuten=minuten+1;
if(minuten>59){
minuten=0;
lcd.clear();}

}
}
knopstat = digitalRead(knoppe);
if (knopstat != laastestat) {
if (knopstat == HIGH) {
uren=uren+1;
if(uren>23){
uren=0;
lcd.clear();}
}
}

led=digitalRead(2);
if(led == HIGH)
{digitalWrite(3,HIGH);}
else{digitalWrite(3,LOW);}

if(sec>59){
sec=0;
minuten++;
lcd.clear();}


if(minuten>59){
minuten=0;
uren++;}

if(uren>23){
uren=0;}


lcd.setCursor(5,0);
lcd.print("TIME");
lcd.setCursor(5,2);
lcd.print(":");
lcd.print(sec);
lcd.setCursor(2,2);
lcd.print(":");
lcd.print(minuten);
lcd.setCursor(0,2);
lcd.print(uren);

laastestatus=knopstatus;
laastestat=knopstat;

}

Groet Henk.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: waarde optellen

Berichtdoor shooter » 29 Sep 2017, 17:15

er mag wat commentaar bij en zorg dat je duidelijk bent met laastestatus en laastestat knopstat etc, want ik weet het nu al niet meer.
maar je programma ziet er prima uit hoor.
paul deelen
shooter@home.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: erayevohukcc en 20 gasten