Перейти к содержанию

motoalex

Members
  • Постов

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

  • Посещение

Весь контент motoalex

  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. Огромное спасибо, тем, кто мне помог) Тему можно закрыть.
  7. Вы очень сильно мне помогли, все работает, как часики. хочу Вас попросить об последней просьбе.Как сравнить два массива (один в памяти, а другой принятый по 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. Огромное спасибо Вам, Уважаемый, сделал почти как Вы говорите,но есть пару нюансов: 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++; } } }
×
×
  • Создать...