Управление по nrl24l01
- Войдите на сайт для отправки комментариев
Пнд, 02/07/2018 - 09:11
Добрый день! Есть скетч по управлению по каналу nrl24l01. Три канала - серва, мотор с реверсом и светодиод. нашел вот такой ваиант, работу сервы и мотора настроил в скетче как надо. работает как положено. а вот со светодиодом непонятки. мигает просто, на нажатие кнопки на пульте не реагирует. подскажите что не так в коде.
Передатчик
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
#define CE_PIN 9
#define CSN_PIN 10
const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN, CSN_PIN);
int datos[3];
int but=7;
Servo myservo;
int pot_x = 1;
int val_x;
void setup()
{
pinMode(7, INPUT);
pinMode(pot_x, INPUT);
radio.begin();
Serial.begin(9600);
radio.openWritingPipe(pipe);
}
void loop()
{
datos[0] = analogRead(0);
datos[1] = digitalRead(7);
val_x = analogRead(pot_x);
datos[2] = val_x;
bool ok = radio.write(datos, sizeof(datos));
if (ok)
{
Serial.println(datos[0]);
}
Serial.println(pot_x);
}
Приемник
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
const uint64_t pipe = 0xE8E8F0F0E1LL;
#define CE_PIN 9
#define CSN_PIN 10
RF24 radio(CE_PIN, CSN_PIN);
int datos[3];
int ENB = 5;
int IN4 = 6;
int IN3 = 7;
int led = 4;
long time = 0;
long debounce = 300;
boolean ledOn = false;
boolean lastBut = HIGH;
Servo servo;
void setup()
{
radio.begin();
Serial.begin(9600);
radio.openReadingPipe(1, pipe);
radio.startListening();
pinMode(ENB, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(led, OUTPUT);
int val_led = 0;
servo.attach(3);
}
void loop() {
uint8_t numero_canal;
if ( radio.available() )
{
radio.read(datos, sizeof(datos));
int val = datos[0];
int val1;
val1 = map(val, 0, 1023, 254, -254);
if (val1 >= 0)
{
analogWrite(ENB, val1);
digitalWrite(IN4, LOW);
digitalWrite(IN3, HIGH);
}
else
{
val1 = abs(val1);
analogWrite(ENB, val1);
digitalWrite(IN4, HIGH);
digitalWrite(IN3, LOW);
}
Serial.print("data: ");
Serial.println(val1);
}
if (datos[1] == 0 && lastBut == HIGH && millis() - time > debounce) // Управление светодиодом
{
ledOn = !ledOn;
lastBut = HIGH;
time = millis();
}
else
{
lastBut = digitalRead(lastBut);
}
digitalWrite(led, ledOn);
int ledval = datos[1];
int leds=abs(ledval);
Serial.println(ledOn);
digitalWrite(led,leds);
int val_x = datos[2];
val_x = map(val_x, 0, 1023, 0, 170);
Serial.println(datos[2]);
servo.attach(3);
servo.write(val_x);
Serial.println(val_x);
}
А Вы не хотите написать
1) а как он должен себя вести? Откуда нам знать, чего Вы от него хотите?
2) в каких строках кода Вы с ним работаете и что именно делаете?
На передатчике пин7...требуется чтобы диод зажигался по нажатию кнопки и гас при отжатии. На приемнике диод на пин4.
До п.2 в моём посте не дочитали? Или лень по клавишам бить?
Если бы Вы начали объяснять, что Вы делаете (как Вас просили), Вы бы давно заметили бред в строке №73 - что Вы там читаете с пина №0 (или 1) и зачем?
Впрочем, если Вам неохота писать что и как и вообще, решать проблему, то остальным и подавно это нафиг не нужно.
в программировании не очень силен, скетч нашел в сети. и потому по пункту №2 не дал каких либо четких пояснений.
в программировании не очень силен, скетч нашел в сети. и потому по пункту №2 не дал каких либо четких пояснений.
В таком случае, боюсь, я не смогу помочь. В строке №73 написан какой-то бред. Автор, наверное, обкурился когда писал. Что он имел в виду и что хотел сделать я не знаю.