I2C Slave Problem Arduino

OP #6274558
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
OP
Der Komplette Code vom Slave:
1
const int blinkenrechts = 3 ;//oben K4
2
const int blinkenlinks = 2 ;//oben K3
3
const int standlicht = 4 ;//obenK2
4
const int ruecklicht = 5 ;//oben K1
5
const int fernlicht = 6 ;//unten K4
6
const int bremslicht = 7 ;//unten K3
7
const int regler = 8 ;//unten K2
8
const int zuendung = 9 ;//unten K1
9
const int batterie = 14 ;
10
const int anlasser = 16;
11
const int hupe = 17;
12

13
// Variablen zur i2c  auswertung
14
int a = 0;
15
int a1 = 0;
16
int a2 = 0;
17
int b = 0;
18
int b1 = 0;
19
int b2 = 0;
20

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

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

30
  pinMode( blinkenrechts , OUTPUT);  
31
  pinMode( blinkenlinks , OUTPUT); 
32
  pinMode( standlicht , OUTPUT);
33
  pinMode( ruecklicht , OUTPUT); 
34
  pinMode( fernlicht , OUTPUT);
35
  pinMode( bremslicht , OUTPUT);
36
  pinMode( regler , OUTPUT);
37
  pinMode( zuendung , OUTPUT);
38
  pinMode( batterie , OUTPUT);
39
  pinMode( anlasser , OUTPUT);
40
  pinMode( hupe , OUTPUT);
41
}
42

43
void loop() {
44
  if (a1 = a)
45
  {}
46
  else
47
  { a1 = a;
48
    a2 = a;
49
    if (a2 >= 128)
50
    { a2 = a2 - 128;
51
      digitalWrite(zuendung , HIGH);
52
    }
53
    else
54
    { digitalWrite(zuendung , LOW);
55
    }
56
    if (a2 >= 64)
57
    { a2 = a2 - 64;
58
      bool rfstatus = HIGH;
59
    }
60
    else
61
    { bool rfstatus = LOW;
62
    }
63
    if (a2 >= 32)
64
    { a2 = a2 - 32;
65
      digitalWrite(bremslicht , HIGH);
66
    }
67
    else
68
    { digitalWrite(bremslicht , LOW);
69
    }
70
    if (a2 >= 16)
71
    { a2 = a2 - 16;
72
      digitalWrite(fernlicht , HIGH);
73
    }
74
    else
75
    { digitalWrite(fernlicht , LOW);
76
    }
77
    if (a2 >= 8)
78
    { a2 = a2 - 8;
79
      digitalWrite(blinkenlinks , HIGH);
80
    }
81
    else
82
    { digitalWrite(blinkenlinks , LOW);
83
    }
84
    if (a2 >= 4)
85
    { a2 = a2 - 4;
86
      digitalWrite(blinkenrechts , HIGH);
87
    }
88
    else
89
    { digitalWrite(blinkenrechts , LOW);
90
    }
91
    if (a2 >= 2)
92
    { a2 = a2 - 2;
93
      digitalWrite(hupe , HIGH);
94
    }
95
    else
96
    { digitalWrite(hupe , LOW);
97
    }
98
    if (a2 >= 1)
99
    { a2 = a2 - 1;
100
      bool leerlaufstatus = HIGH;
101
    }
102
    else
103
    { bool leerlaufstatus = LOW;
104
    }
105
  }
106
  if (b1 = b)
107
  {}
108
  else
109
  { b1 = b;
110
    b2 = b;
111
    if (b2 >= 128)
112
    { b2 = b2 - 128;
113
      digitalWrite(anlasser , HIGH);
114
    }
115
    else
116
    { digitalWrite(anlasser , LOW);
117
    }
118
    if (b2 >= 64)
119
    { b2 = b2 - 64;
120
      bool nachtlichtan = HIGH;
121
    }
122
    else
123
    { bool nachtlichtan = LOW;
124
    }
125
    if (b2 >= 32)
126
    { b2 = b2 - 32;
127
      digitalWrite(standlicht , HIGH);
128
      digitalWrite(ruecklicht , HIGH);
129
    }
130
    else
131
    { digitalWrite(standlicht , LOW);
132
      digitalWrite(ruecklicht , LOW);
133
    }
134
  }
135

136

137

138

139

140
}
141

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

146
    int a = Wire.read();
147
    int b = Wire.read();
148
    
149

150
}
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.