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
Helmut -. schrieb: > Ganzen code posten! Formatierung beachten! Und den Code in die Code-tags packen. https://www.mikrocontroller.net/articles/Formatierung_im_Forum
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 | }
|
:
Bearbeitet durch User
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.