Нужна помощь

Статус
В этой теме нельзя размещать новые ответы.

FIOCOL

✩✩✩✩✩✩✩
1 Мар 2021
5
0
Заголовок темы должен отражать содержимое. Отредактируй или ветка будет удалена
Здаров, народ. Есть скетч для машинки на ардуино. Связь через НРФ24. Проблема у меня такая: двигатель подключен к l298n(приемник), а на передатчике джойстик.
Двигатель не реагирует на него. В чем может быть причина? Сам я в программирование новичок.
C++:
#include <SPI.h>
#include "RF24.h"
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];
int potpin_1 = A0;
int val_1;
int potpin_2 = A2;
int val_2;
void setup(void){
radio.begin();
radio.openWritingPipe(pipe);
}
void loop() {
val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1);
val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 128, 255),msg[0] = val_2,radio.write(msg, 1);
}


#include <Servo.h>
#include <SPI.h>
#include "RF24.h"
Servo servo1;
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];
int data;
int pos;
int fspeed;         
int bspeed;           
const int in1 = 2;   
const int in2 = 4;   
const int ena = 5;   
void setup(){
pinMode(in1, OUTPUT);     
pinMode(in2, OUTPUT);     
pinMode(ena, OUTPUT); 
servo1.attach(3);

radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop(){

if (radio.available())radio.read(msg, 1);
if (msg[0] <128 && msg[0] >-1)data = msg[0], pos = map(data, 0, 127, 7, 177),servo1.write(pos);
if (msg[0] >129 && msg[0] <189)data = msg[0], fspeed = map(data, 189, 129, 0, 255); forward(fspeed);
if (msg[0] >201 && msg[0] <255)data = msg[0], bspeed = map(data, 255, 201, 0, 255); backward(bspeed);
if (msg[0] >190 && msg[0] <200)data = msg[0], stop();
}

void stop(){
analogWrite(ena, 0);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
}

  

  void forward(int fspeed){
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(ena, fspeed);
}

  

void backward(int bspeed){
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(ena, bspeed);
}
 

Nikanor

★★✩✩✩✩✩
1 Окт 2020
178
51
а почему не спросите там, где этот код взяли ?
 

FIOCOL

✩✩✩✩✩✩✩
1 Мар 2021
5
0
а почему не спросите там, где этот код взяли ?
Потому что этот код слепил сам я, основываясь на разных сайтах. Сервопривод(который тоже подключён в эту схему, работает как надо), а вот двигатель нет
 

Nikanor

★★✩✩✩✩✩
1 Окт 2020
178
51
пропишите в программу приёмника сериал и в мониторе порта смотрите что у вас происходит.
 

bort707

★★★★★★✩
21 Сен 2020
3,066
915
@FIOCOL, кто вас научил писать кучу операторов в одну строчку через запятую, вот так:
C++:
val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1);
val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 128, 255),msg[0] = val_2,radio.write(msg, 1);
это же бредятина.
Совет - пока вы четко не будете понимать, что вы делаете - пишите по одному оператору в строке и запятой не пользуйтесь вовсе.

Что касается вашей проблемы - вы пытаетесь запихать показания двух джойстиков в одну переменную msg[0] - зачем так сложно?
Это не единственная ошибка... но начните хотя бы с этого

И еще вопрос - что двигатель у вас? Подача аналогового сигнала на пины EN - это для щеточных моторов, а с ардуино обычно используются шаговые, там алгоритм управления другой
 
Изменено:

FIOCOL

✩✩✩✩✩✩✩
1 Мар 2021
5
0
@FIOCOL, кто вас научил писать кучу операторов в одну строчку через запятую, вот так:
C++:
val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1);
val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 128, 255),msg[0] = val_2,radio.write(msg, 1);
это же бредятина.
Совет - пока вы четко не будете понимать, что вы делаете - пишите по одному оператору в строке и запятой не пользуйтесь вовсе.

Что касается вашей проблемы - вы пытаетесь запихать показания двух джойстиков в одну переменную msg[0] - зачем так сложно?
Это не единственная ошибка... но начните хотя бы с этого

И еще вопрос - что двигатель у вас? Подача аналогового сигнала на пины EN - это для щеточных моторов, а с ардуино обычно используются шаговые, там алгоритм управления другой
У меня щеточный мотор
 

FIOCOL

✩✩✩✩✩✩✩
1 Мар 2021
5
0
Привет. Переписал скетч, но проблема таже: не реагирует двигатель на джойстик. Что не так?

C++:
//ПЕРЕДАТЧИК
#include <SPI.h>
#include "RF24.h"
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
byte massiv[2];
int potpin_1 = A0;
int potpin_2 = A2;
void setup(void){
radio.begin();
radio.openWritingPipe(pipe);
}
void loop() {
massiv[0] =map( analogRead(potpin_1), 0, 1023, 0, 127);
radio.write(&massiv,1, sizeof(massiv,1));
massiv[1] = map(analogRead(potpin_2), 0, 1023, 128, 255);
radio.write(&massiv,1, sizeof(massiv,1));

}
//ПРИЕМНИК

#include <Servo.h>
#include <SPI.h>
#include "RF24.h"
Servo servo1;

RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int massiv[2];
int serv;

const int in1 = 2; 
const int in2 = 4;   
const int ena = 5;
int fspeed;         
int bspeed;
void setup()
{
pinMode(in1, OUTPUT);     
pinMode(in2, OUTPUT);   
pinMode(ena, OUTPUT);   
servo1.attach(3);
delay(50);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}

void loop(){
if (radio.available()){
    radio.read(&massiv,sizeof (massiv));}


if (massiv[0] < 127 && massiv [0] > -1);
    serv = map(massiv[0], 0, 126, 7,177 );
servo1.write(serv);


if (massiv[0] >129 && massiv[0] <189);
   fspeed = map(massiv[0], 189, 129, 0, 255);
forward(fspeed);
if (massiv[0] >201 && massiv[0] <255);
   bspeed = map(massiv[0], 255, 201, 0, 255);
backward(bspeed);
if (massiv[0] >190 && massiv[0] <200);
    stop();
}
 void stop()
{
  analogWrite(ena, 0);
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
}

void forward(int fspeed)
{
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  analogWrite(ena, fspeed);
}

void backward(int bspeed)
{
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  analogWrite(ena, bspeed);
}
 

bort707

★★★★★★✩
21 Сен 2020
3,066
915
Переписал скетч, но проблема таже: не реагирует двигатель на джойстик. Что не так?
переписали - стало еще хуже. Раньше вы сохранаяли данные обоих джойстиков в один элемент массива, теперь - в разные. но отправляете в эфир непонятно что.
У меня такое впечатление, что вы код методом тыка пишете. Написал один оператор, проверил - не работает, заменил на другой.
Например. в строчках 15 и 17 написан лютый бред.
Заглянули бы в код библиотеки - для чего и какие парметры нужны оператору radio.write() - и потом сравните, что у вас написано в коде.
Понимаете, программу надо писать не рыская в гугле в поисках готового кода - а изучая учебники по языку и описания библиотек.
 
Статус
В этой теме нельзя размещать новые ответы.