Помогите с кодом arduino + nrf24l01 + l298n + джойстик

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Hubll, 25 май 2015.

  1. Hubll

    Hubll Нуб

    Всем привет, делаю код для машинки на пульту arduino + nrf24l01 + l298n + джойстик. Сервопривод работает как нужно. А вот двигатель крутиться только в одну сторону, и только тогда когда джойстик в низ, когда джойстик вверх, то не крутиться вообще. Подскажите, что в коде не правильно.

    Передатчик.
    Код (Text):
    #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 = A1;
    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);
    }
    Приемник.
    Код (Text):
    #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 Y;                        // X axis = left/right
    int fspeed;          // forward speed
    int bspeed;          // backward speed
    const int in1 = 2;    // direction pin 1
    const int in2 = 4;    // direction pin 2
    const int ena = 5;    // PWM pin to change speed

    void setup()
    {
      pinMode(in1, OUTPUT);      // connection to L298n
      pinMode(in2, OUTPUT);      // connection to L298n
      pinMode(ena, OUTPUT);      // connection to L298n
    servo1.attach(3);
    delay(50);
    radio.begin();
    radio.openReadingPipe(1,pipe);
    radio.startListening();
    }

    void loop()
    {
     
    if (radio.available())radio.read(msg, 1);
    if (msg[0] <127 && msg[0] >-1)data = msg[0], pos = map(data, 0, 126, 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);
    }

     
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    1. Не пишите операторы через запятую. Одно выражение = одна строка.
    Если не хотите писать кучу строк, то вместо:
    Код (Text):
    val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1);
    пишите:
    Код (Text):
    msg[0] = map(analogRead(potpin_1), 0, 1023, 0, 127);
    radio.write(msg, 1);
    2.
    Код (Text):
    if (radio.available())
      radio.read(msg, 1);
    Даже если нет новых данных, код будет выполняться так, как будто они есть. Имейте это ввиду.
    3. В передатчике вставьте отладочный вывод передаваемых данных, а в приемнике - принимаемых. Сравните логи.
     
  3. Unixon

    Unixon Оракул Модератор

    Пишите через ";". ;)