Robotprogrammering med Arduino (C++), Inmatningsproblem
Tjena allesammans! Någon här som känner sig manad att hjälpa mig med min första kod någonsin?
Håller på och programmerar en Robot som ska kunna köra frammåt,bakåt och svänga vänster å höger med hjälp av WASD. Samt byta mellan fyra olika hastigheter. Detta med hjälp av en Arduino MEGA samt två motorstyrningskort (MD03)
Innan ni totalt sågar min kod så kom ihåg att det är min första någonsin!
Problemet är att när jag ska mata in ett kommando tex "W" så måste jag ibland mata in två stycken.... Samma sak gäller om jag ska svänga vänster eller höger med "A" och "D" Det enda som alltid fungerar på första försöket är "Stopp" dvs när jag matar in ett mellanslag.
Ajja, nog av mig att försöka förklara nått jag inte förstår....
och jag vet att det säkert finns 1000 sätt att göra detta enklare... Men man tager vad man haver i kunskapsväg.
Fråga gärna om det är något ni undrar!
KOD:
#include <Wire.h>;
/**
Konstanter
*/
#define MD03_ADDRESS 0x58 // The address of the MD03 motor controller
#define MD03_COMMAND_REG 0x00
#define MD03_STATUS_REG 0x01
#define MD03_SPEED_REG 0x02
#define MD03_ACCELERATION_REG 0x03
#define MD03_TEMPERATURE_REG 0x04
#define MD03_MOTOR_CURRENT_REG 0x05
#define MD03_SOFTWARE_REV_REG 0x07
#define MD03_MOVE_FORWARD 0x01
#define MD03_STOP 0x00
#define MD03_MOVE_BACKWARDS 0x02
struct sGLOBAL // Datastuktor som innehåller olika variabler
{
int hastighet;
int hastighetV;
int hastighetH;
char bmotorH;
char bmotorV;
} s ={80,0,0,0,0};
byte counter;
void korningH(){
if(s.bmotorH == 1)
{
//MotorHöger
Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03
Wire.write(MD03_COMMAND_REG); // Send the address of the command register
Wire.write(MD03_MOVE_FORWARD); // Send the forward command
Wire.endTransmission();
Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03
Wire.write(MD03_SPEED_REG); // Send the address of speed register
Wire.write(s.hastighetH); // Set the speed
Wire.endTransmission();
}
else if(s.bmotorH == 2)
{
//MotorHöger
Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03
Wire.write(MD03_COMMAND_REG); // Send the address of the command register
Wire.write(MD03_MOVE_BACKWARDS); // Send the forward command
Wire.endTransmission();
Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03
Wire.write(MD03_SPEED_REG); // Send the address of speed register
Wire.write(s.hastighetH); // Set the speed
Wire.endTransmission();
}
else if(s.bmotorH == 0)
{
//stanna motor vänster
Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03
Wire.write(MD03_COMMAND_REG); // Send the address of the command register
Wire.write(MD03_STOP); // Send the forward command
Wire.endTransmission();
}
}
void korningV(){
if(s.bmotorV == 1)
{
//Styrning vänster motor
Wire.beginTransmission(MD03_ADDRESS+1); // Start communicating with the MD03
Wire.write(MD03_COMMAND_REG); // Send the address of the command register
Wire.write(MD03_MOVE_FORWARD); // Send the forward command
Wire.endTransmission();
Wire.beginTransmission(MD03_ADDRESS+1); // Start communicating with the MD03
Wire.write(MD03_SPEED_REG); // Send the address of speed register
Wire.write(s.hastighetV); // Set the speed
Wire.endTransmission();
}
else if(s.bmotorV == 2)
{
//Styrning vänster motor
Wire.beginTransmission(MD03_ADDRESS+1); // Start communicating with the MD03
Wire.write(MD03_COMMAND_REG); // Send the address of the command register
Wire.write(MD03_MOVE_BACKWARDS); // Send the forward command
Wire.endTransmission();
Wire.beginTransmission(MD03_ADDRESS+1); // Start communicating with the MD03
Wire.write(MD03_SPEED_REG); // Send the address of speed register
Wire.write(s.hastighetV); // Set the speed
Wire.endTransmission();
}
else if(s.bmotorV == 0)
{
//stanna motor vänster
Wire.beginTransmission(MD03_ADDRESS+1); // Start communicating with the MD03
Wire.write(MD03_COMMAND_REG); // Send the address of the command register
Wire.write(MD03_STOP); // Send the forward command
Wire.endTransmission();
}
}
void setup()
{
Wire.begin(); // Initialize the I2C bus
Serial.begin(57600); // Initialize the serial bus
Serial.println(__DATE__);
Serial.println("Setup done!");
}
void loop(){
while(Serial.available()>0){
char c = Serial.read();
switch(c){
//Framåt
case 'W':
Serial.println("Frammat");
s.hastighetH = s.hastighet;
s.hastighetV = s.hastighet;
s.bmotorH= 1;
s.bmotorV= 1;
korningH();
korningV();
break;
//bakåt
case 'S':
Serial.println("Backar");
s.hastighetH = s.hastighet;
s.hastighetV = s.hastighet;
s.bmotorH= 2;
s.bmotorV= 2;
korningH();
korningV();
break;
//hastigheter
case '1':
Serial.println("Hastighet 1 = 80");
s.hastighet=80;
korningH();
korningV();
break;
case '2':
Serial.println("Hastighet 2 = 150");
s.hastighet=130;
korningH();
korningV();
break;
case '3':
Serial.println("Hastighet 3 = 200");
s.hastighet=200;
korningH();
korningV();
break;
case '4':
Serial.println("Hastighet 4 = 255");
s.hastighet=255;
korningH();
korningV();
break;
//sväng vänster
case 'A':
Serial.println("Vanster");
s.hastighetV = s.hastighet / 2;
s.hastighetH = s.hastighet;
s.bmotorH=1;
s.bmotorV=1;
korningH();
korningV();
break;
//sväng höger
case 'D':
Serial.println("Hoger");
s.hastighetV = s.hastighet;
s.hastighetH = s.hastighet / 2;
s.bmotorH=1;
s.bmotorV=1;
korningH();
korningV();
break;
case ' ':
Serial.println("Stanna");
s.bmotorH= 0;
s.bmotorV= 0;
korningH();
korningV();
break;
default:
Serial.println("Unknown command:");
Serial.print(c);
break;
}
}
}