есть вот такой скетч, и программа Z-Controller, она управляет передатчиком посылая команды в ком порт, как переделать эти скетчи что бы управление было на 4 кнопках на макетке (кнопка зажата команда выполняется, отпустил кнопку команда не выполняется) передатчик отправка команд с пк первая уно+ радио передатчик 433мхц // TRANSMITTER CODE //NOTE :- THIS CODE IS USED WHEN YOU WANT TO CONTROL THE ROBOT VIA THE COMPUTER!!!! #include <VirtualWire.h> void setup() { Serial.begin(9600); // Debugging only Serial.println("setup"); // Initialise the IO and ISR vw_setup(2000); // Bits per sec vw_set_tx_pin(3); //Transmitter Data Pin to Digital Pin 3 }//close setup void loop() { if (Serial.available() > 0) { int sendByte = Serial.read();//Starts reading data from the serial monitor once condition is met switch (sendByte){ case 'f': //if the controller type f { char *msg2 = "f"; digitalWrite(13, true); // Flash a light to show transmitting vw_send((uint8_t *)msg2, strlen(msg2));//send byte to the receiver vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13, false); break; } case 'b': //if controller types b { char *msg2 = "b"; digitalWrite(13, true); // Flash a light to show transmitting vw_send((uint8_t *)msg2, strlen(msg2));//send byte to the receiver vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13, false); break; } case 's': //if controller types s { char *msg2 = "s"; digitalWrite(13, true); // Flash a light to show transmitting vw_send((uint8_t *)msg2, strlen(msg2));//send byte to the receiver vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13, false); break; } case 'l': //if controller types l { char *msg2 = "l"; digitalWrite(13, true); // Flash a light to show transmitting vw_send((uint8_t *)msg2, strlen(msg2));//send byte to the receiver vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13, false); break; } case 'r': //if controller types r { char *msg2 = "r"; digitalWrite(13, true); // Flash a light to show transmitting vw_send((uint8_t *)msg2, strlen(msg2));//send byte to the receiver vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13, false); break; } default://if any other value is entered { Serial.println("wrong entry");//print wrong entry in the serial monitor } }// close switch-case }//close if }//close loop // End Of Code приёмник вторая уно+радио приёмник 433мхц крутит гуслями вперёд назад повороты в раздрайв // RECIEVER CODE //NOTE :- THIS RECEIVER CODE IS USED WHEN YOU WANT TO CONTROL THE ROBOT VIA THE COMPUTER #include <VirtualWire.h> //declaring pin Nos of FIRST L293D int in1 = 4; int in2 = 5; int in3 = 6; int in4 = 7; int motorPin[] = {4, 5, 6, 7};//array for storing pin nos void setup() { Serial.begin(9600); // Debugging only Serial.println("setup"); // Initialise the IO and ISR vw_setup(2000); // Bits per sec vw_set_rx_pin(2);//Receiver at Digital Pin 2 vw_rx_start();// Start the receiver PLL running for (int i = 0; i < 12; i++) { pinMode(motorPin, OUTPUT); }//close for loop /* This is basically what the for loop does :- pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); */ }//close setup void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)) // Non-blocking { int i; digitalWrite(13, true); // Flash a light to show received good message // Message with a good checksum received, dump it. for (i = 0; i < buflen; i++) { Serial.print(buf); if(buf == 'f') { forward();//go forward when f is pressed } if(buf == 'b') { backward();//go backward when b is pressed } if(buf == 's') { stopMotor();//stop/brake when s is pressed } if(buf == 'l') { left();//go left when l is presed } if(buf == 'r') { right();//go right when r is pressed } }//close for loop digitalWrite(13, false); }//close main if }//close loop //you can print the data entered when debugging by adding Serial.println //////////////////////////////////////////////////////////////////////////////////////// //set of functions void forward() { digitalWrite(in1,HIGH); digitalWrite(in2,HIGH); digitalWrite(in3,HIGH); digitalWrite(in4,HIGH); } void backward() { digitalWrite(in1,LOW); digitalWrite(in2,HIGH); digitalWrite(in3,HIGH); digitalWrite(in4,LOW); ; } void left() { digitalWrite(in1,LOW); digitalWrite(in2,HIGH); digitalWrite(in3,HIGH); digitalWrite(in4,HIGH); } void right() { digitalWrite(in1,HIGH); digitalWrite(in2,HIGH); digitalWrite(in3,HIGH); digitalWrite(in4,LOW); } void stopMotor() { digitalWrite(in1,LOW); digitalWrite(in2,LOW); digitalWrite(in3,LOW); digitalWrite(in4,LOW); } //End Of Code
4-мя кнопками не получится, отсылается 5 команд. самое простое - сделать симуляцию порта. //if (Serial.available() > 0) //{ int sendByte = 0; if (key1) sendByte = 'f'; if (key2) sendByte = 'b'; if (key3) sendByte ='s'; if (key4) sendByte = 'l'; if (key5) sendByte = 'r'; ..... //default://if any other value is entered //{ //Serial.println("wrong entry");//print wrong entry in the serial monitor //} }// close switch-case //}//close if В следующий раз помогать не буду. Приведите код в порядок и публикуйте правильною
просто есть ещё вот такой скетч но он работает так что при нажатии команда выполняется до тех пор пока не нажмёшь кнопку стоп или другую команду Код (Text): // TRANSMITTER CODE //NOTE :- THIS TRANSMITTER CODE IS USED WHEN YOU WANT TO CONTROL THE ROBOT VIA THE BREADBOARD REMOTE #include <VirtualWire.h> //Assigning controller buttons to Digital Pins int forward = 8; int backward = 9; int rightTurn = 10; int leftTurn = 11; int stopMotor = 12; int remotePins[]= {8,9,10,11,12};//array to store pin nos void setup() { Serial.begin(9600); // Debugging only Serial.println("setup"); // Initialise the IO and ISR vw_setup(2000); // Bits per sec vw_set_tx_pin(3); //Transmitter Data Pin to Digital Pin 3 for(int i = 0; i<6 ; i++) { pinMode(remotePins[i], INPUT); digitalWrite(remotePins[i],HIGH); } /* This is what the loop above does :- pinMode(8, INPUT); pinMode(9, INPUT); pinMode(10, INPUT); pinMode(11, INPUT); pinMode(12, INPUT); digitalWrite(8, HIGH); digitalWrite(9, HIGH); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, HIGH);*/ }//close setup void loop() { char *msg2; if(digitalRead(forward) == LOW)//if the forward button is pressed { char *msg2 = "1";//send 1 to the receiver digitalWrite(13, true); // Flash a light to show transmitting vw_send((uint8_t *)msg2, strlen(msg2));//send the byte to the receiver vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13, false); } if(digitalRead(backward) == LOW)//if the back button is pressed { char *msg2 = "2";///send 2 to the receiver digitalWrite(13, true); // Flash a light to show transmitting vw_send((uint8_t *)msg2, strlen(msg2));//send the byte to the receiver vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13, false); } if(digitalRead(leftTurn) == LOW)//if the left button is pressed { char *msg2 = "3";//send 3 to the receiver digitalWrite(13, true); // Flash a light to show transmitting vw_send((uint8_t *)msg2, strlen(msg2));//send the byte to the receiver vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13, false); } if(digitalRead(rightTurn) == LOW)//if the right button is pressed { char *msg2 = "4";//send 4 to the receiver digitalWrite(13, true); // Flash a light to show transmitting vw_send((uint8_t *)msg2, strlen(msg2));//send the message to the receiver vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13, false); } if(digitalRead(stopMotor)==LOW)//if the stop button is pressed { char *msg2 = "5";//send 5 to the receiver digitalWrite(13, true); // Flash a light to show transmitting vw_send((uint8_t *)msg2, strlen(msg2));//send the message to the receiver vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13, false); } }//close loop // End Of Code
ардуино для меня сложный, я могу только копировать и вставлять, комбинировать и переделывать скетчи под себя и то не всегда, ir remote как то проще было там куча примеров, а вот для rc пришлось часами пялится в скетчи и чего то понимать, но я так и не понимаю не хрена, а я все го то хочу просто сделать 2х канальное радио управление