I want to have my Slave Arduino to send signal to Master after the command was made. But the Slave Arduino does not proceeds to sending the signal after doing the command. What is wrong with my code?
Slave
void receiveEvent(int bytes) {
dir = Wire.read(); // direction
dis = Wire.read(); // distance
spe = Wire.read(); // speed
eStop = Wire.read(); // 1 or 0
Serial.println(dir);
Serial.println(dis);
Serial.println(spe);
mov = true;
}
void loop() {
Wire.onReceive(receiveEvent);
if (dir == 1 && mov == true && eStop == false){
motor.Distance(dis);
motor.Speed(spe);
motor.Forward();
Wire.onRequest(requestEvent);
mov = false;
fin = true;
}
if (dir == 2 && mov == true && eStop == false){
motor.Distance(dis);
motor.Speed(spe);
motor.Reverse();
Wire.onRequest(requestEvent);
mov = false;
fin = true;
}
else{
motor.Stop();
}
}
void requestEvent(){
Wire.write(1);
fin = false;
Serial.println("sent");
}
Master
#include <Wire.h>
const byte interruptPin = 2;
byte dir = 0;
byte dis;
byte spe;
bool upd;
bool state= false;
void setup() {
Wire.begin();
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), emergencyStop, CHANGE);
Serial.begin(9600);
}
void loop() {
if( state == false ){
dir = 1;
dis = 30;
spe = 2;
Wire.beginTransmission(9); // transmit to device #9
Wire.write(dir);
Wire.write(dis);
Wire.write(spe);
Wire.write(0);
Wire.endTransmission(); // stop transmitting
state = true;
}
if (state == true){
if(Wire.available() > 0){
Wire.requestFrom(9,2); //6bytes from slave 9
bool upd = Wire.read();
Serial.println(upd);
}
}
}
void emergencyStop(){ // not working
Wire.beginTransmission(9); // transmit to device #9
Wire.write(0);
Wire.write(0);
Wire.write(0);
Wire.write(1);
Wire.endTransmission(); // stop transmitting
}