Преобразовать код Arduino MEGA в код Arduino DUE?

Я уже работал с MEGA. Этот код полностью работает с MEGA. Я все еще на начальном уровне в Arduino.

Вопрос Как адаптировать этот код к DUE?

Примечание. Я задаю этот вопрос, потому что считаю, что единственная проблема адаптации заключается в SoftwareSerial.

#include <SoftwareSerial.h>
SoftwareSerial bluetooth(52,53);    // TX, RX
int bar_analog=0;                                    
int head_analog=0;
int bar_anim=0;
int strip_anim=0;
int motor_speed=1;
int direct=0;
int level=0;
boolean debug = true;
int IN1a=49;
int IN2a=48;
int PWM1=3;
int IN1b=22;
int IN2b=23;
int PWM2=4;
int hiz=100;
int PWM_kare=2;
int INA_kare = 51;  
int INB_kare = 50; //LED '+'sı OUTPUT B'de olduğu için INB'yi HIGH yapıyoruz.
void m1_cw() {
    digitalWrite(IN1a,HIGH);
    digitalWrite(IN2a,LOW);
    analogWrite(PWM1,hiz);
}
void m1_ccw() {
    digitalWrite(IN1a,LOW);
    digitalWrite(IN2a,HIGH);
    analogWrite(PWM1,hiz);
}
void m2_cw() {
    digitalWrite(IN1b,HIGH);
    digitalWrite(IN2b,LOW);
    analogWrite(PWM2,hiz);
}
void m2_ccw() {
    digitalWrite(IN1b,LOW);
    digitalWrite(IN2b,HIGH);
    analogWrite(PWM2,hiz);
}
void m1_stop() {
    digitalWrite(IN1a,LOW);
    digitalWrite(IN2a,LOW);
    analogWrite(PWM1,0);
}
void m2_stop() {
    digitalWrite(IN1b,LOW);
    digitalWrite(IN2b,LOW);
    analogWrite(PWM2,0);
}
void mast_up() {
    digitalWrite(24,HIGH);
    digitalWrite(25,LOW);
}
void mast_down() {
    digitalWrite(24,LOW);
    digitalWrite(25,HIGH);
}
void mast_stop() {
    digitalWrite(24,LOW);
    digitalWrite(25,LOW);
}
void kare() {
    analogWrite(PWM_kare,head_analog);
    digitalWrite(INB_kare, HIGH);
    digitalWrite(INA_kare, LOW);
}
void setup() {
    Serial.begin(9600);                              
    bluetooth.begin(9600);                           
    Serial.println("Program is starting...");              
    Serial.println("by Berke Ogulcan Parlak"); 
    pinMode(IN1a,OUTPUT);
    pinMode(IN2a,OUTPUT);
    pinMode(IN1b,OUTPUT);
    pinMode(IN2b,OUTPUT);
    pinMode(PWM1,OUTPUT);
    pinMode(PWM2,OUTPUT);
    pinMode(24,OUTPUT);
    pinMode(25,OUTPUT);
    pinMode(INA_kare, OUTPUT);
    pinMode(INB_kare, OUTPUT);
    pinMode(PWM_kare, OUTPUT);
    digitalWrite(IN1a,LOW);
    digitalWrite(IN2a,LOW);
    digitalWrite(IN1b,LOW);
    digitalWrite(IN2b,LOW);
    digitalWrite(PWM1,LOW);
    digitalWrite(PWM2,LOW);  
    digitalWrite(24,LOW);
    digitalWrite(25,LOW);
    digitalWrite(INA_kare, LOW);
    digitalWrite(INB_kare, LOW);
    digitalWrite(PWM_kare, LOW); 
}

void loop() {
    if (bluetooth.available()) {
        while (bluetooth.available())                    
        {                                                // Мы назначаем данные, полученные из AppInventor, переменным.
            bar_analog = bluetooth.parseInt();              
            head_analog = bluetooth.parseInt();
            bar_anim = bluetooth.parseInt();
            strip_anim = bluetooth.parseInt();
            motor_speed = bluetooth.parseInt();
            direct = bluetooth.parseInt();
            level = bluetooth.parseInt();
            if (debug) {                                   // Требуется для чтения значений с последовательного экрана Arduino.
                Serial.print("Bar Brightness: ");                        
                Serial.println(bar_analog);
                Serial.print("Bar Animation Type: ");
                Serial.println(bar_anim);
                Serial.print("Headlight Brightness: ");
                Serial.println(head_analog);
                Serial.print("Strip Animation Type: ");
                Serial.println(strip_anim);
                Serial.print("Motor Speed Level: ");
                Serial.println(motor_speed);
                Serial.print("Direction: ");
                Serial.println(direct);
                Serial.print("Mast Goes: ");
                Serial.println(level);
                Serial.println("--------------------------------");
            }
            if (bluetooth.read() == '\n') {               // В этой строке будет выполняться печать..

            }
        }}
    if(direct==1) { //вперед
        m1_ccw();
        m2_ccw(); 
    }
    else if(direct==2) { //назад
        m1_cw();
        m2_cw(); 
    }
    else if(direct==3) { //слева
        m1_ccw();
        m2_cw(); 
    }
    else if(direct==4) { //правильно
        m1_cw();
        m2_ccw(); 
    }
    else if(direct==0) { // прочно
        m1_stop();
        m2_stop(); 
    }
    if(level==1) { //мачта юкары
        mast_up(); 
    }
    else if(level==2) { //мачта aşağı
        mast_down(); 
    }
    else if(level==0) { //долговечность мачты
        mast_stop(); 
    }
    kare();            //каре LED актив.
}

, 👍0

Обсуждение

Почему вы вообще использовали SoftwareSerial на Mega?!, @Majenko

Вы разместили почти 300 строк кода без объяснения того, что он делает, и задали очень широкий, открытый вопрос «как конвертировать». В коде также есть только пара комментариев, и они не на английском языке. Вам необходимо предоставить подробное описание того, что делает ваша программа, с каким оборудованием она взаимодействует, какие линии ввода-вывода она использует и какие специфические для MEGA функции она использует., @Duncan C

Вы также должны добавить подробные комментарии к своему коду, _на английском_, чтобы ваши читатели могли понять, что он делает. Кроме того, вам нужно попытаться переписать свой скетч самостоятельно, протестировать его, а затем опубликовать ответ с просьбой помочь с обнаруженной проблемой., @Duncan C


1 ответ


1

SoftwareSerial — это обходной путь для версий Arduino без достаточного количества аппаратных последовательных портов, чего нельзя сказать о Arduino Mega или Arduino Uno, у которых их 4.

Удалите SoftwareSerial, замените все вхождения bluetooth на Serial1 и переподключите последовательную связь с контактов 52. |53 на контакты 18|19 вместо (TX|RX)

Кроме того, компилятор Arduino Due более «строгий», чем компилятор Arduino Mega.

Кроме того, ваш код скомпилируется без проблем.

Кроме того, помните, что напряжение Arduino Due составляет 3,3 В, а не 5 В.

,