РУКОДЕЛКИ Не работает код для управления лодкой помогите

hIIz0

✩✩✩✩✩✩✩
15 Мар 2023
3
0
Оформи код соответствующим тэгом
#define IR_1 0xA2
#define IR_2 0x62
#define IR_0 0x98
#define IR_UP 0x18
#define IR_LEFT 0x10
#define IR_OK 0x38
#define IR_RIGHT 0x5A
#define IR_DOWN 0x4A
#define MOTOR_PIN 10
int M=45;
int motorSpeed = 0;

#include <NecDecoder.h>
NecDecoder ir;
#include "Servo.h" // подключаем библиотеку для серво
Servo myservo;
void setup() {
pinMode(MOTOR_PIN, INPUT);
Serial.begin(9600);
attachInterrupt(0, irIsr, FALLING);
myservo.attach(9); // указываем пин для подключения серво
myservo.write(45);
}
void irIsr() {
ir.tick();
}
void loop() {
if (ir.available()) {
switch (ir.readCommand()) {
// выводим в порт, тут может быть ваш код
case IR_1: Serial.println(M); if (M<90) {M=M+5; myservo.write(M); break;} else {break;}
case IR_2: Serial.println(M); if (M>0) {M=M-5; myservo.write(M); break;} else {break;}
case IR_0: myservo.write(45); M=45;
case IR_UP:Serial.print(motorSpeed);if (digitalWrite(IR_UP, motorSpeed);motorSpeed += 30);{
case IR_OK:digitalWrite(MOTOR_PIN,0);
if (motorSpeed > 255) {
motorSpeed = 255;
} else if (motorSpeed < 0) {
motorSpeed = 0;
}
}
}
}
}
вот такой код я не понимаю почему не работает управление мотором
 

Alex_HF

★✩✩✩✩✩✩
11 Мар 2023
40
16
1. pinMode(MOTOR_PIN, INPUT); <- надо на выход
2. case IR_UP: ... if (digitalWrite(IR_UP, motorSpeed);motorSpeed += 30);{
пишите в порт с пином IR_UP - к мотору не имеет никакого отношения
3. Явно косяк в фигурных скобках начиная с case IR_UP
4. нет break после case IR_0
5. нет уменьшения скорости IR_DOWN
6. скорость регулируется шимом

Пробуйте:
C++:
void loop() {
    if (ir.available()) {
        switch (ir.readCommand()) {
            case IR_1:
                M += 5;
                Serial.println(M);
                if (M > 90) {
                    M = 90;
                }
                myservo.write(M);
                break;
            case IR_2:
                M -= 5;
                Serial.println(M);
                if (M < 0) {
                    M = 0;
                }
                myservo.write(M);
                break;
            case IR_0:
                M = 45;
                myservo.write(M);
                break;
            case IR_UP:
                motorSpeed += 30;
                Serial.print(motorSpeed);
                break;
            case IR_DOWN:
                motorSpeed -= 30;
                Serial.print(motorSpeed);
                break;
            case IR_OK:
                motorSpeed = 0;
                break;
        }
    }

    if (motorSpeed > 255) {
        motorSpeed = 255;
    } else if (motorSpeed < 0) {
        motorSpeed = 0;
    }

    analogWrite(MOTOR_PIN, motorSpeed);
}
 

hIIz0

✩✩✩✩✩✩✩
15 Мар 2023
3
0
А нет случайно схемы подключения, не понимаю до конца как должно быть подключено
 

Alex_HF

★✩✩✩✩✩✩
11 Мар 2023
40
16

резистор 100 Ом подключить к пину MOTOR_PIN
ну а серву соответственно к 9
 

hIIz0

✩✩✩✩✩✩✩
15 Мар 2023
3
0
Оформи код соответствующим тэгом
Пришлось немного забросить проект, но сейчас возвращаюсь ю
Почему то ,мотор включается но не добавляет скорость , включился на 30 и всё , в сериал мониторе пишет то что прибавляется , но ничего не происходит . Выглядит примерно так 30609060300 и все в одну строчку . Пожалуйста помогите


Вот код:

#define IR_1 0xA2
#define IR_2 0x62
#define IR_0 0x98
#define IR_UP 0x18
#define IR_LEFT 0x10
#define IR_OK 0x38
#define IR_RIGHT 0x5A
#define IR_DOWN 0x4A
#define MOTOR_PIN 10
int M=45;
int motorSpeed = 0;

#include <NecDecoder.h>
NecDecoder ir;
#include "Servo.h" // подключаем библиотеку для серво
Servo myservo;
void setup() {
pinMode(MOTOR_PIN, INPUT);
Serial.begin(9600);
attachInterrupt(0, irIsr, FALLING);
myservo.attach(9); // указываем пин для подключения серво
myservo.write(45);
}
void irIsr() {
ir.tick();
}
void loop() {
if (ir.available()) {
switch (ir.readCommand()) {
// выводим в порт, тут может быть ваш код
case IR_1: Serial.println(M); if (M<90) {M=M+5; myservo.write(M); break;} else {break;}
case IR_2: Serial.println(M); if (M>0) {M=M-5; myservo.write(M); break;} else {break;}
case IR_0: myservo.write(45); M=45;
case IR_UP:
motorSpeed += 30;
Serial.print(motorSpeed);

break;

case IR_DOWN:
motorSpeed -= 30;
Serial.print(motorSpeed);

break;

case IR_OK:
motorSpeed = 0;
break;
}
}
if (motorSpeed > 255) {
motorSpeed = 255;
} else if (motorSpeed < 0) {
motorSpeed = 0;
}
digitalWrite(MOTOR_PIN, motorSpeed);
}