Управление по nrl24l01

froggi3
Offline
Зарегистрирован: 23.08.2016

Добрый день! Есть скетч по управлению по каналу 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);
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А Вы не хотите написать

1) а как он должен себя вести? Откуда нам знать, чего Вы от него хотите?

2) в каких строках кода Вы с ним работаете и что именно делаете?

froggi3
Offline
Зарегистрирован: 23.08.2016

На передатчике пин7...требуется чтобы диод зажигался по нажатию кнопки и гас при отжатии. На приемнике диод на пин4.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

До п.2 в моём посте не дочитали? Или лень по клавишам бить?

Если бы Вы начали объяснять, что Вы делаете (как Вас просили), Вы бы давно заметили бред в строке №73 - что Вы там читаете с пина №0 (или 1) и зачем?

Впрочем, если Вам неохота писать что и как и вообще, решать проблему, то остальным и подавно это нафиг не нужно.

froggi3
Offline
Зарегистрирован: 23.08.2016

в программировании не очень силен, скетч нашел в сети. и потому по пункту №2 не дал каких либо четких пояснений. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

froggi3 пишет:

в программировании не очень силен, скетч нашел в сети. и потому по пункту №2 не дал каких либо четких пояснений. 

В таком случае, боюсь, я не смогу помочь. В строке №73 написан какой-то бред. Автор, наверное, обкурился когда писал. Что он имел в виду и что хотел сделать я не знаю.