Rekenen om te corrigeren

Software die niet past in bovenstaande onderwerpen
Berichten: 9
Geregistreerd: 27 Mrt 2014, 02:49

Re: Rekenen om te corrigeren

Berichtdoor LowD » 21 Mei 2014, 17:14

Ik gebruik overal INT voor

En dan klagen dat je geen decimalen kunt zien? :shock:
int Tandsteps = 0; // Aantal stappen per tand

Probeer eens, tegen je principes in : float Tandsteps = 0.0 ; ;)


Je zult de compiler duidelijk moeten maken dat je decimalen wenst.
Dat kan op een paar manieren, makkelijk en iets moeilijker.
Door te initialiseren met bijv. 0.0 ipv 0 begrijpt je Arduino beter welke kant je op wilt.

Ik zou kleinere stapjes nemen.
Niet bij de overbrenging, maar in het leerproces van de "Arduino-taal".

Advertisement

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: Rekenen om te corrigeren

Berichtdoor Redundant » 21 Mei 2014, 17:25

Hoi, het is geen principe maar niet beter weten, ik ben nog niet zo lang bezig.......
In ieder geval heb je mij weer een eind op weg geholpen, ik ga er mee aan de gang.
Gr., Martin

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

Re: Rekenen om te corrigeren

Berichtdoor shooter » 21 Mei 2014, 22:08

ik zit bij de vrouw dus geen arduino bij me:

int drukknop = 0;
int WW = 40; // Wormwielverhouding 1:40
int Msteps = 200; // Aantal stappen van de motor per omwenteling
int maxsteps;
int DWSW ; // Aantal te maken Tanden
int Tandsteps = 0; // Aantal stappen per tand
int Tanden; // Gemaakt aantal tanden
int TTsteps = 0; // Totaal aantal gemaakte stappen
int tand; // welke stappenteller voor tand


void setup() {
Serial.begin(9600);
maxsteps= Msteps* WW // 40*200 = 8.000
DWSW = 59;
Tandsteps = (maxsteps/DWSW); // delen gaat niet met int.
Tanden = 0;
Serial.println(" ");
}
void loop ()
{
while (tanden <= DWSW)
{zet een stap
pos=pos+1
tand=tand+DWSW
if (tand=> maxsteps) // je hebt je volgende tand bereikt:
{
tand = tand -maxsteps
// gosub frezen van tand
// laat frees teruglopen
tanden=tanden+1

Serial.print("maxsteps = ");
Serial.print(maxsteps);
Serial.print(" ");
Serial.print("DWSW = ");
Serial.print(DWSW);
Serial.print(" ");
Serial.print("Tandsteps =");
Serial.print(Tandsteps);
Serial.print(" ");
Serial.print("Tanden =");
Serial.print(Tanden);
Serial.print(" ");
Serial.print("TTsteps =");
Serial.println(8000/59.0,2);
Serial.print("TTsteps =");
Serial.println(maxsteps/DWSW.0,2);



}
}
}

kijk maar eens wat er gebeurt, het zal niet vlekkeloos zijn, maar ik mag zo laat niet meer spelen.
paul deelen
shooter@home.nl

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: Rekenen om te corrigeren

Berichtdoor Redundant » 22 Mei 2014, 13:54

Hallo, er waren wel enkele kleine dingetjes, maar die heb ik snel gecorrigeerd, gelukkig.
Maar alles werkt, ik heb getracht float toe te passen, helaas er staan wel 2 nullen achter maar niet de juiste waarde, die moet 135,59, zijn.

int drukknop = 0;
int WW = 40; // Wormwielverhouding 1:40
int Msteps = 200; // Aantal stappen van de motor per omwenteling
int maxsteps = 0;
int DWSW = 0 ; // Aantal te maken Tanden
float tandsteps = 0.0; // Aantal stappen per tand
int tanden = 0; // Gemaakt aantal tanden
float TTsteps = 0.0; // Totaal aantal gemaakte stappen
int tand = 0; // welke stappenteller voor tand
int pos = 0;

void setup() {
Serial.begin(9600);
maxsteps= Msteps * WW; // 200*40 = 8.000
DWSW = 59; // moet input Duimwielschakelaars worden

tandsteps =(maxsteps/DWSW); // delen gaat niet met int.
pos = 0;
}


void loop ()
{
while (pos <= DWSW) { //zet een stap

if (TTsteps = maxsteps) // je hebt je laatste tand bereikt:
{
// tand = tand -maxsteps;
// gosub frezen van tand
// laat frees teruglopen
// tanden=tanden+1;

Serial.print("maxsteps = "); Serial.print(maxsteps); Serial.print(" ");

Serial.print("DWSW = "); Serial.print(DWSW); Serial.print(" ");

Serial.print("tandsteps ="); Serial.print(tandsteps); Serial.print(" ");

Serial.print("tanden ="); Serial.print(pos); Serial.print(" ");

TTsteps = pos * tandsteps;

Serial.print("TTsteps ="); Serial.print(TTsteps); Serial.println(" ");

pos=pos+1;

}
}
}

Berichten: 9
Geregistreerd: 27 Mrt 2014, 02:49

Re: Rekenen om te corrigeren

Berichtdoor LowD » 22 Mei 2014, 15:35

Even weinig tijd aan deze kant, dus deze keer heel snel.
Probeer nog wat meer tijd te besteden aan de verschillen tussen float en int en hoe je er mee om gaat.
Ziet er goed uit!

Check eens of je de verschillen vindt:

Code: Alles selecteren
int drukknop = 0;
int WW = 40; // Wormwielverhouding 1:40
int Msteps = 200; // Aantal stappen van de motor per omwenteling
int maxsteps = 0;
int DWSW = 0 ; // Aantal te maken Tanden
float tandsteps = 0.0; // Aantal stappen per tand
int tanden = 0; // Gemaakt aantal tanden
float TTsteps = 0.0; // Totaal aantal gemaakte stappen
int tand = 0; // welke stappenteller voor tand
int pos = 0;

void setup() {
  Serial.begin(9600);
  maxsteps = Msteps * WW; // 200*40 = 8.000
  DWSW = 59; // moet input Duimwielschakelaars worden

//tandsteps = (maxsteps / DWSW);
  tandsteps = ((float)maxsteps / DWSW);
 
//  pos = 0;
}


void loop ()
{
  while (pos <= DWSW) { //zet een stap
 
// Tip1: gebruik <, >, of == in if-statement
// Tip2: let op bij mixen van int en float

// if (TTsteps = maxsteps) // je hebt je laatste tand bereikt:
//    {
      // tand = tand -maxsteps;
      // gosub frezen van tand
      // laat frees teruglopen
      // tanden=tanden+1;

      Serial.print("maxsteps = ");
      Serial.print(maxsteps);
      Serial.print(" ");

      Serial.print("DWSW = ");
      Serial.print(DWSW);
      Serial.print(" ");

      Serial.print("tandsteps =");
//    Serial.print(tandsteps);
      Serial.print(tandsteps, 3);
      Serial.print(" ");

      Serial.print("tanden =");
      Serial.print(pos);
      Serial.print(" ");

      TTsteps = pos * tandsteps;

      Serial.print("TTsteps =");
//    Serial.print(TTsteps);
      Serial.print(TTsteps,3);
      Serial.println(" ");

      pos = pos + 1;
//    }
  }
  return;
}

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: Rekenen om te corrigeren

Berichtdoor Redundant » 22 Mei 2014, 21:48

We hebben het voor elkaar zover. Dankjewel. :mrgreen:

Het totaal aantal stappen (TTsteps) is steeds 8.000 bij diverse verschillende aantal Tanden (bewerkingen)

Maar nu moet er per bewerking een afronding komen, die zorgt voor het nodige stepje extra als het getal TTsteps hoger is als getal + 0,5

int inputPindrukknop = A8;
int WW = 40; // Wormwielverhouding 1:40
int Motorsteps = 200; // Aantal stappen van de Stappenmotormotor per omwenteling
int Totaalsteps = 0;
int DWSW = 0 ; // Aantal te maken Tanden = (Duimwielschakelaars)
int pos = 0; // stappenteller voor tand


float tandsteps = 0.0; // Aantal stappen per tand
float TTsteps = 0.0; // Totaal aantal gemaakte stappen

void setup() {
Serial.println(" ");

Totaalsteps= Motorsteps * WW; // bijvoorbeeld 200*40 = 8.000
DWSW = 7; // moet input Duimwielschakelaars worden
tandsteps =((float)Totaalsteps/DWSW); // 2 getallen achter de komma

Serial.begin(9600);
}


void loop () {

while (pos <= DWSW) { // Doe een bewerking
{
Serial.print("Aantal tanden = ");
Serial.print(DWSW);
Serial.print(" ");

Serial.print("tandsteps = "); // aantal stappen per bewerking (Tand)
Serial.print(tandsteps,2);
Serial.print(" ");

Serial.print("Bewerkingen = ");
Serial.print(pos);
Serial.print(" ");

TTsteps = pos * tandsteps; //

Serial.print("TTsteps = ");
Serial.print(TTsteps);
Serial.println(" ");
}
pos = pos + 1; // aantal gemaakte bewerkingen verhogen
}
return;
}

Berichten: 9
Geregistreerd: 27 Mrt 2014, 02:49

Re: Rekenen om te corrigeren

Berichtdoor LowD » 23 Mei 2014, 02:19

Ik ben je even kwijt, maar dat kan door het late uur komen.

Ik mis de structuur, het wordt een beetje een plakaanelkaar tekst.
Maar zoals ik al zei, het wordt al laat.

Bedoel je iets als hier beneden?

Code: Alles selecteren
//int inputPindrukknop = A8;
int WW = 40; // Wormwielverhouding 1:40
int Motorsteps = 200; // Aantal stappen van de Stappenmotor per omwenteling
int Totaalsteps = 0 ;
int DWSW = 0 ; // Aantal te maken Tanden = (Duimwielschakelaars)
int pos = 0; // stappenteller voor tand
int TTstepsAfgerond =0;

float tandsteps = 0.0; // Aantal stappen per tand
float TTsteps = 0.0; // Totaal aantal gemaakte stappen

void setup() {
  Serial.println(" ");

  Totaalsteps = Motorsteps * WW; // bijvoorbeeld 200*40 = 8.000
  DWSW = 7; // moet input Duimwielschakelaars worden
  tandsteps = ((float)Totaalsteps / DWSW); // 2 getallen achter de komma

  Serial.begin(9600);
}


void loop () {

  while (pos <= DWSW) { // Doe een bewerking
    {
//    Serial.print("Aantal tanden = ");
      Serial.print("tanden = ");
      Serial.print(DWSW);
      Serial.print(" ");

      Serial.print("tandsteps = "); // aantal stappen per bewerking (Tand)
      Serial.print(tandsteps, 2);
      Serial.print(" ");

      Serial.print("Bewerkingen = ");
      Serial.print(pos);
      Serial.print(" ");

      TTsteps = pos * tandsteps; //

      Serial.print("TTsteps = ");
      Serial.print(TTsteps);
      Serial.print(" (");
      TTstepsAfgerond= floor(TTsteps+0.5);
      Serial.print(TTstepsAfgerond);
      Serial.println(")");
    }
    pos = pos + 1; // aantal gemaakte bewerkingen verhogen
  }
  return;
}

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

Re: Rekenen om te corrigeren

Berichtdoor shooter » 23 Mei 2014, 11:00

Zo ik heb even een mega gepakt en onderstaand programma werkend gemaakt.
je kunt er nog wel een paar regels uithalen, maar dat mag je lekker zelf doen.

groetjes van shooter@home.nl

Code: Alles selecteren
int drukknop = 0;
int WW = 40; // Wormwielverhouding 1:40
int Msteps = 200; // Aantal stappen van de motor per omwenteling
int maxsteps;
int DWSW ; // Aantal te maken Tanden
int Tandsteps = 0; // Aantal stappen per tand
int Tanden; // Gemaakt aantal tanden
int TTsteps = 0; // Totaal aantal gemaakte stappen
int tand; // welke stappenteller voor tand
int tanden;
int pos;
float dif;

void setup() {
  Serial.begin(9600);
  maxsteps= Msteps* WW; // 40*200 = 8.000
  DWSW = 59;
  // Tandsteps = (maxsteps/DWSW); // delen gaat niet met int.
  Serial.println("starten");
  show();
}
void loop ()
{
  tanden=1; //we beginnen opnieuw

  do
  {
    delay (10); //zet een stap
    pos=pos+1;
    tand=tand+DWSW;
    show();
    if (tand > maxsteps) // je hebt je volgende tand bereikt:
    {
      tand = tand - maxsteps;
      delay(5000);
      // gosub frezen van tand
      // laat frees teruglopen
      show ();
      tanden=tanden+1;
     
    }
  }
   while (tanden <= DWSW);
}



void show()
{
  dif = (((float(tanden)/float(DWSW)) - float(pos)/float(maxsteps))*float(360.0));
  Serial.print("maxsteps = ");
      Serial.print(maxsteps);
      Serial.print(" ");
      Serial.print("DWSW = ");
      Serial.print(DWSW);
      Serial.print(" ");
      Serial.print("pos = ");
      Serial.print(pos);
      Serial.print(" ");
      Serial.print("tand = ");
      Serial.print(tand);
      Serial.print(" ");
      Serial.print("Tanden = ");
      Serial.print(tanden);
      Serial.print(" ");
      Serial.print("dif = ");
      Serial.print((dif),4);
      Serial.println(" graden");
}
paul deelen
shooter@home.nl

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: Rekenen om te corrigeren

Berichtdoor Redundant » 23 Mei 2014, 14:35

Hallo LowD en shooter etc, een beetje veel allemaal, maar wel geweldig om alle mogelijkheden te zien.
shooter, de (float dif) voor de graden kan ik mooi gebruiken voor de menukeuze 1 Graden ingeven etc.
de show() is ook mooi en duidelijk.
tand=tand+DWSW; moet volgens mi tand=tand+1 zijn aangezien DWSW het aantal opgegeven te maken tanden is.

Ben nu zover dat er gebeurt wat ik denk nodig te hebben voor de Verdeeltafel.
Het opgeven tandwiel etc. komt uiteindelijk precies uit op 8.000 steps.
Na het uitvogelen heb ik hier de verkorte vorm nu weergegeven, ik heb ook de oude uiteraard nog.
Alle prints mogen er straks ook uit.

//int inputPindrukknop = A8;
int WW = 40; // Wormwielverhouding 1:40
int Motorsteps = 200; // Aantal stappen van de Stappenmotor per omwenteling
int Totaalsteps = 0 ;
int DWSW = 0 ; // Aantal te maken Tanden = (Duimwielschakelaars)
int pos = 0; // stappenteller voor tand
int TTstepsAfgerond =0;

float tandsteps = 0.0; // Aantal stappen per tand
float TTsteps = 0.0; // Totaal aantal gemaakte stappen

void setup() {
Serial.println(" ");

Totaalsteps = Motorsteps * WW; // bijvoorbeeld 200*40 = 8.000
DWSW = 13; // moet input Duimwielschakelaars worden
tandsteps = ((float)Totaalsteps / DWSW); // 2 getallen achter de komma

Serial.begin(9600);
}


void loop () {

while (pos <= DWSW) { // Doe een bewerking
{
Serial.print("Tandwiel = ");
Serial.print(DWSW);
Serial.print(" tanden ");

Serial.print("Bewerking = ");
Serial.print(pos);
Serial.print(" ");

TTsteps = pos * tandsteps; //

TTstepsAfgerond= floor(TTsteps+0.5);
}

if (TTstepsAfgerond > TTsteps) (tandsteps = floor(tandsteps+0.5)+1);
{
Serial.print("tandsteps = "); // aantal uit te voeren stappen per bewerking (Tand)
Serial.println(tandsteps, 2);
Serial.println(" ");
}
// Freesbewerking uitvoeren, als die klaar is op de Drukknop toetsen voor de volgende bewerking

delay(150); // tijdens testen, kan dus vervallen
{
tandsteps = ((float)Totaalsteps / DWSW); // terug naar de oorspronkelijke deling

pos = pos + 1; // aantal gemaakte bewerkingen verhogen
}
}
return;
}

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

Re: Rekenen om te corrigeren

Berichtdoor shooter » 23 Mei 2014, 19:39

je moet zoveel mogelijk in INT laten staan zoals ik doe de float gebruik ik alleen maar voor het tonen van resultaat.
gewoon in je arduino inladen en kijken wat er gebeurt, heb het expres als code neergezet dan hoef je alleen maar te kopieren.

tand = tand+dwsw is beter want nu wordt er telkens bijv 59 opgeteld, tot bijv 8000 dat gaat 135 keer. dus de motor zet 135 stappen, er blijft een rest over, die meegenomen word naar de volgende tand, daar blijkt het bijv 136 stappen te zijn om over de 8000 te komen.

show is een subroutine om het programma wat beter te lezen, dat kun je dus ook doen voor de berekening (expres niet gedaan want dan moet je telkens heen en weer),
verder klopt jouw routine niet voor positie en dergelijke.
paul deelen
shooter@home.nl

Vorige

Terug naar Overige Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 10 gasten