Motor startet nicht wenn Taster gedrückt ist

ardu-rover.ino (1,5 KB)
Das Programm funktioniert einfach nicht, ich bin schon so lange am tüffteln doch ich bekomme es einfach nicht hin. Der Motor kann zusätlich noch durch einen Poti gesteuert werden, das auch funktioniert nur der Taster macht noch noch nicht das was er soll. Kann mir jmd weiterhelfen?

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Bitte hier lesen und den Sketch richtig einstellen.

Was ist bei dir GSM? irgend ein Modul? welcher Link Bitte.
Füge in dein Sketch Kommentare ein, deine Beschreibung ist sehr dürftig.

Hallo fony, entschuldigung das die Beschreibung so geringfügig ausgebaut wurde, daran werde ich in Zukunft arbeiten. GSM steht für Motor. Ich habe zwei Motoren angeschlossen GSM1 und GSM2, ich hoffe
ardu-rover.ino (1,6 KB)
Ich hoffe das das Programm jetzt besser ist, wenn noch Fragen sind, kann ich sie gerne beantworten. Vielen Dank fürs Drüberschauen :wink:

Ich sehe immer noch kein Programm.

Merke, nicht alle, die helfen möchten, können eine ino-Datei lesen.
Damit reduziert sich die Zahl der Hilfsbereiten.

int poti =A0; 
int GSM1 = 10;
int in1 = 9;
int in2 = 8;
int GSM2 = 5;
int in3 = 7;
int in4 = 6;  
int taster=13;
int tasterstatus1=0; 
int tasterstatus2=0;  
int LEDblau= 2;
int i;
void setup()  {
    pinMode(LEDblau, OUTPUT); 
    pinMode(taster, INPUT_PULLUP); 
    //pinMode(taster2, INPUT_PULLUP); 
    pinMode(GSM1, OUTPUT);    
    pinMode(GSM2, OUTPUT);
    pinMode(in1, OUTPUT);
    pinMode(in2, OUTPUT);
    pinMode(in3, OUTPUT);
    pinMode(in4, OUTPUT);
    }
void loop(){
 test();
            }
  void test(){
  if(digitalRead(taster)==HIGH){
    geschwindigkeit1()
    //int i=1;
  }else{
   geschwindigkeiteinstellen2 ()
    }
  }
//void start(){
//tasterstatus1 =digitalRead(taster1); 

//if (tasterstatus1 == HIGH) 
  //  { 
 //   digitalWrite(LEDblau, LOW);  
 //   }
//else {}
//tasterstatus2=digitalRead(taster2); 

//if (tasterstatus2 == HIGH) 
 //   { 
  //  digitalWrite(LEDblau, HIGH);  
 //   } 
//else {}}
void geschwindigkeit1(){
  int potiwert =analogRead(poti);
  int geschwindigkeit=map(potiwert,0 , 1023, 21.5, 255);
  digitalWrite(in1, HIGH);   
  digitalWrite(in2, LOW);  
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  analogWrite(GSM1, geschwindigkeit); 
  analogWrite(GSM2, geschwindigkeit);
}
void geschwindigkeiteinstellen2(){
  digitalWrite(in1, LOW);   
  digitalWrite(in2, LOW);  
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  analogWrite(GSM1, 0); 
  analogWrite(GSM2, 0);
}

Entschuldigung, dass wusste ich nicht

Stell die IDE so ein

Den dein Sketch kompiliert nicht :wink: da fehlen 2 mall ";"

Ok, und jetzt bitte den Code komplett markieren und die Schaltfläche </> drücken.

void test() {
  if (digitalRead(taster) ) {
    geschwindigkeit1();
    //int i=1;
  } else {
    geschwindigkeiteinstellen2 ();
  }
}

Danke für die Hilfe, die zwei ; hatte ich ganz übersehen, doch mein hauptsächliches Problem ist das die Räder schon anfangen zu rotieren auch wenn ich nicht den Taster gedrückt habe am Anfang. Wenn ich ihn dann drücke (ich muss ihn gedrückt halten), dann hören die Motoren auf zu rotieren. Mein Ziel ist aber, dass die Motoren erst starten wenn der Taster gedrückt wurde (ich möchte ihn ungern die ganze Zeit bei einer Autofahrt gedrückt halten). Deswegen meine Frage, wie muss ich das programm ändern, stimmt was im loop nicht?

Dein Taster liefert HIGH wenn er nicht gedrückt ist, und LOW wenn er gedrückt ist. Wenn du also nach LOW statt nach HIGH vergleichst, sollte es das dir gewünschte Ergebnis bringen.

Der Ausdruck if(digitalRead(taster)==HIGH) und if(digitalRead(taster)) hat die gleiche Auswirkung.

Da der Pin, welcher den Status des Tasters abfragt aber mit INPUT_PULLUP initialisiert wurde, gilt der Taster als gedrückt, wenn digitalRead(taster) den Wert 0 (LOW) zurückliefert.

Von daher wäre if(digitalRead(taster)==LOW) oder if(!digitalRead(taster)) richtig.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.