Преобразовать код 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 актив.
}
@bopele, 👍0
Обсуждение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 В.
- Arduino Due vs Mega 2560
- Arduino Uno: avrdude: stk500_recv(): программатор не отвечает
- Программирование Arduino на Паскале?
- Bluetooth-модуль HC-05 не принимает AT-команды
- Я могу отправлять на software serial, но не прочитать?
- Использование модуля Bluetooth HC-08 с arduino
- Преобразование случайных двоичных данных в сигнал ШИМ
- Что быстрее, чем Ардуино Мега?
Почему вы вообще использовали SoftwareSerial на Mega?!, @Majenko
Вы разместили почти 300 строк кода без объяснения того, что он делает, и задали очень широкий, открытый вопрос «как конвертировать». В коде также есть только пара комментариев, и они не на английском языке. Вам необходимо предоставить подробное описание того, что делает ваша программа, с каким оборудованием она взаимодействует, какие линии ввода-вывода она использует и какие специфические для MEGA функции она использует., @Duncan C
Вы также должны добавить подробные комментарии к своему коду, _на английском_, чтобы ваши читатели могли понять, что он делает. Кроме того, вам нужно попытаться переписать свой скетч самостоятельно, протестировать его, а затем опубликовать ответ с просьбой помочь с обнаруженной проблемой., @Duncan C