Arduino expert gezocht

Projecten die niet passen in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Arduino expert gezocht

Berichtdoor Koepel » 09 Nov 2018, 17:55

Natuurlijk, dat kan. Dat lijkt me een goede oplossing.

Eerst : int seconden = map( sensorValue, 0, 1013, 0, 60) ; // 0 tot 60
Daarna : int honderdsten_van_seconden = seconden * 100 ;
Of : unsigned long milliseconden = seconden * 1000 ; // dit kan ook

Kun je dit alvast doorlezen : https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay.
Als je het niet begrijpt, dan is vijf keer doorlezen ook goed ;)

Jouw display gebruikt de I2C bus, dat is niet zo snel.
Stel dat je de tijd op het display zet en dan 10 ms wacht. Als de tijd op het display zetten al een milliseconde duurt, dan gaat het scheef lopen.

In de Arduino draait een hardware timer. De timer vraag je op met millis(). Die tijd loopt goed, dus als je die tijd kunt gebruiken om op het display te zetten, dan klopt de tijd.

Advertisement

Berichten: 18
Geregistreerd: 02 Nov 2018, 23:05

Re: Arduino expert gezocht

Berichtdoor Sander8511 » 09 Nov 2018, 21:35

Thnx, ga ik even mee bezig.

Ik denk dat ik begrijp wat de milis functie inhoudt. Maar ik mis even de toepassing naar mijn project. Naar mijn idee heb ik pas iets met tijd te maken zodra de knop, na de safetyswitch, is ingedrukt(op het allerlaatst),namelijk aftellen van de daarvoor met potmeter ingestelde waarde. Of zie ik dit verkeerd??

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Arduino expert gezocht

Berichtdoor Koepel » 09 Nov 2018, 22:44

Dat zie je goed 8-)

De link die je gaf (https://arduining.com/2012/03/01/rocket-launch-controller-simulated/) gebruikt millis() om te synchroniseren op 100 ms. Dat vind ik maar een beetje zo-zo. Ik zou liever millis() gebruiken om het te berekenen.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Arduino expert gezocht

Berichtdoor Koepel » 10 Nov 2018, 00:11

Een klein testje met millis() en een berekening: https://gist.github.com/Koepel/cae1f3d0f01e1b6285a4ac3c3548e2d2.
De constructie met millis() voor de count-down-tijd is onafhankelijk van de tweede constructie met millis() die het display of de seriële monitor ververst.

Misschien is het mogelijk om jouw display op volle snelheid te updaten. Dan wordt de code kleiner.

Berichten: 18
Geregistreerd: 02 Nov 2018, 23:05

Re: Arduino expert gezocht

Berichtdoor Sander8511 » 10 Nov 2018, 00:56

Ik heb het testje uitgevoerd en het werkt met deze code:
Code: Alles selecteren
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_LEDBackpack.h>


Adafruit_7segment matrix = Adafruit_7segment();

const int buttonPin = 2;

const long startCount = 5000; // start countdown with 5 seconds
unsigned long previousMillisCounter;
bool counting = false;

// An extra timer with millis to update a display.
// For a LCD display, the interval can be 200 ms.
// For the serial monitor, the interval can also be 200 ms.
// For a 7-segment display, the update can be done
// at full speed without the use of millis().
unsigned long previousMillisUpdate;
const unsigned long intervalUpdate = 200;

void setup()
{
  #ifndef __AVR_ATtiny85__
  Serial.begin(9600);
  Serial.println("7 Segment Backpack Test");
#endif
  matrix.begin(0x70);
  //Serial.begin( 9600);
 // Serial.println( "Press the button");

  pinMode( buttonPin, INPUT_PULLUP);
}

void loop()
{
  unsigned long currentMillis = millis();
 
  if( !counting)
  {
    // As soon as the button is pressed, the counter is
    // made active and the value of millis() is remembered.
   
    if( digitalRead( buttonPin) == LOW)
    {
      previousMillisCounter = currentMillis;
      counting = true;
    }
  }
  else
  {
    // To prevent a rollover problem, the time that has passed
    // since the start is calculated with unsigned long.
    // After that the down-counter value is calculated with long,
    // because it might have passed the end time and became negative.
   
    unsigned long countUpValue = currentMillis - previousMillisCounter;
    long countDownValue = startCount - long( countUpValue);
   
    if( countDownValue <= 0)
    {
      countDownValue = 0;
      counting = false;
    }
   
    // Update the output.
    // When the counting down has finished, the value
    // of zero is also printed.

    if( currentMillis - previousMillisUpdate >= intervalUpdate || countDownValue == 0)
    {
      previousMillisUpdate = currentMillis;
     
      //Serial.println( countDownValue);
      matrix.print(countDownValue);
      matrix.writeDisplay();
     
      if( countDownValue == 0)
      {
        Serial.println( "Press the button");
      }
    }
  }
}


Misschien een gekke vraag, maar wat zegt het dan nu? :roll:

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Arduino expert gezocht

Berichtdoor Koepel » 10 Nov 2018, 09:10

Dat zegt dat jij snel reageert en dat ik regelmatig wijzigingen aanbreng. Op dit forum kijk ik nog eens een keer naar het bericht dat ik schreef en wijzig het soms. Ook mijn Gist heb ik mooier gemaakt. Jij reageert zo snel, dat je soms met de eerste versie aan de slag gaat :lol:

De eerste versie werkte goed, maar het is nu nog net ietsje mooier: https://gist.github.com/Koepel/cae1f3d0f01e1b6285a4ac3c3548e2d2.

Probeer de "const unsigned long intervalUpdate = 200 ;" eens op 10 te zetten en kijk of het in de soep loopt. Een redelijke waarde voor de update van het display zou tussen de 20 ms en de 200 ms kunnen zitten.

Zie je die 5 seconden met "const long startCount = 5000 ;". Dat is een constant getal met het 'const' keyword. Dat 'const' kun je weghalen en proberen in te vullen met de potentiometer.

Daarna nog de arm en trigger.
Het is voor mij nog niet helemaal duidelijk hoeveel knoppen je hebt. Een knop om de waarde van de potentiometer vast te zetten, een arm en een trigger. Zijn dat drie knoppen ?

Over millis():
De functie millis() geeft een "unsigned long" terug met het aantal milliseconden. Na 50 dagen springt die waarde van 0xFFFFFFFF naar 0x00000000. Dat is de "rollover". Dat hoeft geen probleem te zijn met de volgende regels:
Doe wel: Als je iets wilt doen met millis(), onthoud dan de huidige waarde (bijvoorbeeld in "previousMillis"). Ik noem dat soms een "timestamp". Later kun je met "unsigned long" variabelen deze berekening doen: millis() - previousMillis.
Doe niet: Tel er nooit een getal bij op. Bereken nooit een waarde in de toekomst. Doe de berekening niet met "long".

Met millis() bereken je dus altijd hoeveel tijd er is verstreken sinds de "timestamp". Dat is voldoende om er van alles mee te doen.

Berichten: 18
Geregistreerd: 02 Nov 2018, 23:05

Re: Arduino expert gezocht

Berichtdoor Sander8511 » 10 Nov 2018, 17:58

Deze werkt ook, nadat ik de serial print even aanpas.
Als ik de
const unsigned long intervalUpdate = 200;"
aanpas naar 10 dan loopt hij in principe netjes terug. De 5000 zijn dan 5 seconden. De overige 3 digits zijn tienden, hondersten en duizendsten. Deze staan niet in volgorde. Hondersten staan op 2, duizendsten op 3 en tienden op 4. En in principe is voor mij alleen de tienden ook al voldoende.

Ja inderdad; één knop om de timer vast te zetten. De safetyswitch om voeding op de launchknop te zetten en de launchknop zelf.

Kan je een knop gebruiken om een andere knop high of low te maken? Of is dat niet de beste manier voor de laatste 2 knoppen?

Hier ga ik even mee bezig:
Zie je die 5 seconden met "const long startCount = 5000 ;". Dat is een constant getal met het 'const' keyword. Dat 'const' kun je weghalen en proberen in te vullen met de potentiometer.
:mrgreen:

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Arduino expert gezocht

Berichtdoor Koepel » 10 Nov 2018, 18:28

Omdat millis() in milliseconden werkt, is het voor de sketch eenvoudiger om in milliseconden te rekenen.
Hoe de uitvoer er uit ziet, dat staat daar los van. Je wilt waarschijnlijk honderdsten van seconden laten zien. Daar zou je een functie voor kunnen maken. Als je milliseconden door 10 deelt, dan heb je honderdsten van seconden.

Ik probeer de safetyswitch en lauchknop naar Arduino om te zetten. Uiteindelijk is het je sketch die een relais om zet.
En dat wil je misschien ook nog af kunnen breken.
Schakelaars denderen, misschien is er ook nog een "debounce" nodig in de sketch.

Het volgende heb ik zomaar verzonnen, ik weet niet of het ergens op slaat.

Timer-vast-zet-knop: Dat kan een drukknop of schakelaar zijn verbonden met de digitale ingang. En bijvoorbeeld met een pullup weerstand van 4k7.

Safety-switch: Die zou de 5V alvast op een 5V relais kunnen zetten en ook naar een digitale pin. Het relais is niet aan, maar heeft dan alvast 5V.

Launch-knop: Dat lijkt me een drukknop die verbonden is met een digitale ingang. En ook weer met pullup weerstand.

De aansturing van het relais gebeurt dan vanuit de sketch, die het relais aanstuurt (dat alleen werkt als het relais ook 5V heeft).

Kun je daar voorbeelden van vinden ? Het is niet voor niets dat @nicoverduin het vaag vond en dat @shooter om een schema vroeg.

Berichten: 18
Geregistreerd: 02 Nov 2018, 23:05

Re: Arduino expert gezocht

Berichtdoor Sander8511 » 10 Nov 2018, 20:25

Ok, ik ga even worstelen met dat millis en de combinatie van potentiometer en timer-vast-zet-knop. Dat is het lastigste gedeelte vind ik (of het is mijn ontwetendheid ;-) ).

De safetyswitch kan toch in een soort van serieschakeling staan met de launchknop? Zodra de safetyswitch on is, heeft de drukknop( Dat is zon grote arcadeknop die licht geeft in mijn geval :mrgreen: ) voeding en hoeft dan alleen nog maar ingedrukt te worden om contact te maken om de timer te laten lopen. Of denk ik nu véél te simpel? Als de timer op "0" staat moet de relayPin HIGH worden.

Het is niet voor niets dat @nicoverduin het vaag vond en dat @shooter om een schema vroeg.

Ja kan iemand mij dat uitleggen? Nico vond het wel vaag, maar hij legt me niet uit waarom? Ik begrijp het niet zo goed. :roll: :roll:

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

Re: Arduino expert gezocht

Berichtdoor nicoverduin » 10 Nov 2018, 21:51

Dat wil ik we uitleggen. Een paar jaar geleden werd ik benaderd via linked in waarin imand mij iets wilde laten bouwen wat een aantal io poorten kon omgooien vie bluetooth, wifo of andere op afstand bedienbare manieren. De foto was een willekeurige foto van het internet. Toen ik begon door te vragen werd het profiel verwijderd. Anders had ik de vraag doorgestuurd naar de politie.
Jij begon met “om een lamp of relais aan te schakelen” later een “lanceer installatie”. Dan gaan bij de alarmbellen rinkelen en haak ik af. Daar mag je uiteraard alles van vinden. Maar zo denk ik daarover.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

VorigeVolgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 15 gasten