• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 1 głosów - średnia: 5
  • 1
  • 2
  • 3
  • 4
  • 5
Poradnik obsugi radia fs1000a
#1
[Obrazek: images?q=tbn:ANd9GcQdzgEITIdECF7Jg1LOoLv...51-G1_Zi8Q]

Chciałbym przedstawić obsługę i najlepsza z bibliotek pod arduino.

Do czego możemy to zastosować,w zasadzie do wszystkiego wysyłając dane umożliwia nam sterowanie robotem,ramieniem robota na odległość.

Biblioteka pod adruino nazywa się VirtualWire jest to najlepsza biblioteka ma jednak pewna wadę możemy wysłać tylko zmienia bajtowa czyli 255,ale ma to plus ze możemy wysłać kilka bajtowa o wartości 255 w zasadzie mamy wiele bitów i wiele możliwości.

A wiec zaczynamy.
1)Zaczniemy od omówienia nadajnika(transmitter).

Kod:
//przykładowy kod trasmittera

#include <VirtualWire.h>

const int transmit_pin = 12;
const int transmit_en_pin = 3;

void setup()
{
   // Initialise the IO and ISR
   vw_set_tx_pin(transmit_pin);
   vw_set_rx_pin(receive_pin);
   vw_set_ptt_pin(transmit_en_pin);
   vw_set_ptt_inverted(true); // Required for DR3100
   vw_setup(2000);       // Bits per sec
   pinMode(led_pin, OUTPUT);
}

byte count = 1;

void loop()
{
 char msg[7] = {'h','e','l','l','o',' ','#'};

 msg[6] = count;
 digitalWrite(led_pin, HIGH); // Flash a light to show transmitting
 vw_send((uint8_t *)msg, 7);
 vw_wait_tx(); // Wait until the whole message is gone
 digitalWrite(led_pin, LOW);
 delay(1000);
 count = count + 1;
}
2)omówienie poszczególnych członów

ustawiamy pin trasmitera

Kod:
const int transmit_pin = 12;
const int transmit_en_pin = 12;

Ilość bitów można zmieniać optymalnie jest 2000.

Kod:
   vw_set_tx_pin(transmit_pin);
   vw_set_rx_pin(receive_pin);
   vw_set_ptt_pin(transmit_en_pin);
   vw_set_ptt_inverted(true);
   vw_setup(2000);       // ilość wysyłanych bitów na sekund
   pinMode(led_pin, OUTPUT);

Kod:
char msg[7] = {'h','e','l','l','o',' ','#'};

 msg[6] = count;
 digitalWrite(led_pin, HIGH); // Flash a light to show transmitting
 vw_send((uint8_t *)msg, 7);
 vw_wait_tx(); // Wait until the whole message is gone
 digitalWrite(led_pin, LOW);
 delay(1000);
 count = count + 1;
-ta cześć odpowiada za wysyłanie  
Kod:
char msg[7] = {'h','e','l','l','o',' ','#'};

 msg[6] = count;
 vw_send((uint8_t *)msg, 7);
 vw_wait_tx(); // Wait until the whole message is gone
 delay(1000);
 count = count + 1;
-jeśli chcemy wysłać więcej bitów zmieniamy
Kod:
char msg[7] = {'h','e','l','l','o',' ','#'};

 msg[6] = count;

 vw_send((uint8_t *)msg, 7);

-char msg[x] = {'h','e','l','l','o',' ','#'}; w miejsce x wpisujemy oraz tworzymy tablice o tyle ile x (dla początkujących proszę doczytać o zmiennych tablicowych)
wysłać możemy bity od 0-255 czyli zmienia bajtowa jak wspomnąłem na początku(255,255,255,255,255).

2)Odbiornik(Receiver).

-Przykładowy program
Kod:
#include <VirtualWire.h>

const int led_pin = 13;
const int transmit_pin = 12;
const int receive_pin = 11;
const int transmit_en_pin = 3;

void setup()
{
    delay(1000);
    Serial.begin(9600);    // Debugging only
    Serial.println("setup");

    // Initialise the IO and ISR
    vw_set_tx_pin(transmit_pin);
    vw_set_rx_pin(receive_pin);
    vw_set_ptt_pin(transmit_en_pin);
    vw_set_ptt_inverted(true);
    vw_setup(2000);     // Bits per sec

    vw_rx_start();      

    pinMode(led_pin, OUTPUT);
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen))
    {
    int i;

        digitalWrite(led_pin, HIGH);
    
    Serial.print("Got: ");
    
    for (i = 0; i < buflen; i++)
    {
        Serial.print(buf[i], HEX);
        Serial.print(' ');
    }
    Serial.println();
        digitalWrite(led_pin, LOW);
    }
}
-W tym miejscu zmieniamy wejście naszego odbiornika
Kod:
const int receive_pin = 11;
-wartosc "vw_setu" musi być taka sama jak nadajnika inaczej transmisja się nie odbędzie z powodu nie synchronizacji danych.
Kod:
vw_setup(2000);     // Bits per sec

-W wolnym tłumaczeniu działa to tak-jezeli vw_get_message jest wykrywalny wtedy wydrukuj zawartość bufora w terminalu i tak to dokładnie się odbywa
Kod:
for (i = 0; i < buflen; i++)
    {
        Serial.print(buf[i], HEX);
        Serial.print(' ');
    }

-funkcja for wykona sie tyle razy ile jest bitów do odczytu z bufora
w zasadzie tylko taki kod jest konieczny by to za działało
Kod:
if (vw_get_message(buf, &buflen))
    {
    int i;


    
    
    
    for (i = 0; i < buflen; i++)
    {
       //na przykład przepisz do zmiennej tablicowej
    }


    }
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości