Vlad Mihai Postat Iulie 31, 2014 Partajează Postat Iulie 31, 2014 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
radu_bc Postat Iulie 31, 2014 Partajează Postat Iulie 31, 2014 (editat) 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 Iulie 31, 2014 de radu_bc Link spre comentariu
Vlad Mihai Postat Iulie 31, 2014 Autor Partajează Postat Iulie 31, 2014 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
Liviu M Postat Iulie 31, 2014 Partajează Postat Iulie 31, 2014 (editat) 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 Iulie 31, 2014 de Liviu M Link spre comentariu
radu_bc Postat Iulie 31, 2014 Partajează Postat Iulie 31, 2014 Am incercat eu acum cu 4 LED-uri si pare ok. Face tot ce trebuie sa faca...doar ca eu am schimbat porturile...am folosit 2,3,4,5... Link spre comentariu
Liviu M Postat Iulie 31, 2014 Partajează Postat Iulie 31, 2014 (editat) 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 Iulie 31, 2014 de Liviu M Link spre comentariu
Vlad Mihai Postat Iulie 31, 2014 Autor Partajează Postat Iulie 31, 2014 (editat) 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 Iulie 31, 2014 de Vlad Mihai Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum