Здравствуйте уважаемые форумчане. Давно хотел собрать bluetooth машинку , но всё не доходили руки, еще останавливало отсутствие нормального софта под android (весь бесплатный софт предлагает только дискретное управление-вперед , назад ,влево ,вправо.) что совсем не впечатляет.. Сегодня случайно нашел на маркете довольно интересный проект. Установил , залил скетч , как ни странно всё сразу завелось. Но есть одно но-двигатели не набирают полную мощность (такое ощущение что analogWrite при максимальных положениях ручек получает от силы 120 вместо 255) , скорее всего дело в скетче но не могу понять что менять в нем... Гляньте пожалуйста скетч кому интересно. Всем заранее спасибо) пока попробую сам поковыряться , попосылаю значения i в серийный монитор.. Код (Text): #define charComand 5 // characters per comand #define forward 11 #define backward 10 #define left 9 #define right 6 int pos = 0; // variable to store the servo position int spd = 0; // Variable to store the motor speed int midspd = 255; int midpos = 255; int special = 0; unsigned long lastCommand; char signal,car; void setup() { pinMode(forward, OUTPUT); pinMode(backward, OUTPUT); pinMode(left, OUTPUT); pinMode(right, OUTPUT); Serial.begin(9600); Serial.println("READY "); } void loop() { if(Serial.available()>=charComand){ lastCommand=millis(); signal=Serial.read(); switch(signal){ case 'S': readInt(special); switch(special){ case 0: // Parar todo stop_all(); break; case 1: //continua conectado lastCommand=millis(); break; } special=0; break; case 'V': // Vertical Bar readInt(spd); if (spd == midspd){ Stop(); } else if (spd >midspd){ spd-=midspd; goForward(spd); } else{ spd=midspd-spd; goBackward(spd); } spd=0; break; case 'H': // Horizontal Bar readInt(pos); if (pos == midpos){ stop_turn(); } else if(pos > midpos){ pos-=midpos; go_right(pos); } else{ pos=midpos-pos; go_left(pos); } pos=0; break; case 'L': // New Left bar value readInt(midspd); midspd/=2; Stop(); break; case 'R': // New right bar value readInt(midpos); midpos/=2; stop_turn(); break; } delay(1); } if( (millis() - lastCommand) > 1350){ stop_all(); lastCommand=millis(); Serial.flush(); } } void readInt(int &num){ num = 0; for(int i=0;i<(charComand-1);i++){ car=Serial.read(); num+=(car-48)*(int)(0.5+pow(10,(charComand-2)-i)); } } void goForward(int i){ digitalWrite(backward, LOW); analogWrite(forward,i); } void goBackward(int i){ digitalWrite(forward, LOW); analogWrite(backward,i); } void stop_all(){ Stop(); stop_turn(); } void Stop(){ digitalWrite(forward,LOW); digitalWrite(backward,LOW); } void go_left(int i) { digitalWrite(right, LOW); analogWrite(left, i); } void go_right(int i) { digitalWrite(left, LOW); analogWrite(right, i); } void stop_turn() { digitalWrite(right, LOW); digitalWrite(left, LOW); }
попробуйте подключить свою машинку к ПК и выводить через последовательный порт все что отправляете на моторы (точнее транзисторы) и какие именно значения там прыгают
попробовал вывести в монитор значение i , оно доходит только до 127 как и предполагалось.. щас подшаманю) умножу на 2 его например..
спасибо , разобрался, дело было в настройках android приложения. теперь все в порядке . Но всё же не нравится управление рулевой мотором ... Думаю как серву прикрутить. Вообще хотелось бы раздобыть на android такую софтину , но пока безрезультатно... есть ещё такой проект , там довольно классная программа но она рассчитана на управление 2 моторами , т.е. все расчеты происходят в android приложении , а дуня получает по BT готовые значения для двигателей.. короче я запутался) если кто баловался подобной тематикой , поделитесь пожалуйста софтом под андроид)