motoalex

Members
  • Публикации

    82
  • Зарегистрирован

  • Посещение

Репутация

-1 Плохой

О motoalex

  • Звание
    Осваивающийся
  • День рождения 20.06.1990

Контакты

  • ICQ
    447233720

Информация

  • Пол
    Мужчина
  • Интересы
    Гимнастика, лёгкий бег, турник, электроника,природа.
  • Город
    Дзержинск, Украина. Сейчас Ульяновск, Россия

Электроника

  • Стаж в электронике
    1-2 года
  • Сфера радиоэлектроники
    Микроконтроллеры
  1. Благодарю Вас ребята за помощь. Я не совсем понимал момент копирования из буфера данных UART и помещение его в массив. Т.к. пытался изменить код на другой в итоге значение j увеличивалось на 4, но никак не на 13. Также думал, что пока if(Serial.available()>0), он будет записывать в буфер данные, и когда прием будет закончен, тогда и выйдет из цикла. Спасибо ребята Вам!!! С Новым Годом, здоровья, счастья и всех благ в 2018 году. С праздником))))
  2. Через serial print данные выводятся, без проблем. Пробовал объявить переменную int j; j=125; serial.print(125) . Выводит в терминале значение переменной. Т. е. 125
  3. Прошу прощения, Я ожидаю увидеть значение 13. Т.е. количество совпадений. А в терминале получаю "1418181815"
  4. Благодаря Вас за внимание. Смотрите, Я посылаю с терминала номер +79171234567899, на ардуино принимаю, если буфер больше 0, обрабатываю данные. Записываю их в новый буфер (Buff). Потом создаю цикл. В котором сравниваю массив src и Buff. Если данные совпадают, вывожу значение переменной int. Заметил одну ошибку. Исправлю, попробую запустить.
  5. Здравствуйте, написал код для приема данных по UART. Записываю данные в буфер и сравниваю его с массивом. Если все данные совпадают увеличиваю значение j до 13. И вывожу данные j ком порт. Пожалуйста помогите исправить код, а то в UART хлам сыпется. unsigned char Buff[250]; unsigned char BuffIndex; unsigned char src[]= {'+','7','9','1','7','6','3','0','0','0','0','0','0'}; char * pch; int f2=0,i,j=0; void setup() { Serial.begin(9600); memset(Buff, '\0', 250); // Initialize the string BuffIndex=0; } void loop() { while(1) { //BuffIndex=0; // put your main code here, to run repeatedly: if(Serial.available()>0) { Buff[BuffIndex] = Serial.read(); BuffIndex++; if(BuffIndex>250) { BuffIndex=0; } for(i=0;i<=13;i++) { if(Buff[i]==src[i]) { j++; f2=10; } } if(j>13 && f2==10) { Serial.print(j); j=0; f2=0; } } } }
  6. Stm32 Прием Данных По Usart И Вывод На Hd44780

    Огромное спасибо, тем, кто мне помог) Тему можно закрыть.
  7. Stm32 Прием Данных По Usart И Вывод На Hd44780

    Вы очень сильно мне помогли, все работает, как часики. хочу Вас попросить об последней просьбе.Как сравнить два массива (один в памяти, а другой принятый по usart). char massive[]={'S','U','P','R','I','M','A','1','2','3','4','5'}; // massive buffer *********************************** while(1) { if(f2==1) // флаг на конец строки { if (f4==0) флаг на работу с массивами { if (massive[i3]==str1[i3]) // сравниваем наши массивы { i3++; if(i3==12) { f4=1; //обнуляем флаг f3=1; // идем на печать строки в ЖКИ } } } if(f3==1) { LCD_Send_String8(0, str1); i3=0; f2=0; f3=0; } } } } В моем случае не правильно сравниваю данные в массиве. Точней не правильно пишу алгоритм.
  8. Stm32 Прием Данных По Usart И Вывод На Hd44780

    Огромное спасибо Вам, Уважаемый, сделал почти как Вы говорите,но есть пару нюансов: 1. sprintf(str1, "%s", USART_ReceiveData(USART2)); - не корректно выводит данные на ЖКИ, Я в прерывании по выставлению флага, сделал ещё одно условие и там пишу в Recieve_buff[Recieve_W]. И его уже вывожу на ЖКИ - всё славно. 2. Конец строки ловлю тоже в прерывании символом конца строки. Но есть ещё пару вопросов, когда лучше обнулять переменную Recieve_W буфера Recieve_buff[], так как выполнение этой операции в прерывании не всегда выводит последний отправленный символ.
  9. Здравствуйте уважаемые любители МК) Пытаюсь организовать такую задачу на STM32f407VG: 1. Принимаем данные по USART, помещаем их во временный буфер( Recieve_buff). 2. Если попадается символ '+' читаем (Recieve_buff) и записываем данные после '+' в массив данных (massive). 3. Выводим данные на жки wh1602. с 1 и 3 пунктом проблем как бы нет, но вот со вторым вовсе не клеится. К примеру: отправляю +suprima, после 1, а то и 3 отправки приходит только один символ 's', т.е. и не каждый раз выводятся данные. Прошу помощи у Гуру сообщества. Всем Благ! #include "main.h" uint16_t delay_count=0; uint32_t i; uint32_t i3; int i2=123; char str1[50]; uint8_t massive[256]; // massive buffer uint8_t Recieve_buff[256]; // recieved buffer uint8_t Recieve_W=0, Recieve_R=0, Recieve_C=0; char Send_buffer[100]; uint8_t Send_count=0; void SysTick_Handler(void)// counter { if (delay_count > 0) { delay_count --; } } void(delay_ms(uint16_t delay_temp)) // schitayem nashe vremya, kotoroe zadano v osnovnom tele { delay_count = delay_temp; while(delay_count) {} } //---------------------------------------------------// //recieved data interrupt //---------------------------------------------------// void USART2_IRQHandler(void) { if(USART_GetITStatus(USART2, USART_IT_RXNE) == SET) // if flag interrupt set up we will do next... { USART_ClearITPendingBit(USART2, USART_IT_RXNE); // reset interrupt Recieve_buff[Recieve_W] =USART_ReceiveData(USART2); Recieve_W++; Recieve_C++; } } //---------------------------------------------------// int main(void) { USART2_init(); SystemCoreClockUpdate(); SysTick_Config(SystemCoreClock/1000);// 1ms delay_ms(50); LCD_ini(); while(1) { if(Recieve_C>0) { if(Recieve_buff[Recieve_R++]=='+') { massive[i3++]=Recieve_buff[Recieve_R++]; sprintf(str1, "%s", massive); //sprintf(str7, "%s %d %s", "one", i2, str); LCD_Send_String8(0,str1); } Recieve_C--; Recieve_R++; } } }
  10. Энкодер + Шаговый Двигатель

    В общем сменил компилятор CVAVR на AVR Studio 6.1 и все заработало. Проблема в том, что код у них отличается и придется все наново лопатить. Всем спасибо!
  11. Энкодер + Шаговый Двигатель

    Ребята запустил два таймера ( Т0 и Т1), но работает к сожалению только один (Т1). А второй завис. Прошивку прилагаю. menu.rar
  12. Энкодер + Шаговый Двигатель

    Исправил! Ребята а кто может подсказать по таймерам в code wizard Интересует Timer0: 1. Во вкладке clock source ( есть три параметра: system clock; T1 pin Falling Edge; T1 pin Rising Edge) - в первом случае считает от кварца, со второго и третьего по спаданию или возрастанию значения, где (порт или нога МК) и какая величина должна изменяться? 2. Вкладка MODE, что к чему не пойму? 3. Вкладка OUTPUT: Toggle on compare match - переключение по совпадению; Clear on compare match - Очистить, по совпадению; Set on compare match - Установить по совпадению. Как их можно использовать, точней как они работают? 4. Ну и последнее, есть два окна: Timer Value и Compare, что сделать, чтобы у меня прерывание выполнялось 1 раз за секунду. В Timer2 я брал значение Clock Value и переводил его в 16-ный код, получал 4 числа после их записывал в окно Compare, в timer0 в это окно помещается только два значения. Спасибо, тем кто откликнулся! menu.rar
  13. Энкодер + Шаговый Двигатель

    Понял, а как изменить код, чтобы он выполнял только по прерыванию столько раз, сколько передает энкодер?
  14. Энкодер + Шаговый Двигатель

    Смотрите, цикл будет выполняться пока значение посередине не станет ложным, т.е., когда будет i=2, цикл for должен завершиться и программа должна выполняться дальше!
  15. Энкодер + Шаговый Двигатель

    Дико извиняюсь, когда писал тему, выбрал файл, но не прикрепил его!