Effacer les filtres
Effacer les filtres

can somebody help me to translate this Arduino code to Matlab?

4 vues (au cours des 30 derniers jours)
Guillermo Garcia_R
Guillermo Garcia_R le 24 Nov 2017
Réponse apportée : Pratik le 11 Juin 2024
// DECLARACION DE VARIABLES PARA PINES
const int pinecho = 4;
const int pintrigger = 5;
const int pinled = 13;
// Motor A
int IN1 = 8;
int IN2 = 9;
// Motor B
int IN3 = 6;
int IN4 = 7;
int TIempo=0;
// VARIABLES PARA CALCULOS
unsigned int tiempo, distancia;
void setup() {
// PREPARAR LA COMUNICACION SERIAL
Serial.begin(9600);
// CONFIGURAR PINES DE ENTRADA Y SALIDA
pinMode(pinecho, INPUT); % DUDA
pinMode(pintrigger, OUTPUT);
pinMode(13, OUTPUT);
// inicializar la comunicación serial a 9600 bits por segundo:
Serial.begin(9600);
// Declaramos todos los pines como salidas
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
}
void loop() {
// ENVIAR PULSO DE DISPARO EN EL PIN "TRIGGER"
digitalWrite(pintrigger, LOW);
delayMicroseconds(2);
digitalWrite(pintrigger, HIGH);
// EL PULSO DURA AL MENOS 10 uS EN ESTADO ALTO
delayMicroseconds(2);
digitalWrite(pintrigger, LOW);
// MEDIR EL TIEMPO EN ESTADO ALTO DEL PIN "ECHO" EL PULSO ES PROPORCIONAL A LA DISTANCIA MEDIDA
tiempo = pulseIn(pinecho, HIGH);
// LA VELOCIDAD DEL SONIDO ES DE 340 M/S O 29 MICROSEGUNDOS POR CENTIMETRO
// DIVIDIMOS EL TIEMPO DEL PULSO ENTRE 58, TIEMPO QUE TARDA RECORRER IDA Y VUELTA UN CENTIMETRO LA ONDA SONORA
distancia = tiempo / 58;
// ENVIAR EL RESULTADO AL MONITOR SERIAL
Serial.print(distancia);
Serial.println(" cm");
delay(150);
// ENCENDER EL LED CUANDO SE CUMPLA CON CIERTA DISTANCIA
if (distancia <= 20) {
digitalWrite(13, HIGH);
delay(300);
} else {
digitalWrite(13, LOW);
//apagar el carro
void frenado ();
if (distancia <=20) {
digitalWrite(13, HIGH);
//Direccion motor A
digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
//Direccion motor B
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
}
}
if (Serial.available()) {
char dato= Serial.read();
if(dato=='a')
{
Adelante();
TIempo=0;
}
else if(dato=='r')
{
Reversa();
TIempo=0;
}
else if(dato=='d')
{
Derecha();
TIempo=0;
}
else if(dato=='i')
{
Izquierda();
TIempo=0;
}
}
if(TIempo<1) // 100 cilcos de 1ms
{
TIempo=TIempo+1;
}
else //ya transcurrió 100ms (100ciclos)
{
Parar();
}
delay(1); //pasusa de 1ms por ciclo
}
void Adelante ()
{
//Direccion motor A
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
//Direccion motor B
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
}
void Parar ()
{
//Direccion motor A
digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
//Direccion motor B
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
}
void Derecha ()
{
//Direccion motor A
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
//Direccion motor B
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
}
void Izquierda ()
{
//Direccion motor A
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
//Direccion motor B
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
}
void Reversa ()
{
//Direccion motor A
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
//Direccion motor B
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
}

Réponses (1)

Pratik
Pratik le 11 Juin 2024
Hi Guillermo,
From what I can understand, the arduino code provided needs to be changed to MATLAB equivalent code.
The provided Arduino code involves digital I/O, serial communication, and timing functions to control motors and read from an ultrasonic sensor. Here's a MATLAB version that attempts to replicate the functionality, assuming the necessary support package is installed.
Please refer to the following code:
% MATLAB Code Equivalent
% Setup MATLAB and Arduino connection
a = arduino('COM3', 'Uno', 'Libraries', 'Ultrasonic'); % Change 'COM3' to your Arduino's port
% Define pin numbers
pinecho = 'D4';
pintrigger = 'D5';
pinled = 'D13';
% Motor A
IN1 = 'D8';
IN2 = 'D9';
% Motor B
IN3 = 'D6';
IN4 = 'D7';
% Initialize Ultrasonic sensor
ultrasonicSensor = ultrasonic(a, pintrigger, pinecho);
% Main loop
while true
% Send pulse
distancia = readDistance(ultrasonicSensor) * 100; % Convert meters to cm
% Display distance
fprintf('%f cm\n', distancia);
pause(0.15); % Delay
% Check distance to turn on LED
if distancia <= 20
writeDigitalPin(a, pinled, 1);
pause(0.3);
else
writeDigitalPin(a, pinled, 0);
end
% Read from serial (this part is tricky in MATLAB, assuming pseudo code for user input)
% MATLAB does not directly support reading from the serial monitor like the Arduino IDE does.
% You would need an external interface or a custom script to handle user inputs.
% For demonstration, let's assume a function getUserInput() that returns a character
dato = getUserInput(); % This is a placeholder for user input functionality
if dato == 'a'
Adelante(a, IN1, IN2, IN3, IN4);
elseif dato == 'r'
Reversa(a, IN1, IN2, IN3, IN4);
elseif dato == 'd'
Derecha(a, IN1, IN2, IN3, IN4);
elseif dato == 'i'
Izquierda(a, IN1, IN2, IN3, IN4);
end
pause(0.001); % Small delay
end
% Motor control functions
function Adelante(a, IN1, IN2, IN3, IN4)
writeDigitalPin(a, IN1, 0);
writeDigitalPin(a, IN2, 1);
writeDigitalPin(a, IN3, 0);
writeDigitalPin(a, IN4, 1);
end
function Parar(a, IN1, IN2, IN3, IN4)
writeDigitalPin(a, IN1, 0);
writeDigitalPin(a, IN2, 0);
writeDigitalPin(a, IN3, 0);
writeDigitalPin(a, IN4, 0);
end
function Derecha(a, IN1, IN2, IN3, IN4)
writeDigitalPin(a, IN1, 1);
writeDigitalPin(a, IN2, 0);
writeDigitalPin(a, IN3, 0);
writeDigitalPin(a, IN4, 1);
end
function Izquierda(a, IN1, IN2, IN3, IN4)
writeDigitalPin(a, IN1, 0);
writeDigitalPin(a, IN2, 1);
writeDigitalPin(a, IN3, 1);
writeDigitalPin(a, IN4, 0);
end
function Reversa(a, IN1, IN2, IN3, IN4)
writeDigitalPin(a, IN1, 1);
writeDigitalPin(a, IN2, 0);
writeDigitalPin(a, IN3, 1);
writeDigitalPin(a, IN4, 0);
end
% Placeholder for a function that simulates receiving user input
function input = getUserInput()
% Implement a way to get user input here
% This could be through a GUI, a file, or any other method
input = ''; % Return a character or string based on the input method
end
I hope this helps!

Catégories

En savoir plus sur MATLAB Support Package for Arduino Hardware dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by