[uquote="N.guest",url="/forum/viewtopic.php?p=4055927#p4055927"]Внутри функции #define не видим - вылезает ошибка.[/uquote]
Странно в функции тоже дефайны должны работать. А вы файлы эти с функциями и дефайнами куда подключаете? Попробуйте в файл с функциями подключить файл с дефайнами, а файл с функциями в проект.
Очевидно функция пытается скомпилироваться раньше чем были приняты дефайны. Если они вообще приложены. Либо переносите их содержимое перед функциями.
Что значит несколько? С одинаковым именем?
Добрый день,у меня тоже вопрос по программированию МК в Atmel studio.
Вопрос такой:интересует алгоритм написания функции для МК AVR 32,
отправка показаний датчика через GSM модуль (SIM800C) по СМС на мобильник,
например:напряжение с АЦП(зарядное для акб.),
или запрос с мобильного баланса GSM модуля,
есть функция отправки смс с заранее написанными смс,
не могу понять как переделать функцию ,чтобы отправлять по смс ,
постоянно меняющиеся данные с датчика или запрос о балансе,
вот функция USART
void USART_SendString(char *str) /* Отправить строку функции данных USART */
{
int i=0;
while (str!=0)
{
USART_TxChar(str); /* Отправить каждый символ строки до NULL */
i++;
}
}
вот функция отправки смс:
void GSM_Send_Msg(char *num,char *sms)
{
char sms_buffer[35];
buffer_pointer=0;
sprintf(sms_buffer,"AT+CMGS=\"%s\"\r",num);
USART_SendString(sms_buffer); //*отправить команду AT+CMGS="Mobile No."\r */
while(1)
{
if(buff[buffer_pointer]==0x3e) //*ждать символа '>'*/
{
LCD_String_xy(1,0,"OTPRAVL1");
_delay_ms(3000);
LCD_Clear();
buffer_pointer = 0;
memset(buff,0,strlen(buff));
USART_SendString(sms); //* отправить сообщение на указанный nom. */
USART_TxChar(26);
USART_TxChar(0); //* отправьте Ctrl + Z, тогда будет передаваться только сообщение*/
break;
}
buffer_pointer++;
}
Ну так вызывай свою функцию GSM_Send_Msg в основном коде. Первый параметр это номер телефона, а второй текст. Только учти что на латинице можно отправить только 160 символов, а на других языках сначала нужно текст перекодировать и получить ограничение 70 символов (кроме немецкого и французского, там 140 символов).
Всем доброго времени.
Подскажите где ошибка в коде:
void USART_TxChar(char data) /* Функция передачи данных */
{
UDR = data /* Запись данных для передачи в UDR */
while (!(UCSRA & (1<<UDRE))); /* Подождите, пока передача данных и буфер не опустеют */
}
Код работает,смс приходит,но приходит постоянно одна цифра 5 и всё,
откуда цифра 5 берётся?
судя по функции: if(buff[buffer_pointer]!= '\r') данные с балансом там есть,
отправлял в терминал USART_TxChar(buff[buffer_pointer])
в терминале всё как положено:"Balance:27,35r"
в какое направление копать?
slav0n,а что не так с оформлением кода,а как надо оформлять?
напишите пример оформления кода.
Это часть программы.
нашёл причину, в коде теряются данные
while(buff[buffer_pointer]!= '\r') //Принятое сообщение о балансе SIM из буфера//
{
данные приходят,отладчика к сожалению нет,поэтому пользуюсь терминалом.
Вопрос по существу как сохранить данные в массиве,что бы не терялись даже после выхода из функции?
Повторю msg_location[buffer_dannye] и buff[buffer_pointer] глобальные.
while (buff[buffer_pointer] != '\r') //Принятое сообщение о балансе SIM из буфера//
{
msg_location[buffer_dannye] = buff[buffer_pointer++];
}
Ты каждый раз, одному и тому-же элементу массива msg_location присваиваешь новое значение. Так-же ты проверяешь один элемент, а присваиваешь следующий.