Forum: Mikrocontroller und Digitale Elektronik I2C Slave Problem Arduino


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Fabian G. (fabian_s51)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche ein I2C Bussystem zwischen 2 Arduino Nanos aufzubauen, 
allerdings habe ich Probleme mit dem Code. Es sollen 2 Bytes vom Master 
verschickt und vom Slave empfangen werden.
Die beiden Bytes sollen nur gesendet werden wenn ein Byte einen anderen 
Wert hat als im vorherigen Programmablauf.

Mastercode

 //I2C Ausgang
  if (a == a1 && b == b1)
  {}
  else
  { //wire ausgang
    Wire.beginTransmission(8); // transmit to device #8
    Wire.write("a" );              // sends one byte
    Wire.write("b" );
    Wire.endTransmission();
  }
  a1 = a;
  b1 = b;

Slavecode

void receiveEvent() {

    int a = Wire.read();
    int b = Wire.read();


}

Der Code vom Master wurde ohne Probleme Überprüft, beim Slave
wurde ein Fehler gefunden:
s51output_f_r_I2C:149:14: error: 'Wire' was not declared in this scope

     int a = Wire.read();

              ^~~~

Bibliothek Wire in Version 1.0 im Ordner: C:\Program 
Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.33.0_x86__mdqgnx93n4wtt\hard 
ware\arduino\avr\libraries\Wire   wird verwendet
exit status 1
'Wire' was not declared in this scope

Ich habe schon im Netz geschaut, weiß allerdings nicht was ich verändern 
muss.

Ich bitte um Hilfe.

MfG Fabian

: Bearbeitet durch User
von Helmut -. (dc3yc)


Bewertung
0 lesenswert
nicht lesenswert
Ganzen code posten! Formatierung beachten!

von TR.0LL (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Helmut -. schrieb:
> Ganzen code posten! Formatierung beachten!

Und den Code in die Code-tags packen.
https://www.mikrocontroller.net/articles/Formatierung_im_Forum

von Fabian G. (fabian_s51)


Bewertung
-1 lesenswert
nicht lesenswert
Der Komplette Code vom Slave:
const int blinkenrechts = 3 ;//oben K4
const int blinkenlinks = 2 ;//oben K3
const int standlicht = 4 ;//obenK2
const int ruecklicht = 5 ;//oben K1
const int fernlicht = 6 ;//unten K4
const int bremslicht = 7 ;//unten K3
const int regler = 8 ;//unten K2
const int zuendung = 9 ;//unten K1
const int batterie = 14 ;
const int anlasser = 16;
const int hupe = 17;

// Variablen zur i2c  auswertung
int a = 0;
int a1 = 0;
int a2 = 0;
int b = 0;
int b1 = 0;
int b2 = 0;

int zuendungan
//a4, a5 sind i2c pins
#include <Wire.h>

void setup() {
  Wire.begin(8);                // join i2c bus with address #8
  Wire.onReceive(receiveEvent); // register event
  Serial.begin(9600);           // start serial for output

  pinMode( blinkenrechts , OUTPUT);  
  pinMode( blinkenlinks , OUTPUT); 
  pinMode( standlicht , OUTPUT);
  pinMode( ruecklicht , OUTPUT); 
  pinMode( fernlicht , OUTPUT);
  pinMode( bremslicht , OUTPUT);
  pinMode( regler , OUTPUT);
  pinMode( zuendung , OUTPUT);
  pinMode( batterie , OUTPUT);
  pinMode( anlasser , OUTPUT);
  pinMode( hupe , OUTPUT);
}

void loop() {
  if (a1 = a)
  {}
  else
  { a1 = a;
    a2 = a;
    if (a2 >= 128)
    { a2 = a2 - 128;
      digitalWrite(zuendung , HIGH);
    }
    else
    { digitalWrite(zuendung , LOW);
    }
    if (a2 >= 64)
    { a2 = a2 - 64;
      bool rfstatus = HIGH;
    }
    else
    { bool rfstatus = LOW;
    }
    if (a2 >= 32)
    { a2 = a2 - 32;
      digitalWrite(bremslicht , HIGH);
    }
    else
    { digitalWrite(bremslicht , LOW);
    }
    if (a2 >= 16)
    { a2 = a2 - 16;
      digitalWrite(fernlicht , HIGH);
    }
    else
    { digitalWrite(fernlicht , LOW);
    }
    if (a2 >= 8)
    { a2 = a2 - 8;
      digitalWrite(blinkenlinks , HIGH);
    }
    else
    { digitalWrite(blinkenlinks , LOW);
    }
    if (a2 >= 4)
    { a2 = a2 - 4;
      digitalWrite(blinkenrechts , HIGH);
    }
    else
    { digitalWrite(blinkenrechts , LOW);
    }
    if (a2 >= 2)
    { a2 = a2 - 2;
      digitalWrite(hupe , HIGH);
    }
    else
    { digitalWrite(hupe , LOW);
    }
    if (a2 >= 1)
    { a2 = a2 - 1;
      bool leerlaufstatus = HIGH;
    }
    else
    { bool leerlaufstatus = LOW;
    }
  }
  if (b1 = b)
  {}
  else
  { b1 = b;
    b2 = b;
    if (b2 >= 128)
    { b2 = b2 - 128;
      digitalWrite(anlasser , HIGH);
    }
    else
    { digitalWrite(anlasser , LOW);
    }
    if (b2 >= 64)
    { b2 = b2 - 64;
      bool nachtlichtan = HIGH;
    }
    else
    { bool nachtlichtan = LOW;
    }
    if (b2 >= 32)
    { b2 = b2 - 32;
      digitalWrite(standlicht , HIGH);
      digitalWrite(ruecklicht , HIGH);
    }
    else
    { digitalWrite(standlicht , LOW);
      digitalWrite(ruecklicht , LOW);
    }
  }





}

// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent() {

    int a = Wire.read();
    int b = Wire.read();
    

}

: Bearbeitet durch User
von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
Normalerweise gehören die Includes ganz nach oben.

Hinter
> int zuendungan
fehlt ein Semikolon.


Die Funktion
> void receiveEvent()
benötigt einen Parameter vom Typ Integer.

> blinkenrechts
ist undefiniert

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.