Sari la conținut
ELFORUM - Forumul electronistilor

Problema bucla for Arduino


Vlad Mihai

Postări Recomandate

Salut, lucrez  la un proiect ce consta in controlul unui motor pas cu pas unipolar folosind LabVIEW. Problema e ca  atunci cand ii dau comanda sa faca un anumit numar de pasi si dupa sa se opreasca  nu vrea sa faca asta.... in rest  celelalte functii merg. Atasez  codul,  poate cineva imi explica unde e buba:

int motorPin1 = 5;int motorPin2 = 6;int motorPin3 = 8;int motorPin4 = 7;int delayTime=5;int Rx = 0;void setup() {  pinMode(motorPin1, OUTPUT);  pinMode(motorPin2, OUTPUT);  pinMode(motorPin3, OUTPUT);  pinMode(motorPin4, OUTPUT);  Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps}void loop() {     Rx = Serial.read();     if(Rx=='W'){  forward();  }    if(Rx=='A'){  backward();  }   if(Rx=='D'){        ///aici nu vrea sa mearga cum vreau eu, in sensul ca atunci cand primeste D pe serial                          sa  execute de 8 ori functia forward si dupa sa se opreasca for(i=0;i<8;i++){        forward(); }   }    }void  forward(){  digitalWrite(motorPin1, HIGH);  digitalWrite(motorPin2, LOW);  digitalWrite(motorPin3, LOW);  digitalWrite(motorPin4, LOW);  delay(delayTime);  digitalWrite(motorPin1, LOW);  digitalWrite(motorPin2, HIGH);  digitalWrite(motorPin3, LOW);  digitalWrite(motorPin4, LOW);  delay(delayTime);  digitalWrite(motorPin1, LOW);  digitalWrite(motorPin2, LOW);  digitalWrite(motorPin3, HIGH);  digitalWrite(motorPin4, LOW);  delay(delayTime);  digitalWrite(motorPin1, LOW);  digitalWrite(motorPin2, LOW);  digitalWrite(motorPin3, LOW);  digitalWrite(motorPin4, HIGH);  delay(delayTime);}void backward(){ digitalWrite(motorPin1, LOW);  digitalWrite(motorPin2, LOW);  digitalWrite(motorPin3, LOW);  digitalWrite(motorPin4, HIGH);  delay(delayTime);  digitalWrite(motorPin1, LOW);  digitalWrite(motorPin2, LOW);  digitalWrite(motorPin3, HIGH);  digitalWrite(motorPin4, LOW);  delay(delayTime);  digitalWrite(motorPin1, LOW);  digitalWrite(motorPin2, HIGH);  digitalWrite(motorPin3, LOW);  digitalWrite(motorPin4, LOW);  delay(delayTime);  digitalWrite(motorPin1, HIGH);  digitalWrite(motorPin2, LOW);  digitalWrite(motorPin3, LOW);  digitalWrite(motorPin4, LOW);  delay(delayTime);}void stop_motor(){  digitalWrite(motorPin1, LOW);  digitalWrite(motorPin2, LOW);  digitalWrite(motorPin3, LOW);  digitalWrite(motorPin4, LOW);}
Link spre comentariu
  • Răspunsuri 6
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Vlad Mihai

    3

  • Liviu M

    2

  • radu_bc

    2

Zile populare

Top autori în acest subiect

cand compilezi sketch-ul in arduino IDE iti da eroare? la mine spune ca variabila i nu e declarata.

dupa " void loop() {", pune int i=0;

sau 

for (int i=0;i<8;i++);

Editat de radu_bc
Link spre comentariu

da  era int i=0; am sters eu  probabil............... deci cu tot cu int i=0 nu imi da eroare la upload, dar   nu functioneaza cum trebuie.

Link spre comentariu

Dupa ce l-am declarat pe i, am definit portul 10 ca iesire, am conectat un led la el si am modificat if(Rx=='D') ca sa aprind led-ul cand merge motorul si sa-l sting cand nu merge.

Led-ul se stinge asa cum era de asteptat. Cum comunici cu arduino, LabView sau cu terminalul din ide-ul arduino? Esti sigur ca nu trimiti mai multi de D?

 

Codul modificat:

int motorPin1 = 5;int motorPin2 = 6;int motorPin3 = 8;int motorPin4 = 7;int ledPin = 10;int delayTime=5;int Rx = 0;int i = 0;void setup() {  pinMode(motorPin1, OUTPUT);  pinMode(motorPin2, OUTPUT);  pinMode(motorPin3, OUTPUT);  pinMode(motorPin4, OUTPUT);  pinMode(ledPin, OUTPUT);  Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps}void loop() {   Rx = Serial.read();      if(Rx=='W'){      forward();   }      if(Rx=='A'){      backward();  }   if(Rx=='D'){             for(i=0;i<8;i++){             forward();        digitalWrite(ledPin, HIGH); //aprind un led     }  } else {     digitalWrite(ledPin, LOW); //sting ledul  }}void  forward(){...}void backward(){...}void stop_motor(){...}
Editat de Liviu M
Link spre comentariu

Am adaugat un "ecou" al datelor receptionate pe seriala, ca sa verifici ca nu e de acolo.

void loop() {   Rx = Serial.read();      if((Rx >= '0') && (Rx <= 'z')){       Serial.write(Rx);   }...
LE Testeaza si fara motor (cu niste LED-uri, ceva), sa nu ai probleme cu "zgomotul". Editat de Liviu M
Link spre comentariu

Salut, cred ca din LabVIEW problema, trimitea  vreo 5 de D, comunic direct  pe serial cu atmega din  LabView, arduino al meu e de fapt  o placuta cu un atmega smd si  cu  pinii de iesire. testez noul cod dupa ce rezolv aplicatia  problema cu aplicatia. multumesc.  testez indata si revin.

LE:Am testat acum merge, era din LabVIEW, trimitea  date incontinuu. si de asta    executa incontinuu . Multumesc din nou Liviu! si Radu! O seara placuta!

Editat de Vlad Mihai
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări