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;
}
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;
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;
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);
}
}
Kod:
const int receive_pin = 11;
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
}
}