Cześć wszystkim, mam kłopot z projektem i zastanawiam się czy to z kodem jest coś nie tak. To mój pierwszy projekt i jest dość prosty, ale ja nie widzę tu źródła problemu. Program ma za zadanie wysyłać nadajnikiem sygnał do odbiornika aby poruszyć serwem o zadany kąt. Pierwszy przycisk ma po naciśnięciu zmienić pozycję serwa (i utrzymać ją dopóki przycisk jest wciśnięty), a po puszczeniu wrócić serwo na pierwotną pozycję. Drugi ma po naciśnięciu (i puszczeniu w dowolnym momencie) odczekać 5 sekund (z sygnałem dźwiękowym przerywanym) i wysłać sygnał który na 1,5sek zmieni pozycję serwa i po tym czasie wróci do pozycji wyjściowej.
Problem jest w drugim przycisku - czasem nie wyzwala serwa. Nie wiem od czego to zależy. NRFy są okondensatorowane tak jak serwo, wiec wykluczam zakłócenia.
1. Nadajnik na Arduino Nano z modułem NRF24L01, buzzerem i dwoma przyciskami:
2. Odbiornik: Arduino nano, NRF24L01, serwo MG90:
Pomóżcie
Problem jest w drugim przycisku - czasem nie wyzwala serwa. Nie wiem od czego to zależy. NRFy są okondensatorowane tak jak serwo, wiec wykluczam zakłócenia.
1. Nadajnik na Arduino Nano z modułem NRF24L01, buzzerem i dwoma przyciskami:
Kod:
/*
Nadajnik radiowy do servo. 2 przyciski i buzzer.
Przycisk1 obraca servo do pewnego momentu kiedy jest wciśnięty. Kiedy puszczony, servo wraca do swojej pozycji.
Przycisk2 - jego naciśnięcie generuje (w nadajniku) sygnał dzwiękowy przez 5 sekund, po czym przesuwa servo na 0,5 sekundy i wraca do swojej pozycji.
*/
#include <SPI.h>
#include <RF24.h>
#include <nRF24L01.h>
int data[2];
RF24 radio(9,10);//piny do podpięcia modułu nRF24L01
const uint64_t pipe = 0xF0F0F0F0D2L;
int buttonPin1 = A1; //pin przycisku 1
int buttonPin2 = A2; //pin przycisku 2
int buttonState1 = 0;
int buttonState2 = 0;
void setup() {
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(pipe);
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(A5, OUTPUT); //Konfiguracja A5 jako wyjście dla buzzera
}
void loop() {
buttonState1 = digitalRead(buttonPin1); //przycisk trzymany- servo zmieniona pozycja (przycisk1)
if (buttonState1 == HIGH)
{
data[1] = 170;
radio.write(data, sizeof(data));
}
if(buttonState1 == LOW)
{
data[1] = 70;
radio.write(data, sizeof(data));
}
buttonState2 = digitalRead(buttonPin2); // przycisk z opóźnieniem i buzzerem (przycisk 2)
if (buttonState2 == HIGH)
{
data[0] = 170;
radio.write(data, sizeof(data));
}
if (buttonState2 == LOW)
{
tone(A5, 1000); //Wygeneruj sygnał o częstotliwości 1000Hz na pinie A5
delay(100);
noTone(A5); //Wyłącz generowanie sygnału
delay(900);
tone(A5, 1000); //Wygeneruj sygnał o częstotliwości 1000Hz na pinie A5
delay(100);
noTone(A5); //Wyłącz generowanie sygnału
delay(900);
tone(A5, 1000); //Wygeneruj sygnał o częstotliwości 1000Hz na pinie A5
delay(100);
noTone(A5); //Wyłącz generowanie sygnału
delay(900);
tone(A5, 1000); //Wygeneruj sygnał o częstotliwości 1000Hz na pinie A5
delay(100);
noTone(A5); //Wyłącz generowanie sygnału
delay(900);
tone(A5, 1000); //Wygeneruj sygnał o częstotliwości 1000Hz na pinie A5
delay(100);
noTone(A5); //Wyłącz generowanie sygnału
delay(900);
tone(A5, 1000); //Wygeneruj sygnał o częstotliwości 1000Hz na pinie A5
delay(1000);
noTone(A5); //Wyłącz generowanie sygnału
data[0] = 70;
radio.write(data, sizeof(data));
delay(500);
}
Serial.println(data[0]);
Serial.println(data[1]);
}
Kod:
/*
Odbiornik radiowy poruszający servem zgodnie z poleceniami z nadajnika (Basic_Transmitter_Code_copy)
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h> // include the Servo library
Servo myServo1;
int data[2];
RF24 radio(9,10);//piny modułu NRF24L01
const uint64_t pipe = 0xF0F0F0F0D2L;
void setup()
{
myServo1.attach(5);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1, pipe);
radio.startListening();
}
void loop(){
if(radio.available()){
bool done = false;
while (!done) {
done = radio.read(data,sizeof(data));
if (data[1] == 170) {
myServo1.write(160);
} else {
myServo1.write(45);
}
}
}
if(radio.available()){
bool done = false;
while (!done) {
done = radio.read(data,sizeof(data));
if (data[0] == 70) {
myServo1.write(45);
delay(1500);
}
}
Serial.println(data[0]);
Serial.println(data[1]);
}
}