|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824
|
Re: Модуль "CyberBot-3"
Цитата:
Сообщение от elik745i
все получилось, пришлось немного повозиться, понять как вы отсылали данные используя библиотеку саибер, так как я использую стандартные ардуино, но все получилось супер!
Если кому понадобится использовать стандартные функции ардуино с нестандартным роботом  вот мой код:
Код:
#include <Servo.h> // Подключаем библиотеку сервоприводов
// // Подключаем H-Bridge HG7881
#define HG7881_A_IA 10 // D10 --> Motor A Input A --> MOTOR A +
#define HG7881_A_IB 9 // D9 --> Motor A Input B --> MOTOR A -
#define HG7881_B_IA 11 // D11 --> Motor B Input A --> MOTOR B +
#define HG7881_B_IB 12 // D12 --> Motor B Input B --> MOTOR B -
// functional connections
#define MOTOR_A_PWM HG7881_A_IA // Motor A PWM Speed
#define MOTOR_A_DIR HG7881_A_IB // Motor A Direction
#define MOTOR_B_PWM HG7881_B_IA // Motor B PWM Speed
#define MOTOR_B_DIR HG7881_B_IB // Motor B Direction
#define DIR_DELAY 100 // brief delay for abrupt motor changes
#define tiltServopin 7 //tilt servo attached to pin 7
#define panServopin 8 //pan servo attached to pin 8
#define serialReceive 13 //Serial Receive Message indicator LED
#define moveLed 4 //LED indicating tank movement
#define light 6 //
#define moveDelay 1000
#define moveDelayturn 100
Servo tiltServo;
Servo panServo;
int val1 = 90;
const int servoAngle = 20;
const int minAngle = 0;
const int maxAngle = 180;
int lightState=0;
void setup()
{
Serial.begin( 57600 );
pinMode(serialReceive,OUTPUT);
pinMode(moveLed,OUTPUT);
pinMode( MOTOR_A_DIR, OUTPUT );
pinMode( MOTOR_A_PWM, OUTPUT );
digitalWrite( MOTOR_A_DIR, LOW );
digitalWrite( MOTOR_A_PWM, LOW );
pinMode( MOTOR_B_DIR, OUTPUT );
pinMode( MOTOR_B_PWM, OUTPUT );
digitalWrite( MOTOR_B_DIR, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
// delay(40000); //wait for router to initialise
}
void loop()
{
if (Serial.available()) //Еесли что то пришло
{
digitalWrite(serialReceive,HIGH);
byte inByte = Serial.read();
switch (inByte) // Смотрим какая команда пришла
{
case 'x': // Остоновка робота
robot_stop();
break;
case 'W': // Движение вперед
robot_go();
break;
case 'D': // Поворот вправо
robot_right();
break;
case 'A': // Повопорт влево
robot_left();
break;
case 'S': // Движение назад
robot_back();
break;
case 'J': // Серво поднимается
if(val1<maxAngle){
tiltServo.attach(tiltServopin); // attaches the servo on pin 2
for(int i=0;i<servoAngle;i++){
tiltServo.write(val1+i); // sets the servo position according to the scaled value
delay(servoAngle);
}
val1=val1+servoAngle;
tiltServo.detach(); // detaches the servo on pin 2
}
break;
case 'U': // Серво опускается
if(val1>minAngle){
tiltServo.attach(tiltServopin); // attaches the servo on pin 2
for(int i=0;i<servoAngle;i++){
tiltServo.write(val1-i); // sets the servo position according to the scaled value
delay(servoAngle);
}
val1=val1-servoAngle;
tiltServo.detach(); // detaches the servo on pin 2
}
break;
case 'K': // Серво поворачивается влево
panServo.attach(panServopin); // attaches the servo on pin 2
panServo.write(180); // sets the servo position according to the scaled value
delay(200);
panServo.detach(); // detaches the servo on pin 2
break;
case 'H': // Серво поворачивается вправо
panServo.attach(panServopin); // attaches the servo on pin 2
panServo.write(0); // sets the servo position according to the scaled value
delay(200);
panServo.detach(); // detaches the servo on pin 2
break;
case 'B': // Бластер
break;
case 'C': // Клаксон
break;
case ']': // запрос состояния аналоговых датчиков
sendAnalog();
break;
case 'V': // Включить/Выключить фары
if (lightState==0){
digitalWrite(light,HIGH);
lightState=1;
}else{
digitalWrite(light,LOW);
lightState=0;
}
break;
}
digitalWrite(serialReceive,LOW);
}
}
void robot_stop()
{
digitalWrite( MOTOR_A_DIR, LOW );
digitalWrite( MOTOR_A_PWM, LOW );
digitalWrite( MOTOR_B_DIR, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
delay( DIR_DELAY );
}
void robot_go(){
/*
digitalWrite( MOTOR_A_DIR, LOW );
digitalWrite( MOTOR_A_PWM, LOW );
digitalWrite( MOTOR_B_DIR, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
delay( DIR_DELAY );
*/
digitalWrite( MOTOR_A_DIR, LOW ); // direction = forward
digitalWrite( MOTOR_A_PWM, HIGH );
digitalWrite( MOTOR_B_DIR, LOW ); // direction = forward
digitalWrite( MOTOR_B_PWM, HIGH ); // PWM speed = slow
delay(moveDelay);
}
void robot_back(){
/*
digitalWrite( MOTOR_A_DIR, LOW );
digitalWrite( MOTOR_A_PWM, LOW );
digitalWrite( MOTOR_B_DIR, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
delay( DIR_DELAY );
*/
// set the motor speed and direction
digitalWrite( MOTOR_A_DIR, HIGH ); // direction = forward
digitalWrite( MOTOR_A_PWM, LOW );
digitalWrite( MOTOR_B_DIR, HIGH ); // direction = forward
digitalWrite( MOTOR_B_PWM, LOW ); // PWM speed = slow
delay(moveDelay);
}
void robot_left(){
/*
digitalWrite( MOTOR_A_DIR, LOW );
digitalWrite( MOTOR_A_PWM, LOW );
digitalWrite( MOTOR_B_DIR, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
delay( DIR_DELAY );
*/
// set the motor speed and direction
digitalWrite( MOTOR_A_DIR, HIGH ); // direction = forward
digitalWrite( MOTOR_A_PWM, LOW );
digitalWrite( MOTOR_B_DIR, LOW ); // direction = forward
digitalWrite( MOTOR_B_PWM, HIGH ); // PWM speed = fast
delay(moveDelayturn);
}
void robot_right(){
/*
digitalWrite( MOTOR_A_DIR, LOW );
digitalWrite( MOTOR_A_PWM, LOW );
digitalWrite( MOTOR_B_DIR, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
delay( DIR_DELAY );
*/
// set the motor speed and direction
digitalWrite( MOTOR_A_DIR, LOW ); // direction = forward
digitalWrite( MOTOR_A_PWM, HIGH );
digitalWrite( MOTOR_B_DIR, HIGH ); // direction = forward
digitalWrite( MOTOR_B_PWM, LOW ); // PWM speed = slow
delay(moveDelayturn);
}
void sendAnalog(){
int k = analogRead(A0);
int f = analogRead(A1);
Serial.write("{\"dat1\":\"");
Serial.print(k);
Serial.write("\",\"dat2\":\"");
Serial.print(f);
Serial.write("\"}");
}
|
Можно по подробней, как подключали, к какому драйверу и т.д.
Хочу вынести Ваш код в шапку темы
|