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
Analogwert bei Änderung anpassen ?
01.10.2014, 11:43
Beitrag #17
RE: Analogwert bei Änderung anpassen ?
Hey also so sieht es ganz gut aus :

Code:
// RC-Empfänger Signale umwandeln für DC 293L Controller.
// Test


int CH1;          
const int pwmrechts = 3;                        // Motoren "rechts" Geschwindigkeit ( PWM ).

int CH3;          
const int pwmlinks  = 5;                        // Motoren "links"  Geschwindigkeit ( PWM ).


const int motorenrechts_rechtslauf  = 4;        // Motoren "rechts" ( rechtslauf ).
const int motorenrechts_linkslauf   = 9;        // Motoren "rechts"  ( linkslauf ).                                    

const int motorenlinks_rechtslauf   = 7;        // Motoren "links"  ( rechtslauf ).
const int motorenlinks_linkslauf    = 8;        // Motoren "links"   ( linkslauf ).

int links;
int rechts;

void setup() {
  
  Serial.begin(9600);
  
  pinMode(10, INPUT);
  pinMode(11, INPUT);


  
pinMode(motorenrechts_rechtslauf, OUTPUT);      
pinMode(motorenrechts_linkslauf , OUTPUT);
pinMode(motorenlinks_rechtslauf , OUTPUT);
pinMode(motorenlinks_linkslauf  , OUTPUT);

pinMode(pwmrechts, OUTPUT);
pinMode(pwmlinks , OUTPUT);

    
  }

void loop() {
  
    CH1 = pulseIn(10, HIGH, 25000);
    CH3 = pulseIn(11, HIGH, 25000);

  
links  = map(CH1, 1000, 2000, -255, 255);     // Motoren auf der linken  Seite / Geschwindigkeit linke  Seite. ! ( DAS LÖST EIENEN FEHLER AUS). !

rechts = map(CH3, 1000, 2000, -255, 255);     // Motoren auf der rechten Seite / Geschwindigkeit rechte Seite.

//#######################################################################      <<<<         MOTOREN LINKE SEITE        >>>>     ################################################################################​##############


if (links > 0 ) {
  
  digitalWrite(motorenlinks_linkslauf  , LOW);
  digitalWrite(motorenlinks_rechtslauf , HIGH);
  
  analogWrite(pwmlinks, links);
  
  }

if (links < 0 ) {
  
  digitalWrite(motorenlinks_rechtslauf , LOW);
  digitalWrite(motorenlinks_linkslauf  , HIGH);

  
  analogWrite(pwmlinks, links * -1);  
  
  }


//#######################################################################      <<<<         MOTOREN RECHTE SEITE        >>>>     ################################################################################​##############


if (rechts > 0) {
  
  digitalWrite(motorenrechts_linkslauf , LOW);
  digitalWrite(motorenrechts_rechtslauf , HIGH);
  
  analogWrite(pwmrechts, rechts);

  
  }


if (rechts < 0) {
  
  digitalWrite(motorenrechts_linkslauf , HIGH);
  digitalWrite(motorenrechts_rechtslauf , LOW);
  
  analogWrite(pwmrechts, rechts * -1);

  
  }



  
}

Stimmt das lernt man schon in der Schule, ich denke oft viel zu kompliziert Wink



wenn links == 0 ist dann passiert nichts dann werden beide Drehrichtungen "LOW".


Gruß Marc

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.10.2014, 11:50
Beitrag #18
RE: Analogwert bei Änderung anpassen ?
(01.10.2014 11:43)Marc2014 schrieb:  wenn links == 0 ist dann passiert nichts dann werden beide Drehrichtungen "LOW".
Nein. "Nichts" bedeutet, dass alles so bleibt, wie es vorher war. Warum sollten die auf LOW gehen? Das machen die nur, wenn Du es ihnen sagst.
Ausserdem: Die ganze Behandlung von links und rechts darfst Du nur machen, wenn CH1 (bzw. CH3) nicht 0 ist. Momentan siehst es vielleicht so aus, als ob es funktioniert, das wird sich aber ändern sobald Du eine echte 0 (also "Anhalten") von einer 0, die "kein Puls" bedeutet, unterscheiden kannst.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.10.2014, 12:03
Beitrag #19
RE: Analogwert bei Änderung anpassen ?
Ja, ich hab das nicht verstanden die wären echt nie ausgegangen.

meintest du so in etwa:

Code:
// RC-Empfänger Signale umwandeln für DC 293L Controller.
// Test


int CH1;          
const int pwmrechts = 3;                        // Motoren "rechts" Geschwindigkeit ( PWM ).

int CH3;          
const int pwmlinks  = 5;                        // Motoren "links"  Geschwindigkeit ( PWM ).


const int motorenrechts_rechtslauf  = 4;        // Motoren "rechts" ( rechtslauf ).
const int motorenrechts_linkslauf   = 9;        // Motoren "rechts"  ( linkslauf ).                                    

const int motorenlinks_rechtslauf   = 7;        // Motoren "links"  ( rechtslauf ).
const int motorenlinks_linkslauf    = 8;        // Motoren "links"   ( linkslauf ).

int links;
int rechts;

void setup() {
  
  Serial.begin(9600);
  
  pinMode(10, INPUT);
  pinMode(11, INPUT);


  
pinMode(motorenrechts_rechtslauf, OUTPUT);      
pinMode(motorenrechts_linkslauf , OUTPUT);
pinMode(motorenlinks_rechtslauf , OUTPUT);
pinMode(motorenlinks_linkslauf  , OUTPUT);

pinMode(pwmrechts, OUTPUT);
pinMode(pwmlinks , OUTPUT);

    
  }

void loop() {
  
    CH1 = pulseIn(10, HIGH, 25000);
    CH3 = pulseIn(11, HIGH, 25000);

  
links  = map(CH1, 1000, 2000, -255, 255);     // Motoren auf der linken  Seite / Geschwindigkeit linke  Seite. ! ( DAS LÖST EIENEN FEHLER AUS). !

rechts = map(CH3, 1000, 2000, -255, 255);     // Motoren auf der rechten Seite / Geschwindigkeit rechte Seite.

//#######################################################################      <<<<         MOTOREN LINKE SEITE        >>>>     ################################################################################​##############


if (( links != 0 ) && ( links > 0 )) {
  
  digitalWrite(motorenlinks_linkslauf  , LOW);
  digitalWrite(motorenlinks_rechtslauf , HIGH);
  
  analogWrite(pwmlinks, links);
  
  }

if (( links != 0 ) && ( links < 0 )){
  
  digitalWrite(motorenlinks_rechtslauf , LOW);
  digitalWrite(motorenlinks_linkslauf  , HIGH);

  
  analogWrite(pwmlinks, links * -1);  
  
  }
  
if (links == 0 ) {
  
  digitalWrite(motorenlinks_rechtslauf , LOW);
  digitalWrite(motorenlinks_linkslauf  , LOW);

  
  analogWrite(pwmlinks, 0);  
  
  }


//#######################################################################      <<<<         MOTOREN RECHTE SEITE        >>>>     ################################################################################​##############


if (( rechts != 0 ) && ( rechts > 0 )) {
  
  digitalWrite(motorenrechts_linkslauf , LOW);
  digitalWrite(motorenrechts_rechtslauf , HIGH);
  
  analogWrite(pwmrechts, rechts);

  
  }


if (( rechts != 0 ) && ( rechts < 0 )) {
  
  digitalWrite(motorenrechts_linkslauf , HIGH);
  digitalWrite(motorenrechts_rechtslauf , LOW);
  
  analogWrite(pwmrechts, rechts * -1);

  
  }
  
  if ( rechts == 0 )  {
  
  digitalWrite(motorenrechts_linkslauf , LOW);
  digitalWrite(motorenrechts_rechtslauf , LOW);
  
  analogWrite(pwmrechts, 0);

  
  }



  
}

Jetzt sollten die Motoren bei einer 0 ausgehen egal welche Richtung auch die Geschwindigkeit wird auf 0 gesetzt. So müsste jetzt ja alles funktionieren.

Jede Seite der Motoren kann vor oder rückwärts laufen und die -Pwm wird ja zur +Pwm das auch rückwärts fahren klappen sollte.

Was meinst du dazu?

Gruß Marc Wink

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.10.2014, 12:10
Beitrag #20
RE: Analogwert bei Änderung anpassen ?
Hi,
ja, der Teil ist jetzt erstmal besser. Nur das hier soll ja wohl ein Witz sein:

if (( links != 0 ) && ( links > 0 )) {

Kleine Übungsaufgabe: Vereinfach den Ausdruck im if...

Ansonsten: Dein Sketch wird jetzt wieder das anfängliche Problem haben. Die Motoren werden ein bisschen zucken, aber nicht mehr. Wenn gerade kein Puls reinkommt, dann ist CH1 bzw. CH3 Null. In dem Fall darfst Du gar nichts machen (also keine Änderungen an irgendwelchen Pins).

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.10.2014, 12:23
Beitrag #21
RE: Analogwert bei Änderung anpassen ?
hi,

Big Grin stimmt das ist sinnlos wenn ich eh das (links == 0 ) { unten abfrage dann reicht ja das

if ( links > 0 ) {

}

if ( links < 0 ) {

}

(links == 0 ) {

}

Das meintest du oder?


Ok stimmt wenn nichts reinkommt ( also 0 ) dann werden die Motoren stehen bleiben weil ich ja die (links == 0 ) & (rechts == 0 ) Abfrage drin habe aber wie soll ich das machen ?

Gruß Marc

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.10.2014, 12:31
Beitrag #22
RE: Analogwert bei Änderung anpassen ?
(01.10.2014 12:23)Marc2014 schrieb:  Big Grin stimmt das ist sinnlos wenn ich eh das (links == 0 ) { unten abfrage
...
Das meintest du oder?
Nein, es hat nichts damit zu tun, was danach passiert. Der Ausdruck "a != 0 && a > 0" kann IMMER zu "a > 0" vereinfacht werden. Wie kann denn etwas "> 0" sein und gleichzeitig "== 0" ???

Zitat:Ok stimmt wenn nichts reinkommt ( also 0 ) dann werden die Motoren stehen bleiben weil ich ja die (links == 0 ) & (rechts == 0 ) Abfrage drin habe aber wie soll ich das machen ?
Das ist doch wirklich nicht schwierig, einfach nochmal eine Abfrage "if(CH1 != 0)" außenrum.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.10.2014, 12:55
Beitrag #23
RE: Analogwert bei Änderung anpassen ?
Hey Wink ,


a != 0 && a > 0 bedeutet doch: a ungleich 0 und a großer als 0.

Wenn a nicht 0 ist muss es größer sein und ich hab unsinniger Weise
das a!= 0 vorne dran das ist nutzlos das meintest du oder verstehe ochs immernoch falsch Big Grin ?


Danke das heist wenn jetzt zb. am CH1 eine 0 anliegt dann bleibt das Programm in seinem letzten Zustand ?

Also: zb.
CH1 CH3

1000 1000
1000 1000
0 0

Dann bleiben beide Motoren im "rechtslauf" bis ein andrer zugelassener Wert kommt?

So das müsste der "finale" code sein:




Code:
// RC-Empfänger Signale umwandeln für DC 293L Controller.
// Test


int CH1;                                        
const int pwmrechts = 3;                        // Motoren "rechts" Geschwindigkeit ( PWM ) AUSGANG.

int CH3;          
const int pwmlinks  = 5;                        // Motoren "links"  Geschwindigkeit ( PWM ) AUSGANG.


const int motorenrechts_rechtslauf  = 4;        // Motoren "rechts" ( rechtslauf ).
const int motorenrechts_linkslauf   = 9;        // Motoren "rechts"  ( linkslauf ).                                    

const int motorenlinks_rechtslauf   = 7;        // Motoren "links"  ( rechtslauf ).
const int motorenlinks_linkslauf    = 8;        // Motoren "links"   ( linkslauf ).

int links;
int rechts;

void setup() {
  
  Serial.begin(9600);
  
  pinMode(10, INPUT);                            // CH1 Eingang
  pinMode(11, INPUT);                            // CH3 Eingang


  
pinMode(motorenrechts_rechtslauf, OUTPUT);      
pinMode(motorenrechts_linkslauf , OUTPUT);
pinMode(motorenlinks_rechtslauf , OUTPUT);
pinMode(motorenlinks_linkslauf  , OUTPUT);

pinMode(pwmrechts, OUTPUT);
pinMode(pwmlinks , OUTPUT);

    
  }

void loop() {
  
    CH1 = pulseIn(10, HIGH, 25000);
    CH3 = pulseIn(11, HIGH, 25000);

  
links  = map(CH1, 1000, 2000, -255, 255);     // Motoren auf der linken  Seite / Geschwindigkeit linke  Seite. ! ( DAS LÖST EIENEN FEHLER AUS). !

rechts = map(CH3, 1000, 2000, -255, 255);     // Motoren auf der rechten Seite / Geschwindigkeit rechte Seite.


//#######################################################################      <<<<         MOTOREN LINKE SEITE        >>>>     ################################################################################​##############


if (CH1 != 0) {
  

        if (links > 0 ) {
  
        digitalWrite(motorenlinks_linkslauf  , LOW);
        digitalWrite(motorenlinks_rechtslauf , HIGH);
  
        analogWrite(pwmlinks, links);
  
      }

        if (links < 0 ) {
  
        digitalWrite(motorenlinks_rechtslauf , LOW);
        digitalWrite(motorenlinks_linkslauf  , HIGH);

  
        analogWrite(pwmlinks, links * -1);  
  
      }
      
       if (links == 0 ) {
  
        digitalWrite(motorenlinks_rechtslauf , LOW);
        digitalWrite(motorenlinks_linkslauf  , LOW);

  
        analogWrite(pwmlinks, 0);  
  
      }

}
//#######################################################################      <<<<         MOTOREN RECHTE SEITE        >>>>     ################################################################################​##############


if (CH3 != 0) {

        if (rechts > 0) {
  
        digitalWrite(motorenrechts_linkslauf , LOW);
        digitalWrite(motorenrechts_rechtslauf , HIGH);
  
        analogWrite(pwmrechts, rechts);

  
        }


        if (rechts < 0) {
  
        digitalWrite(motorenrechts_linkslauf , HIGH);
        digitalWrite(motorenrechts_rechtslauf , LOW);
  
        analogWrite(pwmrechts, rechts * -1);

  
        }

        if (rechts == 0) {
  
        digitalWrite(motorenrechts_linkslauf , LOW);
        digitalWrite(motorenrechts_rechtslauf , LOW);
  
        analogWrite(pwmrechts, 0);

  
        }


   }
  
}


Gruß Marc Wink

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.10.2014, 13:07
Beitrag #24
RE: Analogwert bei Änderung anpassen ?
(01.10.2014 12:55)Marc2014 schrieb:  a != 0 && a > 0 bedeutet doch: a ungleich 0 und a großer als 0.

Wenn a nicht 0 ist muss es größer sein und ich hab unsinniger Weise
das a!= 0 vorne dran das ist nutzlos das meintest du oder verstehe ochs immernoch falsch Big Grin ?
Nein, wenn a nicht 0 ist, dann kann es auch kleiner sein. Aber wenn a größer als 0 ist, dann kann es nicht 0 sein. (a > 0 => a != 0)
Vielleicht hilft das:
a != 0 && a > 0
ist dasselbe wie
a > 0 && a != 0
(Das logische "und" ist kommutativ.)
Nehmen wir mal an, dass a > 0. Dann ist a !=0 automatisch auch richtig. Also kann man sich das "a != 0" sparen.
Nehmen wir jetzt an, dass a > 0 falsch ist. Dann ist der Rest des Ausdrucks egal (weil "falsch und irgendwas" immer "falsch" ergibt).
D.h. auch hier kann man sich "a != 0" sparen.
Hier ist es eigentlich egal, da das "a != 0" nur überflüssig, aber nicht schädlich ist. Ansonsten sollte man beim Entwickeln von Software schon auch ein bisschen was von formaler Logik verstehen. Das hilft ungemein...

Zitat:So das müsste der "finale" code sein:
Schau'n mer mal, wie "final" das ist.
Zumindest solltest Du das mal ausprobieren.
Nachher wird sich wahrscheinlich herausstellen, dass das Mapping nicht ganz stimmt. Wahrscheinlich wirst Du daran noch feilen müssen. Ich kann mir z.B. nicht vorstellen, dass die Mitte genau bei 1500 liegen wird.
...aber probier's erstmal aus.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Selbstfahrender Roboter Programm änderung hilfe ? arekklone 11 538 06.07.2016 14:59
Letzter Beitrag: Binatone
  wie Parameter der seriellen Schnittstelle anpassen? avoid 6 477 29.04.2016 16:44
Letzter Beitrag: avoid
  Änderung von Bibliotheken chhec 9 1.236 04.02.2016 09:51
Letzter Beitrag: hotsystems
  Gute Sketches für das EthernetShield für das WiFiShield anpassen. getiteasy 4 1.111 21.11.2014 20:13
Letzter Beitrag: rkuehle

Gehe zu:


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