PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem mit digitalen pins 8-13



inka
02.02.2017, 12:09
hallo allerseits,

ich habe eine frage bezüglich der o.g. pins.

Verwendet wird ein Arduino mega 2560 mit dem sainsmart motorshield V2, ein IR empfänder war mit seiner datenleitung am pin 11 angeschlossen. Änderungen zwingen mich dazu den pin 11 anderweitig zu verwenden, die pins 9 und 10 sind für die servos (ich verwende zwar keine, aber die pins sind trotzdem blockiert) reserviert, 12 ist von mir ebenfalls belegt...

Beim versuch den kontakt 8 zu benutzen wurden vom IR empfänger keine signale an den arduino weitergegeben.
1) ist pin8 auch durch den motorshield belegt?
2) stört es irgendwie wenn ich den pin13 nutze? Immerhin hängt da ja die berühmte "LED pin13" dran...

der code: nicht vollständig, die funktion "tasten_abfrage();" fehlt, die ist aber nebensächlich, weil der code ja mit pin11 und 13 läuft, nur mit 8 eben nicht...



//#include <NewPing.h>
#include <Servo.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include <IRremoteInt.h>
//#include <ir_Lego_PF_BitStreamEncoder.h>
#include <IRremote.h>
//#include "utility/Adafruit_MS_PWMServoDriver.h"
/*
#define TRIGGER_PIN 6
#define ECHO_PIN 7
#define MAX_DISTANCE 100 //400


NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
*/
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
/*
uint16_t distanz;
uint16_t uS;
*/
uint8_t RECV_PIN =13;//IR receiver pin
uint8_t taste;

uint8_t servo_pos_1;
uint8_t servo_pos_2;
uint8_t servo_pos_3;
uint8_t m_speed;


Servo myservo_1;

boolean start_ping;
boolean hindernis;

IRrecv irrecv(RECV_PIN);

decode_results results;

Adafruit_MotorShield AFMS = Adafruit_MotorShield();

Adafruit_DCMotor *motor_hl = AFMS.getMotor(1);
Adafruit_DCMotor *motor_hr = AFMS.getMotor(2);
Adafruit_DCMotor *motor_vr = AFMS.getMotor(3);
Adafruit_DCMotor *motor_vl = AFMS.getMotor(4);

uint8_t schritt, i;

unsigned long dauer_servo, dauer_fahrt, currentMillis, previousMillis;


void setup()
{
servo_pos_1 = 40;
servo_pos_2 = 80;
servo_pos_3 = 140;
m_speed = 50;

myservo_1.attach(10);

Serial.begin(115200);
Serial1.begin(115200);

Serial.print("remote_switch_ohne_lib_kurzimpuls_dauer_bewegung");
Serial.println("\n");

Serial1.print("remote_switch_ohne_lib_kurzimpuls_dauer_bewegung");
Serial1.println("\n");

lcd.begin(16, 2);

lcd.clear();
lcd.setCursor(0, 0);
lcd.setBacklight(HIGH);
lcd.print("remote_switch");
lcd.setCursor(0, 1);
lcd.print(" ");
delay(2000);
lcd.clear();
lcd.setBacklight(LOW);

irrecv.enableIRIn(); // Start the receiver
AFMS.begin();// start motorshield
}


void loop()
{
if (irrecv.decode(&results))
{
taste = results.value;
irrecv.resume(); // Receive the next value
}
tasten_abfrage();
}

inka
03.02.2017, 14:13
schade, dass da niemanden was eingefallen ist, ich nehme meine annahme jetzt einfach mal als gegeben hin. Bei dem LED-pin dachte ich mir schon, dass es nichts ausmacht, beim pin8 muss ich noch suchen. Dass es mit dem pin13 funktioniert, kann man auch in den beiden kurzen videos sehen:

2017 02 03 cruise avoid collision: https://youtu.be/VYyODaNvFTM


2017 02 03 fernbedienung: https://youtu.be/WKTGpe4jd7k

Ceos
03.02.2017, 14:32
ich müsste mich jetzt erstmal mit dem arduino code und den libraries für dein board auseinander setzen um dir eine konkrete antwort geben zu können.

manche pins sind vorgegeben weil der controller nur auf diesen pins die passende peripherie hat.

allgemein wie die IO Pins auf den controller gemappt sind müsste man entweder der library oder der board dokumentaiton/schematic entlocken

inka
03.02.2017, 14:54
danke, nicht nötig, es hätte ja sein können, dass jemand schon mal mit dem problem konfrontiert worden ist. Und am code liegts sicher nicht, vermutlich ist es wirklich das shield...

piggituX
03.02.2017, 17:10
Hi,

wir hatten da so ein ähnliches Thema mal...

https://www.roboternetz.de/community/threads/69418-adafruit-motor-shield-V1-Ultraschall-Sensor-und-ferngesteuertes-Fahrzeug

und da lag es an den vordefinierten Pins des Shields

inka
03.02.2017, 17:32
bei dem V1 motorshield kannte ich das, allerdings schreibt sainsmart in der beschreibung für V2:

-------------------------------------------------------------------------------
What pins are/are not used on the motor shield?

The shield uses the SDA and SCL i2c pins to control DC and stepper motors. On the Arduino UNO these are also known as A4 and A5. On the Mega these are also known as Digital 20 and 21. On the Leonardo these are also known as digital 2 and 3. Do not use those pins on those Arduinos with this shield with anything other than an i2c sensor/driver.

Since the shield uses I2C to communicate, you can connect any other i2c sensor or driver to the SDA/SCL pins as long as they do not use address 0x60 (the default address of the shield)

If you want to use the servo connections, they are on pins #9 and #10. If you do not use the connector then those pins are simply not used.

You can use any other pins for any other use
-----------------------------------------------------------------------

keine spur von pin8...

Rabenauge
06.02.2017, 15:54
Nimm mal die Servo-Geschichte raus, testweise....
Ich erinnere mich da dunkel, dass da irgendwas mit den verwendeten Timern war.
Das müsste irgendwo in den Tiefen der doku zur Servo-Bibliothek stehn (wenn es denn drin steht).
Auch die NewPing hatte solche Tücken, glaub ich.

Was mir so nebenbei aufgefallen ist: du hast den Anschluss des IR-Empfängers _nicht_ als Eingang deklariert....

inka
06.02.2017, 18:12
Nimm mal die Servo-Geschichte raus, testweise....
Ich erinnere mich da dunkel, dass da irgendwas mit den verwendeten Timern war.
Das müsste irgendwo in den Tiefen der doku zur Servo-Bibliothek stehn (wenn es denn drin steht).
Auch die NewPing hatte solche Tücken, glaub ich.
momentan fehlt mir die zeit dazu, und ohne servos komme ich ja auch nicht weiter, selbst wenn es die ursache sein sollte...
Und mit dem pin13 geht es ja...


Was mir so nebenbei aufgefallen ist: du hast den Anschluss des IR-Empfängers _nicht_ als Eingang deklariert...., habe ich nicht so sehr drauf geachtet - es funktionierte ja :-), aber das mache ich noch, danke...

Rabenauge
07.02.2017, 00:44
Lies dich mal ins Thema Arduino, Interrupts und Timer ein.
Da war irgendwas mit der Servo-Lib, die einen Timer (oder nen Interrupt *grübel) nutzt, der schon auch mal anderswo gebraucht wird.

Die Servo-Bibliothek an sich benötigt man nich unbedingt, das bissel kann man eigentlich auch selber machen- wird erst bei etlichen Servos tricky.
Sie ist schön bequem, aber hat eben einige Tücken (z.B. schränkt sie beim UNO die PWM-Funktionalität ein, die man aber _eigentlich_ auch selber machen kann).

Insgesamt sind die Arduino-Bibliotheken durchaus ne feine Sache, aber wenn man mehrere zusammen benutzen will, merkt man beizeiten, dass da längst nich alles Gold ist, was glänzt. Und keiner weiss das so richtig...
Irgendwie wirst du das Problem eingrenzen müssen, und da hilft nur, eins nach dem anderen mal zu deaktivieren, und zu gucken, wanns soweit läuft.

inka
06.03.2017, 11:08
diese beschreibung der used/unused pins ist mir noch untergekommen...



2 connections for 5V 'hobby' servos connected to the Arduino's high-resolution dedicated timer - no jitter!
4 H-Bridges: TB6612 chipset provides 1.2A per bridge (3A for brief 20ms peaks) with thermal shutdown protection,
internal kickback protection diodes. Can run motors on 4.5VDC to 13.5VDC.
Up to 4 bi-directional DC motors with individual 8-bit speed selection (so, about 0.5% resolution)
Up to 2 stepper motors (unipolar or bipolar) with single coil, double coil, interleaved or micro-stepping.
Motors automatically disabled on power-up
Big terminal block connectors to easily hook up wires (18-26AWG) and power
Arduino reset button brought up top
Polarity protected 2-pin terminal block and jumper to connect external power, for separate logic/motor supplies
Tested compatible with Arduino UNO, Leonardo, ADK/Mega R3, Diecimila & Duemilanove.
Works with Due with 3.3v logic jumper. Works with Mega/ADK R2 and earlier with 2 wire jumpers.
Download the easy-to-use Arduino software library, check out the examples and you're ready to go!
5v or 3.3v compatible logic levels - jumper configurable.


All 6 analog input pins are available. They can also be used as digitalpins (pins #14 thru 19)

Digitalpin 2, and 13 are not used.
The following pins are in use only if the DC/Stepper noted is inuse:
Digitalpin 11: DC Motor #1 / Stepper #1 (activation/speed control)
Digitalpin 3: DC Motor #2 / Stepper #1 (activation/speed control)
Digitalpin 5: DC Motor #3 / Stepper #2 (activation/speed control)
Digitalpin 6: DC Motor #4 / Stepper #2 (activation/speed control)
The following pins are in use if any DC/steppers are used
Digitalpin 4, 7, 8 and 12 are used to drive the DC/Stepper motors via the74HC595 serial-to-parallel latch
The following pins are used only if that particular servo is inuse:
Digitalspin 9: Servo #1 control
Digital pin 10: Servo #2 control