Snelheid printen op seriële monitor

Arduino specifieke Software
Berichten: 2
Geregistreerd: 07 Okt 2020, 23:41

Snelheid printen op seriële monitor

Berichtdoor Gradje » 08 Okt 2020, 00:11

Hallo,

Heeft iemand enig idee waarom mijn snelheid wel bij pos = 0 wordt geprint, maar niet bij pos = 180?

Hier mijn code:

Code: Alles selecteren
#include <Servo.h>

Servo myservo;

int pos = 0;
unsigned long currentMillis = 0;
unsigned long previousMillis = 0;
unsigned long totalMillis = 0;

void setup() {
  Serial.begin(9600);                         // Seriële poort
  myservo.attach(3);                          // Pin servomotor
  myservo.writeMicroseconds(1000);            // Startpositie
}

void loop() {

  for (pos = 0; pos <= 180; pos += 7.2) {     // Draai van 0 to 180 graden in stappen van 7,2 graden
    myservo.writeMicroseconds(pos);           // Draai naar positie
    delay(250);                               // Tussenstappen van 250 ms
    previousMillis = millis();
    Serial.print("Hoek = ");                  // Print "Hoek =" in seriële monitor
    Serial.print(pos);                        // Print positie in seriële monitor
    Serial.println("º");                      // Print graden teken in seriële monitor
    Serial.print("Hoek in radialen = ");      // Print "Hoek in radialen =" in seriële monitor
    Serial.println(pos / 180.0 * PI);         // Print positie in radialen in seriële monitor
  }

  for (pos = 180; pos >= 0; pos -= 7.2) {     // Draai van 180 tot 0 graden in stappen van 7,2 graden
    myservo.writeMicroseconds(pos);           // Draai naar positie
    delay(250);                               // Tussenstappen van 250 ms
    currentMillis = millis();
    Serial.print("Hoek = ");                  // Print "Hoek =" in seriële monitor
    Serial.print(pos);                        // Print positie in seriële monitor
    Serial.println("º");                      // Print graden teken in seriële monitor
    Serial.print("Hoek in radialen = ");      // Print "Hoek in radialen =" in seriële monitor
    Serial.println(pos / 180.0 * PI);         // Print positie in radialen in seriële monitor
  }

  if (pos = 0) {
    currentMillis = millis();
    Serial.print("Tijd = ");
    Serial.print(currentMillis);
    Serial.println(" rad/s");
  }

  if (pos = 180) {
    previousMillis = millis();
    Serial.print("Tijd = ");
    Serial.print(previousMillis);
    Serial.println(" rad/s");
  }
}

Advertisement

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

Re: Snelheid printen op seriële monitor

Berichtdoor Gij Kieken » 08 Okt 2020, 09:31

Hallo ,
Een snelle blik op jouw sketch,
Je kiest voor de voor int-type (gehele getallen) bij de declaratie pos,in je for-loops wil je er float van maken (+=7.2).
Er is een duidelijk verschil tussen = (assignment operator) en == (equal to) Comparison operators .
Dus in je laatste twee if -constructies loopt het mis.

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

Re: Snelheid printen op seriële monitor

Berichtdoor Koepel » 08 Okt 2020, 12:23

Kun je vertellen wat het doel is ?
Wat moeten de servo's gaan doen en wat wil je op de seriële monitor laten zien ?

Lees ook dit eens door: https://www.arduino.cc/reference/en/language/structure/control-structure/if/.
en dan vooral voor de conditie "equal".

Om iets met millis() te gaan doen, kun je eerst dit eens doorlezen: https://www.arduino.cc/en/Tutorial/BuiltInExamples/BlinkWithoutDelay.

Berichten: 2
Geregistreerd: 07 Okt 2020, 23:41

Re: Snelheid printen op seriële monitor

Berichtdoor Gradje » 08 Okt 2020, 12:41

Koepel schreef:Kun je vertellen wat het doel is ?
Wat moeten de servo's gaan doen en wat wil je op de seriële monitor laten zien ?

Lees ook dit eens door: https://www.arduino.cc/reference/en/language/structure/control-structure/if/.
en dan vooral voor de conditie "equal".

Om iets met millis() te gaan doen, kun je eerst dit eens doorlezen: https://www.arduino.cc/en/Tutorial/BuiltInExamples/BlinkWithoutDelay.


Het doel is om de servo in stappen van 7,2 graden van 0- tot 180 graden te laten draaien, en terug.
Op de seriële monitor moet de snelheid van de draaiing op 0- en 180 graden komen te staan met de functie millis().

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

Re: Snelheid printen op seriële monitor

Berichtdoor Koepel » 08 Okt 2020, 17:56

De tijd meten gaat op deze manier:
Code: Alles selecteren
unsigned long t1 = millis();

... code die een tijdje duurt ...

unsigned long t2 = millis();

unsigned long result = t2 - t1;

Serial.print( "Het duurde ");
Serial.print( result);
Serial.println( " ms");


Het gaat om de millis() waarde als je begint te meten (t1) en de millis() waarde als je stopt met meten (t2). Het verschil is hoe lang het duurde in milliseconden.

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: ewoyakir, ibhuxumerekic en 14 gasten