INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Serial2 Befehle kommen verpätet an
17.07.2015, 12:09
Beitrag #1
Serial2 Befehle kommen verpätet an
Hallo

nach dem ich endlich durch die Hürden der Verbindung zw. Arduino und Raspberry pi mich durchgewühlt habe kommt ein neues Problem das ich ohne Hilfe nicht bewältigen kann.
Da sich meine Programmierkenntnisse auf die rudimentären Funktion beschränken hoffe ich sehr Ihr könnt mir sicherlich weiterhelfen.
Mein Problem zeichnet sich wie folgt :
Es sind mehr oder weniger 2 Programme zus geführt worden der eine steuert über die Serial2 mein Fahrzeug der andere soll die Servos drehen.
getrennt funktionieren beide Programme sehr gut nur zusammen. kommen die Befehle sehr spät an die Verzögerung kann von 2 sek bis zu 6 -7 sek dauern.
eine Steuerung des Roboters ist so nicht möglich.
hier mein Code :
Code:
/*
  Front Motor (Steering) => Channel A
Back Motor => Channel B

Since the motor shield hijacks 6 pins for the motors'
control, they are declared in the MotorShieldR3 library.
*/
#include <MotorShieldR3.h>
#include <VarSpeedServo.h>
MotorShieldR3 yellowCar;
#define pinfrontLights    7    //Pin that activates the Front lights.
#define pinbackLights     4    //Pin that activates the Back lights.  
char command = 'x';
int velocity = 0;  

VarSpeedServo schwenk;
VarSpeedServo kipp;

int t;
int u;
char pos1 ='0';
char pos2 ='0';
char comm[2];

void setup()
{      
  Serial.begin(9600);
  Serial2.begin(9600);  //Set the baud rate to that of your Bluetooth module.
  //pinMode(pinfrontLights , OUTPUT);
  
schwenk.attach(40);
kipp.attach(41);


}

void loop(){
  while(Serial2.available() > 0){
    command = Serial2.read();
    //Change pin mode only if new command is different from previous.  
  
    //Serial.println(command);
    switch(command){
    case 'w':  
      yellowCar.Forward_2W(velocity = 255, velocity = 255);
      break;
    case 's':  
      yellowCar.Back_2W(velocity = 254, velocity = 254);
      break;
    case 'a':  
      yellowCar.RotateLeft_2W(velocity = 240, velocity = 240 );
      break;
    case 'd':
      yellowCar.RotateRight_2W(velocity = 240, velocity = 240);  
      break;
    case 'x':  
      yellowCar.Stopped_2W();
      break;
    case 'b':  //Everything OFF
      digitalWrite(pinfrontLights, LOW);
      digitalWrite(pinbackLights, LOW);
      yellowCar.Stopped_2W();
      break;        

        }
  }
      while (Serial2.available()) {
   Serial2.readBytes(comm, 2);
pos1 = comm[0];
Serial2.println(pos1);
pos2 = comm[1];
Serial2.println(pos2);
  
t = pos1-'0';
t=t*20;
u= pos2 -'0';
u = u*20;

if (t != 9*20)
{ schwenk.slowmove(t,90);
delay(100); }

if (u != 9*20)
{ kipp.slowmove(u,90);
delay(100); }
      }  
    
}
Die delay's habe ich schon raus gehabt ohne Erfolg
Ich tippe es liegt an der doppelten Aufruf des readbytes aber wie kann ich das umgehen?
Der eine teil des Prg. wartet auf Zeicheneingabe der andere geht über die Zahlenwerte von 1 bis 8 usw..

Bin für jede Hilfe dankbar

Gruß

Chris
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.07.2015, 10:57
Beitrag #2
RE: Serial2 Befehle kommen verpätet an
Hallo Chris, wenn ich mich nicht täusche hast du doch dieses Beispiel genommen, oder?: https://sites.google.com/site/bluetoothr...rduinoCode
Hast du da auch den Hinweis unten beachtet:
Zitat: Remember that these programs only works for an RC car with two DC motors. In case your car uses a servo, you need to make modifications to it or use the joystick application..
Da du die VarSpeedServo Library einbindest gehe ich mal davon aus, dass du Servos benutzt. Dann solltest du auch den genannten Hinweis beachten.
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.07.2015, 12:18
Beitrag #3
RE: Serial2 Befehle kommen verpätet an
Hi Ricardo

ja das habe ich auch gelesen dazu benutze ich aber noch die VarSpeedServo.h sollte also so weit ok sein.
Wie schon tafkaZ investigativ festgestellt hat habe ich dem Beitrag auch in einen anderen Forum Speziell ArduionCC Forum dort wurde mir ein Code vom agmue reingestellt LINK
Der code läuft doch die Servos bewegen sich undefiniert sobald ich die Werte eingebe.

Sorry für die doppelten Beiträge aber.... beide Foren beheimaten unterschiedliche Profis.

Gruß
Chris
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.07.2015, 12:58
Beitrag #4
RE: Serial2 Befehle kommen verpätet an
Zitat:ja das habe ich auch gelesen dazu benutze ich aber noch die VarSpeedServo.h sollte also so weit ok sein.
Naja, ich denke eher nicht. Der Hinweis sagt ja, wenn du Servos benutzt, dann lieber nach diesem Beispiel verfahren: https://sites.google.com/site/bluetoothr...ck-Control
Das mal völlig unabhängig davon welche Library du zum ansteuern der Servos benutzt. Abgesehen davon arbeitet die VarSpeedServo Library über/mit Interrupts. Die Bluetooth Kommunikation läuft ja über Serial. Serial benutzt widerum auch Interrupts. Nicht das sich da was gegenseitig beißt?
Ich denke deshalb wird in dem Link eben auch die "alte" Servo.h benutzt, die ohne Interrupts arbeitet.
Weiterhin interssant dürfte dieser Hinweis bei der VarSpeedServo - Library sein:
Zitat:Arduino library for servos that extends the standard servo.h library with the ability to set speed, and wait for position to complete
Nicht das dadurch schon die Verzögerungen entstehen!?
Grüße Ricardo
PS: Ich bin nicht wirklich in den Code reingegangen, habe mir nur die Hinweise zu den Librariues mal angeschaut Huh

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.07.2015, 18:06
Beitrag #5
RE: Serial2 Befehle kommen verpätet an
Hallo

dein Einwand ist schon Richtig könnte ja sein.
Habe es ausprobiert mit servo.h ok ein bisschen besser ich muss mind. 2mal drücken und es bewegen sich beide Servos auf den eingestellten Wert
Dem Code vom agmue werde ich nicht hier explizit posten der steht unter dem LINK (ist ja auch ein anderes Forum ;- ) )
Muss ich die Case 1,2,3... Einweisung für jeden der servos explizit schreiben ?
Wie kann ich dem einen sagen dass er warten soll solange der eine die werte empfängt ...
Gruß
Chris
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.07.2015, 12:27
Beitrag #6
RE: Serial2 Befehle kommen verpätet an
So nun habe ich es durchgetestet leider ohne Erfolg.
Wenn ich die MotorshieldR3.h nicht verwende ist das Ergebnis das gleich wie mit.
Servo.h hat "nur" so viel beigetragen, dass sich beide Servos drehen nach mehrmaligen (2-4 mal) betätigen der Buttons.
Die Steuerung der DC Motren läuft problemlos ab.

Wie löse ich das Prob. mit den Servos?

Gruß
Chris
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Libraries, Befehle sowerum 3 705 09.02.2016 22:39
Letzter Beitrag: sowerum
  Befehle via I2C an 2. Arduino gummifisch 3 1.163 29.06.2015 11:17
Letzter Beitrag: DaniDD
  UDP Befehle stuff23 0 760 03.10.2014 19:43
Letzter Beitrag: stuff23
  zwei Befehle paralell Oberlaender 11 5.711 10.05.2014 12:39
Letzter Beitrag: Hilgi
  Kann Ultraschall-Sensor durch LED-Befehle gestört werden? to-wer 4 1.721 01.05.2014 11:12
Letzter Beitrag: to-wer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste