Takk for tipset! Prøvde det og fikk ingen kompileringsfeil som du sa:)
Jeg tok og gjorde noen endring med tanke på at jeg vil ha int og ikke byte verdier inn til motorene. Men det fungerer fremdeles ikke. Får ingen respons på motorene og når jeg sender inn "M1S100D1" så blir resultatet id: 1 speed: 1 directionLeft: no.
Den looper 3 ganger og så vil den ikke mer selv om jeg gir den mer input. Har også prøvd å endre direction men den sier "no" uansett.
const byte MESSAGE_PACKET_LENGTH = 3; // motor,speed,direction
const byte MOTOR_ID_HEADER = 'M';
const byte SPEED_HEADER = 'S';
const byte DIRECTION_HEADER = 'D';
//counter for keeping track of the number of packets recieved
byte packetsRecieved = 0;
//data used to store info about the next action to make
byte motorID = 0;
byte motorSpeed = 0;
boolean motorDirectionLeft = false;
//pins
int IN1_Motor1 = 10; //retning 1 motor
int IN2_Motor1 = 11; //retning 2 motor
int IN1_Motor2 = 8;
int IN2_Motor2 = 9;
int D2_Motor1 = 7; //pwm hastighetsregulator
int D2_Motor2 = 6;
int D1 = 12; //
int EN = 13; //Enable signal
//setup serial
void setup()
{
pinMode (IN1_Motor1, OUTPUT);
pinMode (IN2_Motor1, OUTPUT);
pinMode (IN1_Motor2, OUTPUT);
pinMode (IN2_Motor2, OUTPUT);
pinMode (D2_Motor1, OUTPUT);
pinMode (D2_Motor2, OUTPUT);
pinMode (D1, OUTPUT);
pinMode (EN, OUTPUT);
Serial.begin(9800);
}
void loop()
{
if (Serial.available()>=MESSAGE_PACKET_LENGTH)
{
packetsRecieved++; //recieved a new package
byte recieved = Serial.read();
switch (recieved)
{
case MOTOR_ID_HEADER:
motorID = Serial.read()- '0';
break;
case SPEED_HEADER:
motorSpeed = Serial.read()- '0';
break;
case DIRECTION_HEADER:
motorDirectionLeft = Serial.read()==0 ? false : true;
break;
default:
//error has occured
packetsRecieved--;
break;
}
/*
If you have recieved enough data to make a desicion
*/
if ( packetsRecieved == (MESSAGE_PACKET_LENGTH-1) )
{
//act upon the data recieved
setMotor(motorID,motorSpeed,motorDirectionLeft);
//reset data
motorID = 0;
motorSpeed = 0;
motorDirectionLeft = 0;
}
}
digitalWrite(EN, HIGH);
digitalWrite(D1, LOW);
delay(100);
}
/*
Use the parameters to control a motor and set its speed and direction
*/
void setMotor( byte id, byte speed, boolean directionLeft )
{
//your code here
if(id == '1')
{
if(directionLeft == true)
{
digitalWrite(IN1_Motor1, HIGH);
digitalWrite(IN2_Motor1, LOW);
}
else
{
digitalWrite(IN1_Motor1, LOW);
digitalWrite(IN2_Motor1, HIGH);
}
analogWrite(D2_Motor1, speed);
}
if(id == '2')
{
if(directionLeft == true)
{
digitalWrite(IN1_Motor2, HIGH);
digitalWrite(IN2_Motor2, LOW);
}
else
{
digitalWrite(IN1_Motor2, LOW);
digitalWrite(IN2_Motor2, HIGH);
}
analogWrite(D2_Motor2, speed);
}
//debug
Serial.print("Recieved: ");
Serial.print("ID: ");
Serial.print(id,DEC);
Serial.print(" Speed: ");
Serial.print(speed,DEC);
Serial.print(" Left: ");
Serial.print(directionLeft?"yes":"no");
Serial.println("");
//end debug
}
Tok en liten titt på profilen din og ser du har drevet mye med arduino:)
Jeg har holdt på med arduino siden september bare og syns det i starten var latterlig enkelt:p