//Include Libraries #include #include #include //create an RF24 object RF24 radio(D6, D7); // CE, CSN #define buttonPin D0 #define ledPin D1 //address through which two modules communicate. const byte address[6] = "00001"; int button_index; // --- // H-bridge motor control, using the TB67H451FNG, should run with input 2-5V // I'm using some geared "micro-motors", supposed to run at 3-7V (~30rpm). #define FORWARD_PIN D4 #define BACKWARD_PIN D5 uint8_t dirn = 1; // direction, 1 or 0. uint8_t state = 0; // state variable, so we can change direction when there is a new state. // --- void setup() { Serial.begin(9600); // initialize serial communication // Serial.setTimeout(10); // set the timeout for parseInt pinMode(ledPin, OUTPUT); // initialize the LED pin as an output pinMode(buttonPin, INPUT_PULLUP); radio.begin(); //set the address radio.openWritingPipe(address); // Set module as transmitter radio.stopListening(); // --- pinMode(FORWARD_PIN, OUTPUT); pinMode(BACKWARD_PIN, OUTPUT); // --- } void loop() { int button_state = digitalRead(buttonPin); if (button_state == LOW) { dirn = !dirn; // change_direction } if (Serial.available() > 0 || button_state == LOW) { // see if there's incoming serial data int inByte = Serial.read(); // int inByte = Serial.parseInt(); int integer_val = inByte - '0'; // ASCII to integer conversion ... numbers 0 - 9, are 48-57. Saying "-'0'", is basically subtracting 48. if (integer_val >= 0) { for (int i = 0; i < integer_val; i++) { digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); delay(100); } } // simple test mode (e.g. with serial monitor) if (inByte == 'q' || inByte == '1' || inByte == '3' || button_state == LOW) { digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); delay(100); // turn the motor of the transmitter module // --- // spin motor forward digitalWrite(FORWARD_PIN, dirn); digitalWrite(BACKWARD_PIN, !dirn); delay(500); // stop motor digitalWrite(FORWARD_PIN, LOW); digitalWrite(BACKWARD_PIN, LOW); // --- } else if (inByte == 'w' || inByte == '2') { digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); delay(100); digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); delay(100); } else { digitalWrite(ledPin, LOW); } // ------------------------------- //Send message to peripheral module (Q: how to do this for multipel modules, e.g. with different addresses?) if (integer_val == 2 || integer_val == 3) { // i.e. if we've selected the second module const char text[] = "Hello World"; radio.write(&text, sizeof(text)); delay(1000); // why this delay } // ------------------------------- // Serial.write("ok!"); Serial.write(inByte); } }