Zatrzymanie odbioru przez RF i prądożerny nadajnik

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
mowgli
Młodszy majsterkowicz
Posty: 32
Rejestracja: 10 lut 2015, 13:25

Zatrzymanie odbioru przez RF i prądożerny nadajnik

Post autor: mowgli » 18 gru 2016, 23:32

Temat jest dwu wątkowy, za pomoc w którymś z wątków z góry dziękuję.

Wątek nr1 - odbiornik: odbiornik sygnału RF przestaje odbierać sygnał po wykonaniu części kodu.
Układ odbiornika oparty jest o arduino nano z atmegą328, popularny odbiornik RF100A, oraz czytnik kart SD. Po wciśnięciu przycisku na nadajniku, odbiornik powinien odtworzyć dźwięk zapisany na karcie pamięci i tak się dzieje ale tylko raz. Po wykonaniu części kodu odpowiadającej za odtworzenie dźwięku, odbiornik przestaje odbierać sygnał z nadajnika. Chodzi mi o to żeby po zakończeniu odtwarzania dźwięku na odbiorniku, odbiornik wznawiał odbiór sygnału z nadajnika.

Kod odbiornika

Kod: Zaznacz cały

#include <VirtualWire.h>
#include "SD.h"
#define SD_ChipSelectPin 4
#include "TMRpcm.h"
#include "SPI.h"

TMRpcm tmrpcm;
#define receive_pin 3
int state = 0;

void setup()
{
    Serial.begin(9600);
    tmrpcm.speakerPin = 9;
    Serial.begin(9600);
    if (!SD.begin(SD_ChipSelectPin)) {
        Serial.println("Blad odczytu SD");
        return;
    }
    else {
        Serial.println("SD OK");
    }
    Serial.println("RF SETUP");
    vw_set_rx_pin(receive_pin);
    vw_setup(2000);
    vw_rx_start();
}

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

    if (vw_get_message(buf, &buflen)) {
        Serial.println(buf[5]);
        if (buf[5] == 49) {
            tmrpcm.setVolume(1);
            tmrpcm.play("09.wav", 30);
            do {
                state = tmrpcm.isPlaying();
                Serial.println("odtwarzanie");

            } while (state == 1);
            tmrpcm.disable();

            Serial.println("stop");
        }
    }
}
Wątek nr2 - nadajnik: nadajnik ogólnie działa jak powinien z tym że jest strasznie prądożerny. Nie wiem z czego to wynika. Układ składa się z atmegi 328 nadajnika RF, przycisku chwilowego. Układ zasilany jest z baterii 9V przez stabilizator L7805. Nie wiem czy stabilizator pobiera dużo prądu czy raczej wina leży po stronie kodu. W każdym razie nowa bateria nie przetrwała dłużej niż kilkanaście godzin.

Kod nadajnika:

Kod: Zaznacz cały

#include <VirtualWire.h>

#define transmit_pin 10
#define button_pin 7

void setup()
{
    vw_set_tx_pin(transmit_pin);
    vw_setup(2000);
    pinMode(led_pin, OUTPUT);
    pinMode(button_pin, INPUT_PULLUP);
}

void loop()
{
    String on = "123451";
    String off = "123450";
    char on_arr[23];
    char off_arr[23];
    if (digitalRead(button_pin)) {
        Serial.println("OFF");
        off.toCharArray(off_arr, on.length() + 1);
        vw_send((uint8_t*)off_arr, strlen(off_arr));
        vw_wait_tx();
    }
    else {
        Serial.println("ON");
        on.toCharArray(on_arr, on.length() + 1);
        vw_send((uint8_t*)on_arr, strlen(on_arr));
        vw_wait_tx();
    }
    delay(100);
}

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


ODPOWIEDZ

Strony partnerskie: