Помогите с кодом на Arduino mega 2560
- Войдите на сайт для отправки комментариев
Помогите с кодом на Arduino mega 2560
Хотельсь бы реализовать управление роботом по Wi FI.
Управление едет через роутер WR702N, теперь надо разобратся с дуиной.
Прошу вашей помощи......
Есьть код под Arduino Mini Pro :
int led = 13;
boolean laight = 0;
int incomingByte = 0;
int action = 0;
void setup() {
Serial.begin(115200);
pinMode(13, OUTPUT);
pinMode(4, OUTPUT); //light
pinMode(5, OUTPUT); // шим 1
pinMode(6, OUTPUT); // шим 2
pinMode(7, OUTPUT); // 11
pinMode(8, OUTPUT); // 12
pinMode(11, OUTPUT); // 21
pinMode(12, OUTPUT); // 22
}
void loop() {
//Serial.print("1");
if (Serial.available() > 0) { //если есть доступные данные// считываем байт
incomingByte = Serial.read();
// отсылаем то, что получили
digitalWrite(13, HIGH);
if(incomingByte == 97) // A
action = 7;
if(incomingByte == 100) // D
action = 8;
if(incomingByte == 115) // S
action = 11;
if(incomingByte == 119) // W
action = 12;
if(incomingByte == 108) // L
laight=!laight;
digitalWrite(4, laight);
//analogWrite(8, 255);
//analogWrite(9, 255);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(action, HIGH);
delay(250);
digitalWrite(action, LOW);
action = 0;
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(13, LOW);
Serial.print("250: ");
Serial.println(incomingByte, DEC);
}
}
Подключаю дуину к L298N.
Зашивал етот код в Arduino mega 2560, - шим работает а 7. 8. 11. 12. нет. помогите.
и еще хотелось бы добавить управление серво - камерой и прочие.
Прошу вашей помощи...
а что такое 7.8.11.12 ?
а что такое 7.8.11.12 ?
Выводы на дуине... Arduino mega 2560
pinMode(7, OUTPUT); // 11
pinMode(8, OUTPUT); // 12
pinMode(11, OUTPUT); // 21
pinMode(12, OUTPUT); // 22
а что такое 7.8.11.12 ?
Выводы на дуине...
да это-то очевидно.....
я наверно слишком тонко намекал про отсутствие телепатических способностей, и намеки остались непонятны. к черту экивоки, спрашиваю в лоб : что подключено к этим ногам и почему вы решили, что "оно не работает"? digitalWrite(action, HIGH), контроллер должен подать на вывод 5 вольт. он это делает? если да, то какие к нему претензии? если нет, то значит брак, меняйте контроллер или пробуйте на других выводах
вы код сами писали?
incomingByte = Serial.read(); // отсылаем то, что получили digitalWrite(13, HIGH);это не то, что вы написали
это не шим
Вот тут нашол проект, есть код но надо переделать под мой. WI FI
а что такое 7.8.11.12 ?
Выводы на дуине...
да это-то очевидно.....
я наверно слишком тонко намекал про отсутствие телепатических способностей, и намеки остались непонятны. к черту экивоки, спрашиваю в лоб : что подключено к этим ногам и почему вы решили, что "оно не работает"? digitalWrite(action, HIGH), контроллер должен подать на вывод 5 вольт. он это делает? если да, то какие к нему претензии? если нет, то значит брак, меняйте контроллер или пробуйте на других выводах
вы код сами писали?
incomingByte = Serial.read(); // отсылаем то, что получили digitalWrite(13, HIGH);это не то, что вы написали
это не шим
Код писал не я...
Вот тут нашол проект, есть код но надо переделать под мой. WI FI
http://cxem.net/uprav/uprav46.php
#include "EEPROM.h"#define D1 2 // направление вращение двигателя 1#define M1 3 // ШИМ вывод для управления двигателем 1 (левый)#define D2 4 // направление вращение двигателя 2#define M2 5 // направление вращение двигателя 2 (правый)#define HORN 13 // доп. канал 1 подключен к 13 пину//#define autoOFF 2500 // кол-во миллисекунд через которое робот останавливается при потери связи#define cmdL 'L' // команда UART для левого двигателя#define cmdR 'R' // команда UART для правого двигателя#define cmdH 'H' // команда UART для доп. канала 1 (к примеру сигнал Horn)#define cmdF 'F' // команда UART для работы с EEPROM памятью МК для хранения настроек#define cmdr 'r' // команда UART для работы с EEPROM памятью МК для хранения настроек (чтение)#define cmdw 'w' // команда UART для работы с EEPROM памятью МК для хранения настроек (запись)charincomingByte;// входящие данныеcharL_Data[4];// строковый массив для данных левого мотора LbyteL_index = 0;// индекс массиваcharR_Data[4];// строковый массив для данных правого мотора RbyteR_index = 0;// индекс массиваcharH_Data[1];// строковый массив для доп. каналаbyteH_index = 0;// индекс массива HcharF_Data[8];// строковый массив данных для работы с EEPROMbyteF_index = 0;// индекс массива Fcharcommand;// команда: передача координат R, L или конец строкиunsignedlongcurrentTime, lastTimeCommand, autoOFF;voidsetup() {Serial.begin(9600);// инициализация портаpinMode(HORN,OUTPUT);// дополнительный каналpinMode(D1,OUTPUT);// выход для задания направления вращения двигателяpinMode(D2,OUTPUT);// выход для задания направления вращения двигателя/*EEPROM.write(0,255);EEPROM.write(1,255);EEPROM.write(2,255);EEPROM.write(3,255);*/timer_init();// инициализируем программный таймер}voidtimer_init() {uint8_t sw_autoOFF = EEPROM.read(0);// считываем с EEPROM параметр "включена ли ф-ия остановки машинки при потере связи"if(sw_autoOFF =='1'){// если таймер останова включенcharvar_Data[3];var_Data[0] = EEPROM.read(1);var_Data[1] = EEPROM.read(2);var_Data[2] = EEPROM.read(3);autoOFF = atoi(var_Data)*100;// переменная автовыкл. для хранения кол-ва мс}elseif(sw_autoOFF =='0'){autoOFF = 999999;}elseif(sw_autoOFF == 255){autoOFF = 2500;// если в EEPROM ничего не записано, то по умолчанию 2.5 сек}currentTime =millis();// считываем время, прошедшее с момента запуска программы}voidloop() {if(Serial.available() > 0) {// если пришли UART данныеincomingByte = Serial.read();// считываем байтif(incomingByte == cmdL) {// если пришли данные для мотора Lcommand = cmdL;// текущая командаmemset(L_Data,0,sizeof(L_Data));// очистка массиваL_index = 0;// сброс индекса массива}elseif(incomingByte == cmdR) {// если пришли данные для мотора Rcommand = cmdR;memset(R_Data,0,sizeof(R_Data));R_index = 0;}elseif(incomingByte == cmdH) {// если пришли данные для доп. канала 1command = cmdH;memset(H_Data,0,sizeof(H_Data));H_index = 0;}elseif(incomingByte == cmdF) {// если пришли данные для работы с памятьюcommand = cmdF;memset(F_Data,0,sizeof(F_Data));F_index = 0;}elseif(incomingByte =='\r') command ='e';// конец строкиelseif(incomingByte =='\t') command ='t';// конец строки для команд работы с памятьюif(command == cmdL && incomingByte != cmdL){L_Data[L_index] = incomingByte;// сохраняем каждый принятый байт в массивL_index++;// увеличиваем текущий индекс массива}elseif(command == cmdR && incomingByte != cmdR){R_Data[R_index] = incomingByte;R_index++;}elseif(command == cmdH && incomingByte != cmdH){H_Data[H_index] = incomingByte;H_index++;}elseif(command == cmdF && incomingByte != cmdF){F_Data[F_index] = incomingByte;F_index++;}elseif(command =='e'){// если приняли конец строкиControl4WD(atoi(L_Data),atoi(R_Data),atoi(H_Data));delay(10);}elseif(command =='t'){// если приняли конец строки для работы с памятьюFlash_Op(F_Data[0],F_Data[1],F_Data[2],F_Data[3],F_Data[4]);}lastTimeCommand =millis();// считываем текущее время, прошедшее с момента запуска программы}if(millis() >= (lastTimeCommand + autoOFF)){// сравниваем текущий таймер с переменной lastTimeCommand + autoOFFControl4WD(0,0,0);// останавливаем машинку}}voidControl4WD(intmLeft,intmRight, uint8_t Horn){bool directionL, directionR;// направление вращение для L298NbytevalueL, valueR;// значение ШИМ M1, M2 (0-255)if(mLeft > 0){valueL = mLeft;directionL = 0;}elseif(mLeft < 0){valueL = 255 -abs(mLeft);directionL = 1;}else{directionL = 0;valueL = 0;}if(mRight > 0){valueR = mRight;directionR = 0;}elseif(mRight < 0){valueR = 255 -abs(mRight);directionR = 1;}else{directionR = 0;valueR = 0;}analogWrite(M1, valueL);// задаем скорость вращения для LanalogWrite(M2, valueR);// задаем скорость вращения для RdigitalWrite(D1, directionL);// задаем направление вращения для LdigitalWrite(D2, directionR);// задаем направление вращения для RdigitalWrite(HORN, Horn);// дополнительный канал}voidFlash_Op(charFCMD, uint8_t z1, uint8_t z2, uint8_t z3, uint8_t z4){if(FCMD == cmdr){// если команда чтения EEPROM данныхSerial.print("FData:");// посылаем данные с EEPROMSerial.write(EEPROM.read(0));// считываем значение ячейки памяти с 0 адресом и выводим в UARTSerial.write(EEPROM.read(1));Serial.write(EEPROM.read(2));Serial.write(EEPROM.read(3));Serial.print("\r\n");// маркер конца передачи EEPROM данных}elseif(FCMD == cmdw){// если команда записи EEPROM данныхEEPROM.write(0,z1);// запись z1 в ячейку памяти с адресом 0EEPROM.write(1,z2);EEPROM.write(2,z3);EEPROM.write(3,z4);timer_init();// переинициализируем таймерSerial.print("FWOK\r\n");// посылаем сообщение, что данные успешно записаны}}http://cxem.net/uprav/files/uprav46_BL_4WD.ino
Вот тут нашол проект, есть код но надо переделать под мой. WI FI
стоп-стоп, не так быстро
погодите минутку, мы пока определимся, кто именно будет ваш код переделывать, а то желающих-то полно, прямо рвут друг у друга. того и гляди подерутся. придется наверно жребий бросать.
не каждый день ведь такое счастье приваливает, да еще и даром....
Я особо в програмировании не разбираюсь.
Вот набросал скетч ля управление ботом, гляньте плиз.... может что упростить, переделать.
Управление камарой надо както сгладить.Что поворот бил плавний ане сразу с 90 га 180градусав.
Скетч:
#include <Servo.h>
Servo servo1;
Servo servo2;
const int SERVO1_PIN = 8;
const int SERVO2_PIN = 9;
const int MAX_POS = 1023;
const int MAX_ANGLE = 180;
int incomingByte;
void setup()
{
servo1.attach(SERVO1_PIN);
servo2.attach(SERVO2_PIN);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
Serial.begin(115200);
}
void loop()
{
if (Serial.available() > 0) {
incomingByte = Serial.read();
// Установка серво 1 в среднее положение
if (incomingByte == '5') {
servo1.write(90);
}
// Установка серво 2 в среднее положение
if (incomingByte == '5') {
servo2.write(90);
}
// При нажатой 8 повернуть серво 1 на 180 и при отсуствии возвратить в середину
if (incomingByte == '8') {
servo1.write(180);
delay(150);
servo1.write(90);
}
// При нажатой 2 повернуть серво 1 на 10 и при отсуствии возвратить в середину
if (incomingByte == '2') {
servo1.write(10);
delay(150);
servo1.write(90);
}
// При нажатой 4 повернуть серво 2 на 180 и при отсуствии возвратить в середину
if (incomingByte == '4') {
servo2.write(180);
delay(150);
servo2.write(90);
}
// При нажатой 6 повернуть серво 2 на 10 и при отсуствии возвратить в середину
if (incomingByte == '6') {
servo2.write(10);
delay(150);
servo2.write(90);
}
// При нажатой 7 повернуть серво 1 на 180 и при отсуствии возвратить в середину
// При нажатой 7 повернуть серво 2 на 180 и при отсуствии возвратить в середину
if (incomingByte == '7') {
servo1.write(180);
servo2.write(180);
delay(150);
servo1.write(90);
servo2.write(90);
}
// При нажатой 9 повернуть серво 1 на 180 и при отсуствии возвратить в середину
// При нажатой 9 повернуть серво 2 на 10 и при отсуствии возвратить в середину
if (incomingByte == '9') {
servo1.write(180);
servo2.write(10);
delay(150);
servo1.write(90);
servo2.write(90);
}
// При нажатой 1 повернуть серво 1 на 10 и при отсуствии возвратить в середину
// При нажатой 1 повернуть серво 2 на 180 и при отсуствии возвратить в середину
if (incomingByte == '1') {
servo1.write(10);
servo2.write(180);
delay(150);
servo1.write(90);
servo2.write(90);
}
// При нажатой 3 повернуть серво 1 на 10 и при отсуствии возвратить в середину
// При нажатой 3 повернуть серво 2 на 10 и при отсуствии возвратить в середину
if (incomingByte == '3') {
servo1.write(10);
servo2.write(10);
delay(150);
servo1.write(90);
servo2.write(90);
}
// При нажатой Q двигатся влево передним ходом
if (incomingByte == 'Q') {
digitalWrite(2, HIGH);
digitalWrite(5, HIGH);
delay(120);
digitalWrite(2, LOW);
digitalWrite(5, LOW);
}
// При нажатой W двигатся вперед
if (incomingByte == 'W') {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
delay(120);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
}
// При нажатой E двигатся вправопередним ходом
if (incomingByte == 'E') {
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
delay(120);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
// При нажатой A двигатся влево задним ходом
if (incomingByte == 'A') {
digitalWrite(4, HIGH);
digitalWrite(3, HIGH);
delay(120);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
}
// При нажатой S двигатся назад
if (incomingByte == 'S') {
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
delay(120);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}
// При нажатой D двигатся вправо задним ходом
if (incomingByte == 'D') {
digitalWrite(5, HIGH);
digitalWrite(2, HIGH);
delay(120);
digitalWrite(5, LOW);
digitalWrite(2, LOW);
}
// При нажатой R посигналить
if (incomingByte == 'R') {
digitalWrite(6, HIGH);
delay(120);
digitalWrite(6, LOW);
}
// При нажатой F включить фари
if (incomingByte == 'F') {
digitalWrite(7, HIGH);
}
// При нажатой G виключить фари
if (incomingByte == 'G') {
digitalWrite(7, LOW);
}
}
}
Жду вашых советов.
Спасибо!
Помогите...
Пожалуйста...
Чтобы плавно управлять камерой.
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Для плавного поворота нужен цикл. Пример:
if (incomingByte == '3') { for (uint8_t i1 = 10; i1<90; i1++) { servo1.write(i1); servo2.write(i1); delay(100); } }А вообще прежде чем что либо спросить необходимо дать схему устройства, схему подключения к контроллеру, код и только после задавать вопрос. Вам выше правильно сказали digitalWrite(action, HIGH); подаст на ногу action 5Вольт, но правильно это или нет не известно.
Для плавного поворота нужен цикл. Пример:
if (incomingByte == '3') { for (uint8_t i1 = 10; i1<90; i1++) { servo1.write(i1); servo2.write(i1); delay(100); } }А вообще прежде чем что либо спросить необходимо дать схему устройства, схему подключения к контроллеру, код и только после задавать вопрос. Вам выше правильно сказали digitalWrite(action, HIGH); подаст на ногу action 5Вольт, но правильно это или нет не известно.
Значит с камерой разобрался.
Поворот медленный и плавный...
Вот:
int pos=90;
void loop()
{
if (Serial.available() > 0) {
incomingByte = Serial.read();
if (incomingByte == '5') {
pos = 90;
servo1.write(pos);
servo2.write(pos);
}
else if (incomingByte == '8') {
pos--;
servo1.write(pos);
}
else if (incomingByte == '2') {
pos++;
servo1.write(pos);
}
else if (incomingByte == '4') {
pos++;
servo2.write(pos);
}
else if (incomingByte == '6') {
pos--;
servo2.write(pos);
}
}
Подскажыта как реализовать ШИМ управление двигателями........ ? плавный старт...
pinMode(6, OUTPUT); // ШИМ
pinMode(7, OUTPUT); // ШИМ
pinMode(2, OUTPUT); // L298N пин 1
pinMode(3, OUTPUT); // L298N пин 2
pinMode(4, OUTPUT); // L298N пин 3
pinMode(5, OUTPUT); // L298N пин 4