![]() |
|
![]() |
#1 |
Junior Member
Регистрация: 16.04.2014
Сообщений: 19
Вес репутации: 0 ![]() |
![]()
Обновил код elik745i
Действительно стало лучше. Во всяком случае повысилась отзывчивость робота. Раньше робот при нажатии на кнопки A и D кратковременно включал моторы, а при нажатии на кнопки W и S примерно на 1.5 - 2 секунды. С обновлением скетча, робот стал одинакого реагировать на все кнопки WSAD включая моторы кратковременно. Более того увеличился интервал зависания. Один раз у меня получилось 300 раз кратковременно нажать на кнопку A прежде чем робот завис. А вот с подключением камеры все осталось по прежнему. Стоит дать одну команду и робот зависает. Видеопоток останавливается и моторы начинают вращаться бесконечно. При этом нажатие на кнопки заставляет моргать светодиод RX. Вопрос Admin'у: Можно ли как-то считать то, что приходит в порт Arduino? Например отправлять обратно в TX и выводить на экран WEB-интерфейса? Или подключить к Aruino LCD дисплей, например HD44780 и дублировать туда приходящие через порт команды, и как это правильно реализовать в скетче? |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Регистрация: 07.01.2015
Адрес: Baku
Сообщений: 225
Вес репутации: 0 ![]() |
![]() Цитата:
используй вот этот: https://youtu.be/HcA-f-SeI6g Код:
/* Sketch based on Cyberlib library from cyber-place.ru, however due to some hangups desition were taken to get rid of this library and use arduino standard libraries and Adafrruit libraries. LCD module used just for debuging and is optional, however many useful information can be hooked to it. Wiring: 1.8''LCD is just insertewd to MEGA pins 8 -> AREF 2 servos (yaw and pitch) hooked to digital pins 2 and 3 (configurable, just like LCD pins) Servos powered by 5 volt regulator from external power supply (this is important not to fry arduino or your modem) For video demonstration please visit my youtube: http://youtu.be/HcA-f-SeI6g Any references/updates please visit my blog: www.voltrans.az */ //#include <CyberLib.h> // Подключаем библиотеку #include <Servo.h> // Подключаем библиотеку сервоприводов #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7735.h> // Hardware-specific library #include <SPI.h> Servo myservo1; Servo myservo2; //long previousMillis; // Нужно для таймера //uint8_t LedStep = 0; // Счетчик int val1 = 0; int val2 = 0; //int servoSpeed = 20; int servoAngle = 20; int minAngle = 0; int maxAngle = 180; //int i; int q=2; int w=114; boolean light_stat; uint8_t inByte; uint8_t speed=255; //максимальная скорость по умолчанию //#define init {D4_Out; D5_Out; D6_Out; D7_Out; D8_Out; D11_Out; D12_Out;} #define TFT_CS 13 #define TFT_RST 12 // you can also connect this to the Arduino reset // in which case, set this #define pin to 0! #define TFT_DC 11 #define TFT_SCLK 9 // set these to be whatever pins you like! #define TFT_MOSI 10 // set these to be whatever pins you like! Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); const int ledPin = 8; const int irlight = 46; const int blastLed = 47; int backlit = 100; //backlit void setup() { noTone(49); pinMode(ledPin, OUTPUT); pinMode(irlight, OUTPUT); pinMode(blastLed, OUTPUT); analogWrite(ledPin, backlit); tft.initR(INITR_BLACKTAB); // ST7735-Chip initialisieren tft.fillScreen(ST7735_BLACK); tft.drawRoundRect(0,0,128,160,6,ST7735_WHITE); tft.drawRect(0,100,128,12,ST7735_WHITE); tft.drawTriangle(64, 5, 43, 35, 86, 35, ST7735_WHITE); tft.drawTriangle(64, 95, 43, 65, 86, 65, ST7735_WHITE); tft.drawTriangle(5, 50, 40, 35, 40, 65, ST7735_WHITE); tft.drawTriangle(123, 50, 89, 35, 89, 65, ST7735_WHITE); tft.setTextColor(ST7735_WHITE); tft.setCursor(46, 42); tft.print("WEBCAM"); tft.setCursor(46, 52); tft.print("CONTROL"); tft.setCursor(10, 102); tft.setTextColor(ST7735_WHITE); tft.setTextWrap(true); tft.print("Serial Monitor:"); myservo1.attach(24); // Подключение сервоприводов к порту myservo2.attach(26); // Подключение сервоприводов к порту myservo1.write(val1); myservo2.write(val2); delay(500); myservo1.detach(); myservo2.detach(); init; // Инициализация портов horn(); //звуковое оповещение готовности робота Serial.begin(57600);// Инициализация порта для связи с роутером //wdt_enable (WDTO_500MS); tft.setCursor(72, 90); tft.setTextColor(ST7735_RED); tft.print("BLAST OFF"); tft.setCursor(8, 90); tft.setTextColor(ST7735_RED); tft.print("IR OFF"); } void loop() { /* unsigned long currentMillis = millis(); // Обновление таймера if (LedStep == 0 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек. previousMillis = currentMillis; // обновление таймер LedStep = 1; // Счетчик шагов } if (LedStep == 1 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек. previousMillis = currentMillis; // обновление таймер LedStep = 2; // Счетчик шагов } if (LedStep == 2 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек. LedStep = 0; // Счетчик шагов } */ if (Serial.available()) //Еесли что то пришло { byte inByte = Serial.read(); tft.setTextColor(ST7735_WHITE); tft.setCursor(q, w); tft.print(inByte); tft.print(", "); q=q+24; if(q>=120){ w=w+10; q=2; } if(w>=150){ tft.fillRect(1,111,126,46,ST7735_BLACK); q=2; w=114; } switch (inByte) // Смотрим какая команда пришла { case 'U': // Серво поднимается if(val1<maxAngle){ up(); myservo1.attach(24); // attaches the servo on pin 2 for(int i=0;i<servoAngle;i++){ myservo1.write(val1+i); // sets the servo position according to the scaled value delay(servoAngle); } val1=val1+servoAngle; myservo1.detach(); // detaches the servo on pin 2 } //up(); // myservo1.write(i -= 10); break; case 'J': // Серво опускается if(val1>minAngle){ dn(); myservo1.attach(24); // attaches the servo on pin 2 for(int i=0;i<servoAngle;i++){ myservo1.write(val1-i); // sets the servo position according to the scaled value delay(servoAngle); } val1=val1-servoAngle; myservo1.detach(); // detaches the servo on pin 2 } //dn(); //myservo1.write(i += 10); break; case 'H': // Серво поворачивается влево if(val2<maxAngle){ lt(); myservo2.attach(26); // attaches the servo on pin 2 for(int i=0;i<servoAngle;i++){ myservo2.write(val2+i); // sets the servo position according to the scaled value delay(servoAngle); } val2=val2+servoAngle; myservo2.detach(); // detaches the servo on pin 2 } //lt(); //myservo2.write(i += 10); break; case 'K': // Серво поворачивается вправо if(val2>minAngle){ rt(); myservo2.attach(26); // attaches the servo on pin 2 for(int i=0;i<servoAngle;i++){ myservo2.write(val2-i); // sets the servo position according to the scaled value delay(servoAngle); } val2=val2-servoAngle; myservo2.detach(); // detaches the servo on pin 2 } //rt(); //myservo2.write(i -= 10); break; case 'B': // Бластер if(light_stat) { digitalWrite(blastLed, LOW); bIRoff(); light_stat=false; } else { digitalWrite(blastLed, HIGH); bIRon(); light_stat=true; } break; case 'C': // Клаксон horn(); break; case 'V': // Включить/Выключить фары if(light_stat) { digitalWrite(irlight, LOW); IRoff(); light_stat=false; } else { digitalWrite(irlight, HIGH); IRon(); light_stat=true; } break; } if(inByte>47 && inByte<58) speed=(inByte-47)*25+5;//принимает команду и преобразуем в скорость } // wdt_reset(); } void up(){ tft.fillTriangle(64, 6, 44, 34, 85, 34, ST7735_GREEN); tft.fillTriangle(64, 6, 44, 34, 85, 34, ST7735_BLACK); } void dn(){ tft.fillTriangle(64, 92, 46, 67, 83, 67, ST7735_GREEN); tft.fillTriangle(64, 92, 46, 67, 83, 67, ST7735_BLACK); } void lt(void){ tft.fillTriangle(6, 50, 39, 36, 39, 64, ST7735_GREEN); tft.fillTriangle(6, 50, 39, 36, 39, 64, ST7735_BLACK); } void rt(void){ tft.fillTriangle(122, 50, 90, 36, 90, 64, ST7735_GREEN); tft.fillTriangle(122, 50, 90, 36, 90, 64, ST7735_BLACK); } void horn() { noTone(49); tone(49, 440, 150); delay(250); tone(49, 440, 700); } void bIRon(){ tft.setCursor(72, 90); tft.setTextColor(ST7735_BLACK); tft.print("BLAST OFF"); tft.setCursor(72, 90); tft.setTextColor(ST7735_GREEN); tft.print("BLAST ON"); } void bIRoff(){ tft.setCursor(72, 90); tft.setTextColor(ST7735_BLACK); tft.print("BLAST ON"); tft.setCursor(72, 90); tft.setTextColor(ST7735_RED); tft.print("BLAST OFF"); } void IRon(){ tft.setCursor(8, 90); tft.setTextColor(ST7735_BLACK); tft.print("IR OFF"); tft.setCursor(8, 90); tft.setTextColor(ST7735_GREEN); tft.print("IR ON"); } void IRoff(){ tft.setCursor(8, 90); tft.setTextColor(ST7735_BLACK); tft.print("IR ON"); tft.setCursor(8, 90); tft.setTextColor(ST7735_RED); tft.print("IR OFF"); } ![]() Последний раз редактировалось elik745i; 27.10.2015 в 18:01. |
|
![]() |
![]() |
![]() |
Здесь присутствуют: 4 (пользователей: 0 , гостей: 4) | |
|
|