Помогите дописать скетч

wawa
Offline
Зарегистрирован: 26.01.2017

Помогите подправить код так, чтоб нажал отпустил  кнопку подключенную к D4 передатчика  выход А0 приемника ставал высоким. Еще раз нажал отпустил низким. Пока только работает так, нажал  А0 высокий уровень отпустил низкий.

Передатчик

[code]
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN 9
#define CSN_PIN 10
const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN, CSN_PIN);
int datos[4];

void setup(void)
{
  radio.begin();
  radio.openWritingPipe( pipe);
  Serial.begin(9600);
  pinMode(4, INPUT);
  digitalWrite(4, HIGH);

  
}
void loop() {
  datos[0] = analogRead(1);
  datos[1] = analogRead(0);
  datos[2] = analogRead(4);//крутилка ствола
  datos[2] = map(datos[2],0,1023,0,180);
  datos[3] = digitalRead(4);//кнопка D4 
  bool ok = radio.write(datos, sizeof(datos));
  Serial.println(datos[0]);

}

[/code]

Приемник

[code]
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
Servo myservo1;
const uint64_t pipe = 0xE8E8F0F0E1LL;
#define CE_PIN 9
#define CSN_PIN 10
RF24 radio(CE_PIN, CSN_PIN);
int datos[4];
int pwm = 0;
bool directionL;
bool directionR; // направление вращение для L298N

byte valueL;
byte valueR; // значение ШИМ M1, M2 (0-255)

int mLeft;
int mRight;
long time = 0;
long debounce = 300;
int pos;
int fspeed; // движение вперед
int bspeed; // движение назад
int steer;
const int in1 = 7; // direction pin 1
const int in2 = 6; // direction pin 2
const int in3 = 4; // direction pin 1
const int in4 = 2; // direction pin 2
const int ena = 5; // PWM pin to change speed
const int enb = 3;
byte IsConnect;
void setup()
{
  pinMode(in1, OUTPUT); // connection to L298n
  pinMode(in2, OUTPUT); // connection to L298n
  pinMode(ena, OUTPUT); // connection to L298n
  pinMode(in3, OUTPUT); // connection to L298n
  pinMode(in4, OUTPUT); // connection to L298n
  pinMode(enb, OUTPUT); // connection to L298n
  pinMode(14, OUTPUT);
  myservo1.attach(8);
  radio.begin();
  Serial.begin(9600);
  radio.openReadingPipe(1, pipe);
  radio.startListening();
}

int MotoL, MotoR;
int ValStickX, ValStickY;

void loop() {
  uint8_t numero_canal;
  if ( radio.available())
  {
    radio.read(datos, sizeof(datos));
    IsConnect = HIGH;
  }
  else{
    IsConnect = LOW;
  }
  myservo1.write(datos[2]);
  digitalWrite(14, !datos[3]);
   
                        
    int val_x = datos[0];
    int val_y = datos[1];
   
    ValStickX = map(val_x, 0, 1023, 254, -254);
    ValStickY = map(val_y, 0, 1023, 254, -254);

    if (abs(ValStickX) < 20) {
      ValStickX = 0;
    }
    if (abs(ValStickY) < 20) {
      ValStickY = 0;
    }

    MotoL = ValStickY - (ValStickX / 1.2);
    MotoR = ValStickY + (ValStickX / 1.2);
   
    if (IsConnect == LOW){MotoL = 0;}
    if (IsConnect == LOW){MotoR = 0;}
    
    if (MotoL > 255) {
      MotoL = 255;
    }
    if (MotoR > 255) {
      MotoR = 255;
    }
    if (MotoL < -255) {
      MotoL = -255;
    }
    if (MotoR < -255) {
      MotoR = -255;
    }
Serial.println(mLeft);
  if (MotoL > 0) 
  {
    valueL = MotoL;
    directionL = 0;
  }
  else if (MotoL < 0) 
  {
    valueL = abs(MotoL);
    directionL = 1;
  }
  else 
  {
    directionL = 0;
    valueL = 0;
  }

  if (MotoR > 0) {
    valueR = MotoR;
    directionR = 0;
  }
  else if (MotoR < 0) {
    valueR = abs(MotoR);
    directionR = 1;
  }
  else {
    directionR = 0;
    valueR = 0;
  }

  digitalWrite(in1, directionR);
  digitalWrite(in2, !directionR);
  digitalWrite(in3, directionL);
  digitalWrite(in4, !directionL);
  analogWrite(ena, valueL);
  analogWrite(enb, valueR);
  
}

[/code]

 

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

wawa пишет:

Помогите подправить код так, чтоб нажал отпустил  кнопку подключенную к D4 передатчика  выход А0 приемника ставал высоким. Еще раз нажал отпустил низким. Пока только работает так, нажал  А0 высокий уровень отпустил низкий.

А волжебное слово? Вам тут кто-то задолжал?

Кроме того, перечитайте свой текст. Вы его сами понимаете? Что, например, за кнопка такая "подключенная к D4 передатчика" и что за передатчик к D4 которого подключена кнопка?

wawa
Offline
Зарегистрирован: 26.01.2017

Извигите помогите будьте добры. Это  скетчи для апаратуры радоуправления. А кнопка без фиксации(В ардуинском джойстике)

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

Так Вы именно так и написали в строке 64. Если на кнопке в данный момент LOW, то Вы выдаёте на пин 14 HIGH. Всё так и должно быть.

Конкретизируйте что надо, а то Ваш текст непонятен обсолютно.

Вы хотите изменять состояние пина 14 по отпусканию кнопки, так? Нажал, держу, ничего не менеятся, отпустил - состояние пина 14 изменилось на протиположное. Так или нет?

wawa
Offline
Зарегистрирован: 26.01.2017

Да! Нажал отпустил пин 14 на противоположное.

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

Ну, так и делайте. Храните в передатчкие старое состояние кнопки. Изначально "ненажата". После чтения пакет проверяёте условие, что старое состояние "нажата", а новое - "не нажата" и только в этом случае меняёте состояние пина. А только прочитанное состояние запоминать в старом.

Понимаете. как это написать?

wawa
Offline
Зарегистрирован: 26.01.2017

Смутно. Переменные надо вводить в приемнике и передатчике? Может пример какой подскажите. Код не мой потихоньку вникаю. Кнопку сам прописал но мне надо как я вам выше писал.

wawa
Offline
Зарегистрирован: 26.01.2017

Вас Женя зовут? Меня Василий. Может за какуюто символическую плату допишите пару строчек. 

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

Ну, вставьте после 53 строки запоминание

static int8_t buttonState = LOW; 

а вместо строки 64 что-нибудь вроде

if (buttonState == HIGH && datos[3] == LOW) digitalWrite(14, ! digitalRead(14));
buttonState = datos[3];

Да, забыл спросить. Когда запустилась программа и кнопку ещё никто не трогал, она у Вас LOW? Если LOW - то всё правильно, а если HIGH, то везде в моё1м примере поменяйте LOW на HIGH и наоборот. 

Собственно, всё.

wawa
Offline
Зарегистрирован: 26.01.2017

Кудесник!!! Все работает!

static int8_t buttonState = LOW; 

А этот код для еще оной кнопки можно применить, что он значит. Я вас могу отблагодарить? Извините за нескромность у меня серва подключена 8 пин приемника.  В передатчике пин А4(резистор переменный 10Ком) управление. Сервопривод самый дешовый SG90 . Все работает(поворачивается) но серва дергается когда стоит. Выключаю передатчик сервопривод стоит спокойно. Питание отдельное пробовал на серву с общим минусом безрезультатно. Это в коде проблемы или серва такая(серву менял)?

Приемник(но сервопривод здесь не показан)

 

bwn
Offline
Зарегистрирован: 25.08.2014

wawa пишет:

Вас Женя зовут? Меня Василий.

Мдя, вы отчество то добавьте, а то Жене к вам и обращаться неудобно будет.(((((

wawa
Offline
Зарегистрирован: 26.01.2017

Спасибо! Можно тему закрывать.