Go Down

Topic: " servo1.attach(10); " crasht meinen sketch (Read 816 times) previous topic - next topic

mindash

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

Code: [Select]
#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:
Code: [Select]
#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?

DerLehmi

Quote
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 ;)

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

HotSystems

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 ?
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

michael_x

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. ..

HotSystems

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.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

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.

HotSystems

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.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

mindash

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?

HotSystems

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.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Serenifly

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

dony

#10
Jan 13, 2018, 07:09 pm Last Edit: Jan 13, 2018, 07:25 pm by dony
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
Newsticker:
Die Änderung meines Abschied Grußes ist Teil meiner Corporate Identity/Design Anpassung.

dony

#11
Jan 13, 2018, 07:30 pm Last Edit: Jan 13, 2018, 07:37 pm by 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).

Code: [Select]

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
Newsticker:
Die Änderung meines Abschied Grußes ist Teil meiner Corporate Identity/Design Anpassung.

combie

#12
Jan 13, 2018, 09:56 pm Last Edit: Jan 13, 2018, 10:00 pm by combie
Nach aufmerksamen lesen der Problemstellung, "sehe" ich einen Ressourcenkonflikt.

Ein Hardwaretimer des ATMega wird (mindestens) doppelt verwendet.
Darum scheppert es.
Ein Frosch, der im Brunnen lebt, beurteilt das Ausmaß des Himmels nach dem Brunnenrand.

dony

#13
Jan 14, 2018, 04:55 am Last Edit: Jan 14, 2018, 12:29 pm by dony
Nach aufmerksamen lesen der Problemstellung, "sehe" ich einen Ressourcenkonflikt.

Ein Hardwaretimer des ATMega wird (mindestens) doppelt verwendet.
Darum scheppert es.
Danke!  ;)
Mein Unterbewustsein sagte mir: "Pin 9 und 10 = das ist keine gute Idee", wusste aber nicht mehr warum.

lg dony
Newsticker:
Die Änderung meines Abschied Grußes ist Teil meiner Corporate Identity/Design Anpassung.

postmaster-ino

#14
Jan 14, 2018, 01:13 pm Last Edit: Jan 14, 2018, 01:15 pm by postmaster-ino
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

Go Up