PWM signaal up en down gearing

Arduino specifieke Software
Berichten: 25
Geregistreerd: 27 Jan 2014, 18:35
Woonplaats: Noord Brabant

Re: PWM signaal up en down gearing

Berichtdoor bouwmeester » 28 Feb 2014, 21:11

pjh schreef:Ik heb al wat toegevoegd aan mijn bericht.
Wat je ook kunt doen is twee keer of drie keer klicken nemen. Dan heb je immers altijd een interval.
edit: slecht idee, is van regen in drup.

Ik zou voor de 300 ms gaan en aantal knopclicken dus niet <2000 maar > 300 ms beoordelen.

Wat krijg ik dan voor code?

Advertisement

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: PWM signaal up en down gearing

Berichtdoor pjh » 28 Feb 2014, 22:42

Eigenlijk moet je hele code om.
Ik wil er wel naar kijken.
Maar als iemand me wil inhalen: geen bezwaar... :)

Berichten: 25
Geregistreerd: 27 Jan 2014, 18:35
Woonplaats: Noord Brabant

Re: PWM signaal up en down gearing

Berichtdoor bouwmeester » 05 Mrt 2014, 09:13

pjh schreef:Eigenlijk moet je hele code om.
Ik wil er wel naar kijken.
Maar als iemand me wil inhalen: geen bezwaar... :)


Zou geweldig zijn. Ik hoop dat iemand mij verder kan helpen.

gr

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: PWM signaal up en down gearing

Berichtdoor pjh » 05 Mrt 2014, 12:16

druk je tussen 10 en 300 ms, gaat GEAR down, langer drukken is UP.
je kunt ook met interrupt werken.
Dat is nodig zodra je de Arduino naast dit programmaatje, allerhande andere dingen laat doen.
Nu is het een simpel loopje om gewoon iets te proberen.
Er zijn meer en betere wegen die naar Rome leiden... :D

Code: Alles selecteren
unsigned long oude_tijd;
unsigned long interval = 0;

int Gear=255;

void setup(){
  Serial.begin(9600);
  pinMode(2, INPUT);
}

void loop(){

  if(digitalRead(2) == LOW){
    oude_tijd = millis();
  }
  if(millis()-oude_tijd > 10){ //
    interval = millis()-oude_tijd;
  }
  else if (interval){
    if (interval < 300){
      Gear -=32;
      if (Gear < 0) Gear = 0;
      Serial.print("Gear = ");
      Serial.println(Gear);
    }
    else{
      Gear +=32;
      if (Gear > 255) Gear = 255;
      Serial.print("Gear = ");
      Serial.println(Gear);
    }
    interval=0;
  }
}



en hier met opmerkingen

Code: Alles selecteren
unsigned long oude_tijd;
unsigned long interval = 0;
// een unsigned long is een variabele die niet negatief kan worden en 4 bytes lang is
// een long is nodig omdat het aantal milliseconden snel een te groot wordt voor een normale INTeger
// een normale integer is 2 bytes, dus van -32768 TOT + 32768
// en 32768 milliseconden zijn nog geen 33 seconden, dus onvoldoende voor tijd.

int Gear=255;

void setup(){
  Serial.begin(9600);
  pinMode(2, INPUT);
}

void loop(){

  if(digitalRead(2) == LOW){
    oude_tijd = millis();
  } //
  // als de knop niet wordt ingedrukt, zijn oude_tijd
  // en de huidige tijd hetzelfde. Het interval tussen
  // die oude_tijd en de huidige tijd is dus NUL als er
  // NIET op het knopje wordt gedrukt.
  // Wat er EIGENLIJK staat is dat wanneer er wel op het
  // knopje wordt gedrukt, er WEL een verschil tussen de
  // variabele oude_tijd en de doorlopende millis() ontstaat.

  if(millis()-oude_tijd > 10){ //
    interval = millis()-oude_tijd;
  } //
  // Zodra de knop meer dan 10 milliseconden is ingedrukt
  // krijgt de variabele 'interval' pas de waarde van dat
  // verschil. Dit om het zogenaamde bouncing van de
  // contacten in de fysieke knop te negeren.

  else if (interval){
    // zodra er een interval beschikbaar is
    // en dat kan alleen als de knop net wordt los gelaten

    if (interval < 300){
      Gear -=32;
      if (Gear < 0) Gear = 0;
      Serial.print("Gear = ");
      Serial.println(Gear);
    } //
    // is het interval kleiner dan 300 ms, dan "korte druk"

    else{
      Gear +=32;
      if (Gear > 255) Gear = 255;
      Serial.print("Gear = ");
      Serial.println(Gear);
    } //
    // dus lange "korte druk"

    interval=0;
    // zodra en een interval was die NIET NUL was, betekend
    // dit dat de knop is losgelaten en dat de boel "al
    // verwerkt is. Interval dus meteen weer op nul zetten.
  }
}



Berichten: 25
Geregistreerd: 27 Jan 2014, 18:35
Woonplaats: Noord Brabant

Re: PWM signaal up en down gearing

Berichtdoor bouwmeester » 12 Mrt 2014, 14:11

Heb dit proberen toe te passen, werkt wel. Maar als ik de button los laat gaat het signaal niet naar 0V.
Het is voor een aandrijving van een motor: als de button ingedrukt wordt moet de motor gaan draaien en wanneer de button losgelaten word moet deze stoppen.
Als men binnen de "bepaalde tijden" een dubbelklik of enkelklik geeft moet de gearing veranderen.
Misschien een kleine aanpassing die ik niet kan vinden.
Alvast bedankt allemaal.

gr

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: PWM signaal up en down gearing

Berichtdoor pjh » 12 Mrt 2014, 14:42

Deze omissie is mij bekend en min of meer met opzet.
Ben namelijk benieuwd hoe je een knop ingedrukt houden en daarnaast op het knopje drukken verschillende functies denkt toe te kunnen kennen. Ik zie het gewoon niet voor me en kan het dan ook niet in het programma zetten.

Berichten: 25
Geregistreerd: 27 Jan 2014, 18:35
Woonplaats: Noord Brabant

Re: PWM signaal up en down gearing

Berichtdoor bouwmeester » 12 Mrt 2014, 21:29

Ok, misschien ben ik wat onduidelijk in mijn verwoording.
1. Het gaat om een motor van een fiets. Als ik de knop bedien gaat de fiets met een snelheid voorruit.
2. Als ik de knop loslaat stopt de fiets.
3. Als de knop binnen een tijd (zeg 1 sec) weer bediend wordt gaat de fiets weer voorruit maar dan een versnelling hoger
4. Als de knop binnen dezelfde tijd twee keer bediend wordt (aan uit aan) dan gaat de snelheid een versnelling lager.
5. Als de knop langer als 1 sec losgelaten wordt wordt de boel gereset en wanneer men weer de knop activeert dan gaat de fiets weer met de startsnelheid voorruit. (zie stap 1)

gr

Berichten: 25
Geregistreerd: 27 Jan 2014, 18:35
Woonplaats: Noord Brabant

Re: PWM signaal up en down gearing

Berichtdoor bouwmeester » 23 Mrt 2014, 15:19

Iemand nog een suggestie?

Gr

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: PWM signaal up en down gearing

Berichtdoor nicoverduin » 23 Mrt 2014, 19:23

er zit wat lastigs in je vraagstuk:
a) stel ik druk hem in..... Motor gaat lopen.... ik laat los.. motor stopt... ik druk gelijk weer in(binnen een seconde)... fiets gaat weer lopen (of loopt nog) en schakelt hoger...
Wordt volgens mij een haperend gebeuren.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: PWM signaal up en down gearing

Berichtdoor pjh » 23 Mrt 2014, 22:05

Ben eerlijk gezegd wel blij met Nico's toevoeging.
Hoopte al dat hij "het ook niet voor zich zag".
Want als hij het wel zou zien en ik niet, zou ik me schamen en met mijn kop in een kussen keihard: WAAROM HIJ WEL EN IK NIET! hebben gegild.

Nee hoor. Ik heb gewoon geen goed antwoord voor je. Deze impasse laat wel iets heel interessants zien denk ik: één van de belangrijkste aspecten van programmeren: wat je wil omzetten in wat kan.
Mijn advies: wat niet wil, kan vaak anders en wat niet kan wil wel eens op een andere manier wel gaan.
Ik bedoel: waarom houdt je vast aan je exotische knop-sequentie? Als wat jij wil niet kan, probeer eens iets anders te willen dat hetzelfde kan. :D Ofzo.... :shock:

VorigeVolgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: owalaiyiqiyeg en 6 gasten