rc машинка на ардуино нано

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Иваныч ардуинщик, 20 ноя 2016.

  1. Проект радиоуправляемой машинки на ардуино нано.Управление по nrf24L01.Не загружается скетч!
    #include <Servo.h>
    #include <SPI.h>
    #include "RF24.h"
    Servo servo1;

    RF24 radio(9,10);
    const uint64_t pipe = 0xF0F0F0F000LL;
    int msg[1];
    int data;
    int pos;
    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, 67),servo1.write(pos);


    if (msg[0] >=128 && msg[0] <=189)data = msg[0], bspeed = map(data, 255, 201, 0, 255), backward(bspeed);
    if (msg[0] >=201 && msg[0] <=255)data = msg[0], fspeed = map(data, 189, 128, 0, 255), forward(fspeed);
    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);
    }
    Вот. if (msg[0] >=128 && msg[0] <=189)data = msg[0], bspeed = map(data, 255, 201, 0, 255), backward(bspeed);-эта строчка выделена красным,хз почему.
    а вот что пишет прога:
    C:\Users\Администратор\AppData\Local\Temp\sketch_priemnik-korablik-02\sketch_priemnik-korablik-02.ino: In function 'void loop()':

    sketch_priemnik-korablik-02:36: error: 'backward' was not declared in this scope

    sketch_priemnik-korablik-02:37: error: 'forward' was not declared in this scope

    sketch_priemnik-korablik-02:38: error: 'stop' was not declared in this scope

    exit status 1
    'backward' was not declared in this scope
    Помогите пожалуйста.
    Если есть скетчи rc машинок,то скиньте пожалуйста.
     
  2. ostrov

    ostrov Гуру

    Код (C++):
    //  tag code
     
  3. ZAZ-965

    ZAZ-965 Гуру

    @Иваныч ардуинщик, определите функции раньше их использования
    Код (C++):
    #include <Servo.h>
    #include <SPI.h>
    #include "RF24.h"
    Servo servo1;

    RF24 radio(9,10);
    const uint64_t pipe = 0xF0F0F0F000LL;
    int msg[1];
    int data;
    int pos;
    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 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);
    }

    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, 67),servo1.write(pos);


    if (msg[0] >=128 && msg[0] <=189)data = msg[0], bspeed = map(data, 255, 201, 0, 255), backward(bspeed);
    if (msg[0] >=201 && msg[0] <=255)data = msg[0], fspeed = map(data, 189, 128, 0, 255), forward(fspeed);
    if (msg[0] >190 && msg[0] <200)data = msg[0], stop();
    }
     
    З.Ы. Win 7, IDE 1.6.11 - если имя пользователя латиницей, компилируется скетч из первого поста, если кириллицей, только при предварительном объявлении\определении функций. Историческую связь вижу в этом я - сперва "Иду на вы", опосля - Шит на вратах Царьграда.
     
  4. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (C++):
    if (msg[0] <127 && msg[0] >-1)data = msg[0], pos = map(data, 0, 126, 7, 67),servo1.write(pos);
     
    это работать будет, но совсем не так, как задумано.
     
    Папа нравится это.