-         
Ergebnis 1 bis 6 von 6

Thema: Auslsen von Befehlen, durch Signalbergabe eines Arduinos an ein anderen Arduino

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    04.05.2015
    Beitrge
    40

    Auslsen von Befehlen, durch Signalbergabe eines Arduinos an ein anderen Arduino

    Anzeige

    Hallo,

    der Titel ist relativ lang, nennt aber meine Anliegen.

    Ich habe zwei Arduinos. Beim zweiten Arduino habe ich einen Digitalen I/O Pin auf Input gesetzt und beim ersten einen Digitalen Pin auf Output. Ich mchte, folgendes erreichen, wenn ich im ersten Arduino den Output-Pin auf High setze, soll auf dem zweiten Arduino ein Programm ablaufen.

    Ist das mglich?

    Code Arduino 1

    Code:
    #define test 9
    
    void setup() {
     
      pinMode(test, OUTPUT);
    
    }
    
    void loop() {
    
    digitalWrite(test, HIGH); 
    
    }
    Code Arduino 2

    Code:
    #define rot 8
    #define gruen 2
    #define kp 6
    
    
    
    void setup() {
    
    pinMode (rot, OUTPUT);
    pinMode (gruen, OUTPUT);
    pinMode (kp, INPUT);
    
    }
    
    void loop() {
    
      
      if (digitalRead(kp) == HIGH){
    
      digitalWrite (rot, HIGH);
      digitalWrite (gruen, HIGH);
      }
    
      else {
        
      digitalWrite (rot, HIGH);
      digitalWrite (gruen, LOW);
      }
    
    
      delay(1000);
    
    }
    Wenn kp High ist, also eine Spannung anliegt, sollen beide LEDs leuchten, wenn keine Spannung am Pin KP anliegt, soll nur rot leuchten.

    Klicke auf die Grafik fr eine grere Ansicht

Name:	Signalbergabe.jpg
Hits:	5
Gre:	66,9 KB
ID:	33432

    Es schaut aber so aus, als wrde die grne LED mal leuchten mal nicht, habe ich einen Fehler in meinem Gedankengang?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beitrge
    1.923
    Ich wrde mal das delay(1000); rausmachen.
    Denn so lange der Controller im Delay wartet kann er nichts anderes mehr tun undie LED's bleiben wie sie waren.
    Ist das mglich?
    Es gibt unzhlige Mglichkeiten so etwas zu realisieren.
    Eine Mglichkeit wre auch durch ein Signalflanke am Controller 1 einen Interrupt an Controller 2 auszulsen.
    Das htte den Vorteil das das Programm nur einmal pro Signalnderung ausgefhrt wrde.
    Pin Change Interupts gehen natrlich auch.
    Auch eine Komunikation ber eine der Hardwareschnittstellen ( USART, SPI, IC ) zwischen den beiden Controllern ist mglich und bietet viel mehr Austauschoptionen als ein simpler Portpin.

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    49
    Beitrge
    1.309
    Schreib das mal ungefhr so:

    bool leseWert;
    leseWert=digitalRead(kp);
    if(leseWert==HIGH)
    {
    .....
    .....
    }

    Deine Methode _msste_ eigentlich auch funktionieren, aber aus Erfahrung weiss ich: manchmal funktioniert es eben nicht.
    Grssle, Sly
    ..dem Inschenr ist nix zu schwr..

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beitrge
    2.859
    Zitat Zitat von Rabenauge Beitrag anzeigen
    Schreib das mal ungefhr so:

    bool leseWert;
    leseWert=digitalRead(kp);
    if(leseWert==HIGH)
    {
    .....
    .....
    }

    Deine Methode _msste_ eigentlich auch funktionieren, aber aus Erfahrung weiss ich: manchmal funktioniert es eben nicht.
    Ich finde persnlich, bool sollte man nur mit TRUE oder FALSE verwenden, nicht mit high oder low, auch wenn es logisch quivalent ist.

    stattdessen gehen aber sicherlich auch die Datentypen char oder byte fr leseWert problemlos mit deinem Code, und sie bentigen in C(++) auch denselben Speicher.
    ≠≡≈αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    49
    Beitrge
    2.781
    Auc hwenn es hier vermutlich nicht die Ursache ist,
    Digitalsignale haben 3 Spannungszustnde.
    Low, nicht Definiert und High.
    Momentan ist der Ausgang High wenn der Eingang High ist und wenn der Eingang Low und nicht definiert ist ist der Ausgang Low.

    Kehrt man die Befehlslogik um, ist der Ausgang nur Low wenn der Eingang low ist.
    Sonst ist er High.
    Code:
      if (digitalRead(kp) == LOW){
    
      digitalWrite (rot, HIGH);
      digitalWrite (gruen, LOW);
      }
    
      else {
        
      digitalWrite (rot, HIGH);
      digitalWrite (gruen, HIGH);
      }
    Ein Versuch wrde zeigen ob es was bringt oder nicht.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    04.05.2015
    Beitrge
    40
    Hallo,

    danke, fr die vielen Antworten. Ich werde das alles mal nach und nach ausprobieren. Bin schon froh, dass ich in meinem Gedankengang also nicht so falsch lag.

hnliche Themen

  1. Reed-Sensor durch anderen Drehgeber ersetzen
    Von frefrafru im Forum Sensoren / Sensorik
    Antworten: 1
    Letzter Beitrag: 29.01.2014, 15:01
  2. 7Segmentanzeige auslsen durch zwei Tasten in bestimmter Zeitfolge / Attiny 24
    Von Joschi1711 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 20.02.2012, 14:51
  3. Unterprogramm durch Interrupt auslsen
    Von YaNnIk im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 07.01.2010, 17:47
  4. rnmega2560 USB Interrupt durch USB auslsen
    Von AndiDC im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 26.03.2007, 07:52
  5. sofortigen programmstop durch interrupt auslsen
    Von MarkusH im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 25.05.2005, 14:47

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhnge hochladen: Nein
  • Beitrge bearbeiten: Nein
  •