" servo1.attach(10); " crasht meinen sketch

Hallo,

ich hab mir für mein erstes Arduino Projekt überlegt ein kleines RC Car umzubauen. Also Servo und Motor rein.

Jetzt habe ich zu anfang mit zwei getrennten Sketches angefangen die getrennt von einander super funktioneieren,
Problem ist nun beim zusammenführen.

Ohne servo1.attach(10);
läuft der Motor so wie er soll

#include <IRremote.h>      
    #include <Servo.h>

#define Vor_stick 4246652797 
#define Stopp_stick 3570764933  
#define Stopp_stick2 2757516835  
#define right_button 3275196293
#define left_button 2629677319 
#define Stop_button 7611   

int receiver_pin = 4;      

int motorpin1 = 3;                 

int motorpin2 = 2;                  
int motor_speed = 9;

  
 Servo servo1;  
IRrecv receiver(receiver_pin); 
decode_results output;

void setup() {

  Serial.begin(9600);
  receiver.enableIRIn(); 
  pinMode(motorpin1, OUTPUT);
  pinMode(motorpin2, OUTPUT);

}

void loop() {
  if (receiver.decode(&output)) {
    unsigned int value = output.value;
    switch(value) {
  case Vor_stick:
      analogWrite(motor_speed, 100     );
         digitalWrite(motorpin1,LOW);
         digitalWrite(motorpin2,HIGH);
         delay(750);
           digitalWrite(motorpin1,LOW);
        digitalWrite(motorpin2,LOW);
    
    break;

  case Stopp_stick:
           digitalWrite(motorpin1,LOW);
        digitalWrite(motorpin2,LOW);
             delay(750);

    break;

   case right_button:   
    servo1.write(105);
    delay(50);
    servo1.write(95);

    break;
    
case left_button:
    servo1.write(85);
    delay(50);
    servo1.write(95);

    break;
   

  }
   receiver.resume(); 
}  }

sobald ich den String in VoidSetup schreibe funktioniert weder Servo noch Motor:

#include <IRremote.h>    
    #include <Servo.h>

#define Vor_stick 4246652797 
#define Stopp_stick 3570764933 
#define Stopp_stick2 2757516835 
#define right_button 3275196293
#define left_button 2629677319 
#define Servo_0  3570764933
#define Stop_button 7611  

int receiver_pin = 4;     
//initializing the pins for leds
int motorpin1 = 3;                 

int motorpin2 = 2;                 
int motor_speed = 9;

  
 Servo servo1;   
IRrecv receiver(receiver_pin);
decode_results output;

void setup() {

  Serial.begin(9600);
  receiver.enableIRIn();
  pinMode(motorpin1, OUTPUT);
  pinMode(motorpin2, OUTPUT);
servo1.attach(10); 
}

void loop() {
  if (receiver.decode(&output)) {
    unsigned int value = output.value;
    switch(value) {
  case Vor_stick:
      analogWrite(motor_speed, 100     );
         digitalWrite(motorpin1,LOW);
         digitalWrite(motorpin2,HIGH);
         delay(750);
           digitalWrite(motorpin1,LOW);
        digitalWrite(motorpin2,LOW);
    
    break;

  case Stopp_stick:
           digitalWrite(motorpin1,LOW);
        digitalWrite(motorpin2,LOW);
             delay(750);

    break;

   case right_button:   
    servo1.write(105);
    delay(50);
    servo1.write(95);

    break;
    
case left_button:
    servo1.write(85);
    delay(50);
    servo1.write(95);

    break;
   

  }
   receiver.resume(); 
}  }

Jetzt habe ich gefühlt schon Wochen mit der Suche verbracht und hab mittlerweile ein totales Brett vor dem Kopf..
Kann wer helfen?

sobald ich den String in VoidSetup schreibe funktioniert weder Servo noch Motor:

-->Einen String schreibst Du nirgends rein, das wirkt verwirrend für den Leser :wink:

Was genau heißt denn, es funktioniert nicht? Was für einen Controller nutzt Du? Ein Schaltplan wäre auch noch wichtig...

mindash:
Jetzt habe ich gefühlt schon Wochen mit der Suche verbracht und hab mittlerweile ein totales Brett vor dem Kopf..
Kann wer helfen?

Wie soll man mit deinen spärlichen Angaben einen Fehler finden ?

Was meinst du mit "crasht" ?
Was passiert genau ?
Wie hast du die Teile angeschlossen ?
Was für eine Spannungsversorgung hast du ?
Wo hast du die angeschlossen ?
Gibt es weitere Teile, die du verwendest ?

Der servo-teil allein geht auch?
Dass an Pin 2/3 im Endausbau ein Motor hängt, weiß dein Sketch nicht.

Vielleicht kommst du so weiter. ..

michael_x:
Der servo-teil allein geht auch?
Dass an Pin 2/3 im Endausbau ein Motor hängt, weiß dein Sketch nicht.

Der TO verwendet doch im Sketch die zuvor definierten Variablen.

Zunächst, bitte entschuldigt meine Ausdrucksweise. Ich bin totaler Neuling auf dem Gebiet. Das ist mein erstes Projekt.

Ich habe mal Fritzing geladen um euch zu zeigen wie die Verkabelung aussieht.

Die sache was da crasht sollte ich wohl auch beschreiben, sorry.
Der Motor läuft langsamer als ohne servo.attach() und wie mir jetzt erst aufgefallen ist, dreht der Servo in richtung 105° bis zum anschlag.

mindash:
Zunächst, bitte entschuldigt meine Ausdrucksweise. Ich bin totaler Neuling auf dem Gebiet. Das ist mein erstes Projekt.

Ich habe mal Fritzing geladen um euch zu zeigen wie die Verkabelung aussieht.

Die sache was da crasht sollte ich wohl auch beschreiben, sorry.
Der Motor läuft langsamer als ohne servo.attach() und wie mir jetzt erst aufgefallen ist, dreht der Servo in richtung 105° bis zum anschlag.

Alles über eine Batterie zu betreiben ist schon sportlich.
Die schafft den Strom für deine Verbraucher nicht.

Dank dir.
Wenn ich das Netzteil anschließe, bleibt das Fehlerbild bestehen.
Ich habe da ja einen 6V DC Motor, sollte ich nun eine 6V Spannungsquelle an Pin 8 der L293D klemmen
oder eine 9V Blockbatterie über die Breadboard Stromleisten anschließen und dann am Arduino über VIN und GND gehen?

Mit einer 9Volt Blockbatterie wirst du nicht glücklich.
Allerdings kenne ich den L293D nicht und kann da bei der Beschaltung nicht wirklich helfen
Du solltest aber davon ausgehen, dein Projekt mit einem bzw. zwei Netzteilen zu versorgen.

9V Batterien liefern nicht genug Strom für solche Anwendungen. Und die Kapazität ist auch sehr niedrig

Hallo,

Also ich gehe mal von der Fritzing Zeichnung aus:
Wegen der Stromversorgung würde ich die Batterien für die Motoren und den Servomotor nehmen (viele haben eine Eingangsspannung von (5-6 Volt). Aber keinesfalls für den Arduino, das absulute minimum ist 6 Volt*1 (sollten aber 7V mind. sein). Deine Batterien liefern maximal 6 Volt, umso lehrer die Batterie umso geringer die Spannung.

Der 5 Volt Pin ist nicht nur ein Ausgangs Pin, du kannst hier mit genau 5 Volt*1 den Arduino betreiben.

Du kannst zwar für das Arduino eine 9V Block Batterie verwenden aber die sind, bis auf die teuren Lithium Systeme, eher nur für kurzen Gebrauch geignet.

Du solltest Die 4 AA Batterien von + -> Vs(Pin8, Saft für den Motor) am L293D und zum Servo. Masse(- Pol) mit Masse verbinden. Der L293D braucht dann noch am Pin Vcc(Pin18, Saft für den IC) 5 Volt vom Arduino

Auf jeden Fall: Bat -> 5V + USB <- PC = CRASH, das kann man wohl so sagen.

lg dony

Übrigens: Im Sketch finde ich zwar die motor_speed definition die mit Pin 9 zu deiner Fritzing Zeichnung passt aber ich finde keine Ansteuerung. Dieser Pin sollte ein PWM Pin sein (bzw. muss wenn du die Geschwindigkeit steuern willst).

pinMode(motor_speed, OUTPUT); //in die setup
analogWrite(motor_speed, 128); //so läuft er mit halber Geschwindigkeit.

edit: aber ein 'analogWrite(pin, 100)' hab ich gefunden, kein wunder, ersetzt das mal durch 255!
lg dony

Nach aufmerksamen lesen der Problemstellung, "sehe" ich einen Ressourcenkonflikt.

Ein Hardwaretimer des ATMega wird (mindestens) doppelt verwendet.
Darum scheppert es.

combie:
Nach aufmerksamen lesen der Problemstellung, "sehe" ich einen Ressourcenkonflikt.

Ein Hardwaretimer des ATMega wird (mindestens) doppelt verwendet.
Darum scheppert es.

Danke! :wink:
Mein Unterbewustsein sagte mir: "Pin 9 und 10 = das ist keine gute Idee", wusste aber nicht mehr warum.

lg dony

Hi
Link zum PinOut, Uno
Pin 9 und 10, OC1A & OC1B, hängen beide an Timer 1 - Beide können unterschiedliche 'Weiten' liefern, aber immer gleiche Geschwindigkeit.
Du könntest einen der Pinne 9/10 in einen der Pinne 11/6/5/3 tauschen, da Du dann auf einem anderem Timer sitzt - die Zahl ist die Nummer des Timer, der ATmega328 (Uno/Nano, kA, wo Der noch drauf ist) hat drei Timer (0,1,2).

MfG