- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 6 von 6

Thema: Auslösen von Befehlen, durch Signalübergabe eines Arduinos an ein anderen Arduino

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    04.05.2015
    Beiträge
    41

    Auslösen von Befehlen, durch Signalübergabe eines Arduinos an ein anderen Arduino

    Anzeige

    Praxistest und DIY Projekte
    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 möchte, folgendes erreichen, wenn ich im ersten Arduino den Output-Pin auf High setze, soll auf dem zweiten Arduino ein Programm ablaufen.

    Ist das möglich?

    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 für eine größere Ansicht

Name:	Signalübergabe.jpg
Hits:	5
Größe:	66,9 KB
ID:	33432

    Es schaut aber so aus, als würde die grüne 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
    Beiträge
    2.214
    Ich würde 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 möglich?
    Es gibt unzählige Möglichkeiten so etwas zu realisieren.
    Eine Möglichkeit wäre auch durch ein Signalflanke am Controller 1 einen Interrupt an Controller 2 auszulösen.
    Das hätte den Vorteil das das Programm nur einmal pro Signaländerung ausgeführt würde.
    Pin Change Interupts gehen natürlich auch.
    Auch eine Komunikation über eine der Hardwareschnittstellen ( USART, SPI, I²C ) zwischen den beiden Controllern ist möglich und bietet viel mehr Austauschoptionen als ein simpler Portpin.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    55
    Beiträge
    2.208
    Schreib das mal ungefähr so:

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

    Deine Methode _müsste_ eigentlich auch funktionieren, aber aus Erfahrung weiss ich: manchmal funktioniert es eben nicht.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  4. #4
    HaWe
    Gast
    Zitat Zitat von Rabenauge Beitrag anzeigen
    Schreib das mal ungefähr so:

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

    Deine Methode _müsste_ eigentlich auch funktionieren, aber aus Erfahrung weiss ich: manchmal funktioniert es eben nicht.
    Ich finde persönlich, 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 für leseWert problemlos mit deinem Code, und sie benötigen in C(++) auch denselben Speicher.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Auc hwenn es hier vermutlich nicht die Ursache ist,
    Digitalsignale haben 3 Spannungszustände.
    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 würde zeigen ob es was bringt oder nicht.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    04.05.2015
    Beiträge
    41
    Hallo,

    danke, für 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, 16:01
  2. 7Segmentanzeige auslösen durch zwei Tasten in bestimmter Zeitfolge / Attiny 24
    Von Joschi1711 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 20.02.2012, 15:51
  3. Unterprogramm durch Interrupt auslösen
    Von YaNnIk im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 07.01.2010, 18:47
  4. rnmega2560 USB Interrupt durch USB auslösen
    Von AndiDC im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 26.03.2007, 08:52
  5. sofortigen programmstop durch interrupt auslösen
    Von MarkusH im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 25.05.2005, 15:47

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen