помогите переделать скетч

Тема в разделе "Проводная и беспроводная связь", создана пользователем ga2bi, 21 фев 2015.

  1. ga2bi

    ga2bi Нерд

    есть вот такой скетч, и программа 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
     
  2. X-Dron

    X-Dron Гик

    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
    В следующий раз помогать не буду. Приведите код в порядок и публикуйте правильною
     
    Последнее редактирование: 21 фев 2015
    Виталий нравится это.
  3. ga2bi

    ga2bi Нерд

    не надо убрать из передатчика пк, что сделать пульт на макетке уно+ трансмитер и 4 кнопки
     
  4. X-Dron

    X-Dron Гик

    А я что сделал?
    или "key1" это не кнопка? Надеюсь привязать к пинам навыков хватит?
     
  5. ga2bi

    ga2bi Нерд

    а работать будет только при зажатии кнопки ?
     
  6. ga2bi

    ga2bi Нерд

    просто есть ещё вот такой скетч но он работает так что при нажатии команда выполняется до тех пор пока не нажмёшь кнопку стоп или другую команду
    Код (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
     
     
  7. X-Dron

    X-Dron Гик

    Так и будет, потому что так написано в приемнике.
     
  8. ga2bi

    ga2bi Нерд

    ардуино для меня сложный, я могу только копировать и вставлять, комбинировать и переделывать скетчи под себя и то не всегда, ir remote как то проще было там куча примеров, а вот для rc пришлось часами пялится в скетчи и чего то понимать, но я так и не понимаю не хрена, а я все го то хочу просто сделать 2х канальное радио управление