Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > CyberWrt

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.03.2015, 11:12   #171
cyberbot
Member
 
Регистрация: 10.03.2015
Сообщений: 40
Вес репутации: 0
cyberbot is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-2"

Понятно. Чего-то у меня значит не то)
cyberbot вне форума   Ответить с цитированием
Старый 26.03.2015, 13:28   #172
Alex19279
Senior Member
 
Регистрация: 20.09.2014
Сообщений: 145
Вес репутации: 0
Alex19279 will become famous soon enough
По умолчанию Re: Модуль "CyberBot-2"

Вы обрабатываете все 8 принимаемых символов или фильтруете 7 и берете только последний управляющий код?
Для защит от помех я бы принимал всю строку, сравнивал с шаблоном 7 символов и только потом 8 символ пускал в работу.
Alex19279 вне форума   Ответить с цитированием
Старый 26.03.2015, 15:44   #173
cyberbot
Member
 
Регистрация: 10.03.2015
Сообщений: 40
Вес репутации: 0
cyberbot is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-2"

Цитата:
Вы обрабатываете все 8 принимаемых символов или фильтруете 7 и берете только последний управляющий код?
Вот с этого места поподробнее можно?
Я нажимаю на кнопку "Вперед". Это кнопка большая W. Это ASCII = 0x57. По идее этот байт улетает в UART? Или туда уходит какой-то пакет байтов?

Последний раз редактировалось cyberbot; 26.03.2015 в 16:05.
cyberbot вне форума   Ответить с цитированием
Старый 26.03.2015, 17:55   #174
Alex19279
Senior Member
 
Регистрация: 20.09.2014
Сообщений: 145
Вес репутации: 0
Alex19279 will become famous soon enough
По умолчанию Re: Модуль "CyberBot-2"

Да, веб морда при нажатии любой кнопки отправляет 8 символов:
7 символов tx_com=
8 символ код нажатой кнопки.
Как только убрали палец с кнопки тут же улетает строка:
tx_com=x
Alex19279 вне форума   Ответить с цитированием
Старый 26.03.2015, 21:13   #175
cyberbot
Member
 
Регистрация: 10.03.2015
Сообщений: 40
Вес репутации: 0
cyberbot is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-2"

Ага! Т.е. протокол какой-то связи все же есть!!!

А 7 символов - это какие символы? ASCII код пробела что ли?

А как только я палец убираю - тоже по UART пакет передаётся из 7ми каких-то байт и 8го 'x'?

Последний раз редактировалось cyberbot; 26.03.2015 в 21:17.
cyberbot вне форума   Ответить с цитированием
Старый 26.03.2015, 21:36   #176
Alex19279
Senior Member
 
Регистрация: 20.09.2014
Сообщений: 145
Вес репутации: 0
Alex19279 will become famous soon enough
По умолчанию Re: Модуль "CyberBot-2"

Уважаемый, ну я же написал какие символы шлет веб морда, повторяю:
Нажали клавишу вперед и держите, веб морда на уарт выдает строку:

tx_com=W

Вот прям такая строка из 8 символов уходит в уарт.
Убрали палец с кнопки, веб морда выдает в уарт:

tx_com=x

Я подозреваю, что вы приняли первый байт и тут же начинаете его по условиям проверять, а уарт не ждет вас и принимает остальные байты и вы их теряете, вам нужно организовать буфер на 16 байт, принимать байты в прерываниях, потом в основном цикле проверять содержимое, как только та мне ноль = обрабатываете, обработали строку, запишите ноль чтоб не зациклить основную прогу.
Alex19279 вне форума   Ответить с цитированием
Старый 26.03.2015, 23:36   #177
cyberbot
Member
 
Регистрация: 10.03.2015
Сообщений: 40
Вес репутации: 0
cyberbot is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-2"

Да я приемник переписал уже по другому. Один фиг не работает с модулем CyberBot2 )))
Что характерно, если послать с терминала строку WWWWWWWW, то у меня светодиод загорается.
Но я не понимаю, почему он не загорается, если отослать две строки по WWWW. Почему? Ведь буфер я вычитаю если получу только второй пакет. А первый пришел и по идее там сидеть должен!

Код ниже привел.
Изначально хотел сделать управление двигателями, но сейчас пока все свелось к просто корректному включению и выключению светодиода. Если стабильно будет это получаться, то двигатели сделать будет просто.

Код:
//setup
const int LEDpin = 13; //пин вывода сигнала на светодиод
const long UART_Speed = 57600; //Скорость UART

const byte Byte_forward = byte('W'); //команда: вперед
const byte Byte_back = byte('S'); //команда: назад
const byte Byte_left = byte('A'); //команда: влево
const byte Byte_right = byte('D'); //команда: вправо
const byte Byte_stop = byte('x'); //команда: стоп

const byte all_delay = 1; //задержка выполнения повтора программы, [мс]

byte Din[8] = {0, 0, 0, 0, 0, 0, 0, 0};
byte Data = 0;
byte ctrl = B00000000; //управляющий регистр
//ctrl[0]: =1 - в структуре собранного пакета обнаружены ошибки
//ctrl[1]: =1 - получены данные

void setup() {
  pinMode(LEDpin, OUTPUT);
  Serial.begin(UART_Speed);
}

void loop() {
  if (Serial.available() > 7) {
  		
    int i;
    for (i = 0; i < 8; i++) { //загрузка и проверка структуры пакета
      Din[i] = Serial.read();
      if (Din[i] != Byte_forward && Din[i] != Byte_back && Din[i] != Byte_left && Din[i] != Byte_right && Din[i] != Byte_stop) {
      ctrl |= 1<<0;
      }
    }
      
    if ((ctrl & (1<<0)) == 0) { //если пакет правильный
      ctrl |= 1<<1; //пакет собран и он без ошибок
      Data = Din[0]; //данные полученные по UART
    }
    ctrl &= ~(1<<0);
  }

  if ((ctrl & (1<<1)) != 0) { //если получена команда
    switch (Data) {
      case Byte_forward:
        _forward();
        break;
		
      case Byte_back:
        _back();
        break;

      case Byte_left:
	_left();
        break;

      case Byte_right:
	_right();
        break;

      case Byte_stop:
	_stop();
        break;
		
      default:
        break;
    }
    ctrl &= ~(1<<1); //сбрасываем бит регистра управления после отработки пришедшего пакета
  }
	
  delay(all_delay);
  
}

void _forward() {
  digitalWrite(LEDpin, HIGH);
}

void _back() {
  digitalWrite(LEDpin, HIGH);
}

void _left() {
  digitalWrite(LEDpin, HIGH);
}

void _right() {
  digitalWrite(LEDpin, HIGH);
}

void _stop() {
  digitalWrite(LEDpin, LOW);
}
cyberbot вне форума   Ответить с цитированием
Старый 26.03.2015, 23:55   #178
Alex19279
Senior Member
 
Регистрация: 20.09.2014
Сообщений: 145
Вес репутации: 0
Alex19279 will become famous soon enough
По умолчанию Re: Модуль "CyberBot-2"

В скетчах ардуинок не соображаю, был бы голый ассемблер - само то.
Подпрограмма наполнения буфера (чтения уарт) - она у вас не в прерывании? Если нет, потеря байт всяко будет. Пошаговая отладка в ардуинках есть? или после компиляции сразу код на исполнение? и фиг его знает что там в мозгах мк происходит.
В proteus смоделируйте вашу схему и работу мк. Данные сбрасывайте в озу, сразу будет видно где грабли.
Alex19279 вне форума   Ответить с цитированием
Старый 27.03.2015, 01:09   #179
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1311
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию Re: Модуль "CyberBot-2"

Цитата:
если отослать две строки по WWWW
Призрак конца строки)

Вот так:
Цитата:
void loop() {
if (Serial.available() > 7) {

int i;
for (i = 0; i < 8; i++) { //загрузка и проверка структуры пакета
//Din[i] = Serial.read();
Serial.println(Serial.read());
if (Din[i] != Byte_forward && Din[i] != Byte_back && Din[i] != Byte_left && Din[i] != Byte_right && Din[i] != Byte_stop) {
ctrl |= 1<<0;
}
}
Можно посмотреть что в буфере.

Последний раз редактировалось stD; 27.03.2015 в 01:42.
stD вне форума   Ответить с цитированием
Старый 27.03.2015, 06:32   #180
cyberbot
Member
 
Регистрация: 10.03.2015
Сообщений: 40
Вес репутации: 0
cyberbot is an unknown quantity at this point
По умолчанию Re: Модуль "CyberBot-2"

Эх, если б так всё просто было ))) У меня не получается в модуле терминала данные принять.
cat /dev/ttyUSB0 - в браузере секунд 20 крутится типа обновление страничики, потом ничего не происходит - не вижу в терминале ничего, аналогично и вывод в файл - файл создается, но в него ничего не пишется. Т.е. не могу я получить данные с ардуинки.
cyberbot вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 4 (пользователей: 0 , гостей: 4)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 18:17. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика