Ciao,
ho realizzato un collegamento I2C tra due schede Arduino (mkrfox1200 e una con le caratteristiche di ATmega328p ) . La scheda ATmega328p comprende un modulo BLE, attraverso cui comunico con un’altra scheda uguale. Non riesco a far funzionare simultaneamente i due sistemi di comunicazione: per ricevere sulla mkrfox i dati ottenuti via Bluetooth, vengono bloccati gli altri dati inviati via I2C, e viceversa.
Questo è il codice:
MKRFOX
#include <Wire.h>
#define ADDRESS 8
int var1 = 0;
int var2 = 0;
int var3 = 0;
void setup(){
Wire.begin(); // Avvia il bus I2C, indirizzo opzionale per il master
}
void loop(){
Wire.requestFrom(ADDRESS, 3); // richiede 2 byte al dispositivo slave
while (Wire.available()) {
var1 = Wire.read(); // leggi il byte ricevuto
var2 = Wire.read(); // leggi il byte ricevuto
var3 = Wire.read(); // leggi il byte ricevuto
}
Serial.print("var1 = ");
Serial.println(var1);
Serial.print("var2 = ");
Serial.println(var2);
Serial.print("var3 = ");
Serial.println(var3);
delay(10000);
}
ATMEGA 1 + BLuetooth
#include <Wire.h>
#define ADDRESS 8
int var1 = 0; //variabile
int var2 = 0; //variabile
int var3 = 0; // variabile Bluetooth
void setup(){
Serial.begin(115200); // comunicazione Bluetooth
pinMode(5,INPUT); //dati in INPUT dal pin5, legge il sensore
pinMode(6,INPUT); //dati in INPUT dal pin6, legge il sensore
Wire.begin(ADDRESS);
Wire.onRequest(requestEvent); // esegue la funzione quando ha una richiesta
}
void loop(){
var1 = digitalRead(5);
var2 = digitalRead(6);
delay(100);
while(Serial.available()) {
var3 = Serial.read(); // dati Bluetooth
}
}
void requestEvent(){
Wire.write(var1);
Wire.write(var2);
Wire.write(var3);
}
ATMEGA 2 + BLuetooth
int var3 = 5; //variabile che memorizza il valore letto
void setup(){
Serial.begin(115200);
pinMode(5,INPUT); //dati in INPUT dal pin5, legge il sensore
}
void loop(){
var3 = digitalRead(5);
delay(100);
Serial.write(liv3);
delay(1000);
}
Avete dei suggerimenti da darmi? Grazie