Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GSM сигнализация, AT90S2313 
:(
    Опции темы
SloganGray
  Дата 5.5.2006, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.4.2006
Где: Республика Белару сь

Репутация: нет
Всего: нет



Есть прога сигнализации посылающая СМС-ку при замыкании шлейфа (работает в паре с телефоном)
как сделать чтобы она работала на разрыв а не на замыкание шлейфа

Код


/*
    file: "main._c"
*/

#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <string.h>
#include "uart.h"

#define nop() {asm("nop");}

const char szATZ[] PROGMEM = "ATZ\x0d";
const char szATE0[] PROGMEM = "ATE0\x0d";
const char szATCPBS[] PROGMEM = "AT+CPBS=\"SM\"\x0d"; // выбираем записную книжку SIM
const char szATCPBR[] PROGMEM = "AT+CPBR=1\x0d"; // читаем из 1й ячейки SIM
const char szATE1[] PROGMEM = "ATE1\x0d";
const char szATCMGS[] PROGMEM = "AT+CMGS=56\x0d"; // начинаем слать SMS
const char szATSMSStart[] PROGMEM = "0011000B91"; // заголовок СМС

//ТРЕВОГА! Ударный дат.
//0011000B919712674523F10008AA2A0422042004150412041E04130410002100200423043404300440043D044B04390020043404300442002E
const char szSMSShock[] PROGMEM = "0008AA2A0422042004150412041E04130410002100200423043404300440043D044B04390020043404300442002E\x1a\x0d";
//ТРЕВОГА!    Багажник.
//0011000B919712674523F10008AA2A0422042004150412041E041304100021002000200020002004110430043304300436043D0438043A002E
//ТРЕВОГА!Откр.Багажник
//0011000B919712674523F10008AA2A0422042004150412041E041304100021041E0442043A0440002E04110430043304300436043D0438043A
const char szSMSTrunk[] PROGMEM = "0008AA2A0422042004150412041E041304100021041E0442043A0440002E04110430043304300436043D0438043A\x1a\x0d";

//ТРЕВОГА! Откр. двери.
//0011000B919712674523F10008AA2A0422042004150412041E0413041000210020041E0442043A0440002E002004340432043504400438002E
const char szSMSDoors[] PROGMEM = "0008AA2A0422042004150412041E0413041000210020041E0442043A0440002E002004340432043504400438002E\x1a\x0d";

//ТРЕВОГА! Откр. капот.
//0011000B919712674523F10008AA2A0422042004150412041E0413041000210020041E0442043A0440002E0020043A0430043F043E0442002E
const char szSMSHood[] PROGMEM =  "0008AA2A0422042004150412041E0413041000210020041E0442043A0440002E0020043A0430043F043E0442002E\x1a\x0d";

//Внимание! Нет питания
//0011000B919712674523F10008AA2A0412043D0438043C0430043D0438043500210020041D043504420020043F043804420430043D0438044F
const char szSMSPower[] PROGMEM = "0008AA2A0412043D0438043C0430043D0438043500210020041D043504420020043F043804420430043D0438044F\x1a\x0d";

char szSMSRecipientNumber[15] = "+78121234567"; // в полном формате

void SendSMS(char cause);
void Init(void);
char Send_Receive(PGM_P pSend, int nBytes); // nBytes = 0 - тогда посылать до конца строки=0
void DiagOut(unsigned char n);
void wait_1ms(unsigned char ms);
void wait_1s(unsigned char s);

/*
    Возврат Send_Receive:
    0 = OK
    1 = ERROR
    2 = timeout
    3 - неизвестное сообщение
*/

int main(void)
{
    Init();

    DiagOut(1);

    while(1)
    {
        wait_1ms(250);
        
        if(Send_Receive(szATZ, 0) != 0)
        {
            char i=8;
            while(i--)
                wait_1ms(250);
            DiagOut(2);
            continue;
        }
//        else DiagOut(0x82); 

        if(Send_Receive(szATE0, 0) != 0)
            DiagOut(2); 

    //================AT+CPBS="SM"===получаем доступ к сим ======
        if(Send_Receive(szATCPBS, 0) != 0)
            DiagOut(3); 
//        else DiagOut(0x83); 

    // получим ответ типа OK

    //================AT+CPBR=1 ===читаем из 1 ячейки ======
        UART_ClearRxBuf();
        UART_outstr_P(szATCPBR);
    // получим ответ типа +CPBR: 1,"+79217444347",145,"       "\x0dOK
        wait_1ms(250);
        wait_1ms(250);
    
        char nRecv = 0;
        char* pBuf = UART_Recv(&nRecv);
        if(nRecv < 12)
        {
            DiagOut(4); // нет номера
            continue;
        }
//        else DiagOut(nRecv+0x80); 

        unsigned char cp = 0;
        while(pBuf[cp])
        {
            if(pBuf[cp]=='O')
            {
                DiagOut(4); 
                cp = 240; // признак ошибки
                break;
            }
            if(pBuf[cp]=='B') // +CPBR
            {
                DiagOut(0x81); 
                break;
            }
            cp++;
        }
        if(cp > 128)
            continue; // ошибка

        while(pBuf[cp])
        {
            if(pBuf[cp]=='\"' && pBuf[cp+1]=='+'/* && pBuf[cp+13]=='\"'*/)
            {
                // нашли "+
                szSMSRecipientNumber[0] = pBuf[cp+1+2]; // 8
                szSMSRecipientNumber[1] = pBuf[cp+1+1]; // 7
                szSMSRecipientNumber[2] = pBuf[cp+1+4]; // 2
                szSMSRecipientNumber[3] = pBuf[cp+1+3]; // 1
                szSMSRecipientNumber[4] = pBuf[cp+1+6]; // 0
                szSMSRecipientNumber[5] = pBuf[cp+1+5]; // 9
                szSMSRecipientNumber[6] = pBuf[cp+1+8]; // 4
                szSMSRecipientNumber[7] = pBuf[cp+1+7]; // 3
                szSMSRecipientNumber[8] = pBuf[cp+1+10]; // 6
                szSMSRecipientNumber[9] = pBuf[cp+1+9]; // 5
                szSMSRecipientNumber[10] = 0x46; // F
                szSMSRecipientNumber[11] = pBuf[cp+1+11]; // 7
                szSMSRecipientNumber[12] = 0; // EOS
                DiagOut(0x82); 
                cp = 241;
                break;
            }
            cp++;
        }

        if(cp < 220)
        {
            DiagOut(5); // нет плюса в номере
            continue;
        }

        // теперь рабочий цикл
        unsigned char FirstRun = 1;
        unsigned char CountLED = 0;
        while(1)
        {
            while(bit_is_set(PIND, 6))
            {
                if(FirstRun > 100)
                {
                    cbi(PORTB,7);
                    FirstRun = 1;                
                }
                wait_1ms(100);
                sbi(PORTB,7);
                FirstRun++;
            }
            wait_1ms(50); // защита от дребезга
            if(bit_is_set(PIND, 6))
                continue;
            
            if(FirstRun) // если только что поставили на охрану
            {
                wait_1s(10); // ждем 10 секунд перед постановкой на охрану
                FirstRun = 0;
            }
            
            // помигиваем светодиодом
            if(++CountLED & 0x8)
                cbi(PORTB,7);
            else
                sbi(PORTB,7);

            // опрос шлейфов
            char i;
            for(i=2; i<6; i++)
            {
                if(bit_is_clear(PIND, i)) 
                {
                    char c;
                    for(c = 0; c<5; c++)
                    {
                        wait_1ms(40); // защита от дребезга
                        if(bit_is_set(PIND, i))
                            break;
                    }
                    if(c == 5) // все 5 раз шлейф был замкнут на землю
                    {
                        if(i == 4) // двери - ждем 5 с
                        {
                            wait_1s(5);
                            if(bit_is_set(PIND, 6)) // если за это время выключили охрану
                                continue; // ничего не посылаем
                        }
                        SendSMS(i);
                        continue;
                    }
                }
            }
            
            if(bit_is_clear(PINB, 2)) // питание
            {
                wait_1ms(200); // защита от дребезга
                wait_1ms(200); // защита от дребезга
                wait_1ms(200); // защита от дребезга
                if(bit_is_clear(PINB, 2))
                {
                    SendSMS(11); // питание пропало!
                    continue;
                }
            }
        }// while(1)
    } // while(1)

    return 0;
}


void Init(void)
{
    DDRB = 0x80; // Нога 19 - выход, светодиод
    DDRD = 2; // остальные - входы, TX = выход
    PORTB = 0x7f; 
    PORTD = 0xfd;
    UART_Init();
}

char Send_Receive(PGM_P pSend, int nBytes)
{
    char timer = 0;

    UART_ClearRxBuf();

    UART_outstr_P(pSend);
 
//    wait_1ms(250);

    for(timer = 0; timer < 10; timer++)
    {
        char n = 0;
        
        wait_1ms(150);

        char* pBuf = UART_Recv(&n);
        if(strchr(pBuf, 0x0d)) // если есть конец строки
        {
            if(strstr(pBuf, "OK"))
                return 0;
            if(strstr(pBuf, "ERROR"))
                return 1;
            return 3; // неизвестная ошибка
        }
    }

    return 2; // timeout
}

// старший бит указывает на то, что вспышки д.б. короткими
void DiagOut(unsigned char n)
{
    unsigned char len = 150;
    if(n&0x80)
        len = 50;

    while(n&0x7f)
    {
        cbi(PORTB,7);
        wait_1ms(len-20);
        sbi(PORTB,7);
        wait_1ms(len);
        n--;
    }
    wait_1s(1);
}


void SendSMS(char cause)
{
    PGM_P psz = NULL;
    switch(cause)
    {
    case 2: // удар
        psz = szSMSShock;
        break;
    case 3: // багажник
        psz = szSMSTrunk;
        break;
    case 4: // двери
        psz = szSMSDoors;
        break;
    case 5: // капот
        psz = szSMSHood;
        break;
    case 11: // пропало питание
        psz = szSMSPower;
        break;
    default:
        break;
    }

    if(psz) // если аргумент правильный
    {
        // отправляем SMS
        UART_ClearRxBuf();
        UART_outstr_P(szATCMGS); // начинаем отправку
        char n = 0;
        unsigned char nLoops = 0;
        char* p = NULL;
        while(!n)
        {
            wait_1ms(10);
            p = UART_Recv(&n); // от трубы должен прийти знак ">"
            if(++nLoops > 150)
            {
                DiagOut(2); // нет подтверждения от трубы
                break;
            }
        }
        if(*p != '>' && p[1] != '>' && p[2] != '>')
        {
            DiagOut(3); // нет подтверждения от трубы
        }
        else
        {
            UART_outstr_P(szATSMSStart); // 0001000B91
            UART_outstr(szSMSRecipientNumber); // номер подготовлен заранее
            UART_outstr_P(psz); // строка СМС подготовлена заранее, 0х1а в конце
            cbi(PORTB,7);
            wait_1s(150);
            wait_1s(150);
            sbi(PORTB,7);
        }
    }
}

/*
void SendStr(char * s)
{
    while(pgm_read_byte(s)) Send(pgm_read_byte(s++));
}
            */                                       

void wait_1ms(unsigned char ms)
{
    while(ms)
    {
        short int i;
        for(i=0; i<560; i++)
            inp(PINB);
        ms--;
    }
}

void wait_1s(unsigned char sec)
{
    while(sec)
    {
        wait_1ms(250);
        wait_1ms(250);
        wait_1ms(250);
        wait_1ms(250);
        sec--;
    }
}


#define SIZERX 32
char arRx[SIZERX];
unsigned char posRx = 0;

// прерывание происходит по приходу байта
SIGNAL(SIG_UART_RECV)      
{
    arRx[posRx] = inp(UDR);        
    posRx++;
    if(posRx >= SIZERX)
        posRx--;
}


void UART_Init(void)
/* initialize uart */
{
    /* enable RxD/TxD and ints */
    outp((1<<RXCIE)|/*(1<<TXCIE)|*/(1<<RXEN)|(1<<TXEN),UCR);       
    /* set baud rate */
    outp((unsigned char)UART_BAUD_SELECT, UBRR);          
}

void UART_outstr_P(PGM_P str)
{
    unsigned char i = 0;
    while(1)
    {
        char c = pgm_read_byte(&str[i]);
        if(!c)
            break;
        outp(c, UDR);
        loop_until_bit_is_set(USR, UDRE);
        i++;
    }
}

void UART_outstr(char* psz)
{
    unsigned char i = 0;
    while(1)
    {
        char c = psz[i];
        if(!c)
            break;
        outp(c, UDR);
        loop_until_bit_is_set(USR, UDRE);
        i++;
    }
}

char* UART_Recv(char* pnRecv)
{
    *pnRecv = posRx;
    return arRx;
}

void UART_ClearRxBuf(void)
{
//    unsigned char  i;
    cli();
    memset(arRx, 0, SIZERX);
/*    arRx[0] = 0;
    arRx[1] = 0;
    arRx[2] = 0;
    arRx[3] = 0;
    arRx[4] = 0;
    arRx[5] = 0;
    arRx[6] = 0;
    arRx[7] = 0;
    arRx[8] = 0;
    arRx[9] = 0;
    arRx[10] = 0;
    arRx[11] = 0;
    arRx[12] = 0;
    arRx[13] = 0;
    arRx[14] = 0;
    arRx[15] = 0;
    arRx[16] = 0;
    arRx[17] = 0;
    arRx[18] = 0;
    arRx[19] = 0;
    arRx[20] = 0;
    arRx[21] = 0;
    arRx[22] = 0;
    arRx[23] = 0;
    arRx[24] = 0;
    arRx[25] = 0;
    arRx[26] = 0;
    arRx[27] = 0;
    arRx[28] = 0;
    arRx[29] = 0;
    arRx[30] = 0;
    arRx[31] = 0;*/
    posRx = 0;
    sei();
}



  

Это сообщение отредактировал(а) ManiaK - 20.6.2006, 15:06
PM MAIL WWW   Вверх
ShadeSt
Дата 6.5.2006, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 9.8.2005
Где: Россия, г. Ставро поль

Репутация: 4
Всего: 7



Тяжело в таком виде читать код..
Насколько я понял все датчики висят на PORTD, при этом схема выглядет примерно так
Код

             +
             |
           R| |  |
   _____/  __|___| MCU
  |              |
 --- GND


Надо немного поменять условия в цикле опроса шлейфов
Код

 // опрос шлейфов
            char i;
            for(i=2; i<6; i++)
            {
                if(bit_is_clear(PIND, i))  // ЗАМЕНИТЬ НА  bit_is_set
                {
                    char c;
                    for(c = 0; c<5; c++)
                    {
                        wait_1ms(40); // защита от дребезга
                        if(bit_is_set(PIND, i))  // ЗАМЕНИТЬ НА  bit_is_clear
                            break;
                    }
                    if(c == 5) // все 5 раз шлейф был замкнут на землю
                    {
                        if(i == 4) // двери - ждем 5 с
                        {
                            wait_1s(5);
                            if(bit_is_set(PIND, 6)) // если за это время выключили охрану //????
                                continue; // ничего не посылаем
                        }
                        SendSMS(i);
                        continue;
                    }
                }
            }


вроде так, если я правильно ошибаюсь, только вот с 
Код

                        if(i == 4) // двери - ждем 5 с
                        {
                            wait_1s(5);
                            if(bit_is_set(PIND, 6)) // если за это время выключили охрану //????
                                continue; // ничего не посылаем
                        }


немогу понять..  по идее проверка, если дверь открыли (датчик не замкнут), у нас получится, наоборот, если откроют дверь, то он будет замкнут и будет ноль, тогда проверять на bit_is_clear. Что -то я тут окончательно запутался.

Еще можно решить проблему железно - поставить инверторы между контроллером и датчиками.

а схему можно глянуть? 

Это сообщение отредактировал(а) ShadeSt - 6.5.2006, 09:11


--------------------
It's nice to be importand, but it's more importand to be nice © Scooter
PM MAIL ICQ Jabber   Вверх
SloganGray
Дата 6.5.2006, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.4.2006
Где: Республика Белару сь

Репутация: нет
Всего: нет



Спасибо!!!!!!!!
Может знаешь как эту сигналку с ключём "Таблетка" обучить работать?

Описание смотри ниже

http://www.gsmpager.spb.ru/ 
PM MAIL WWW   Вверх
SloganGray
Дата 6.5.2006, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.4.2006
Где: Республика Белару сь

Репутация: нет
Всего: нет



По поводу твоего вопроса

 if(i == 4) // двери - ждем 5 с    
                        {    
                            wait_1s(5);    
                            if(bit_is_set(PIND, 6)) // если за это время выключили охрану //????    
                                continue; // ничего не посылаем    
                        }

тут завязана такая хрень что сигналка срабатывает через 5  секунд если не нажата "Секретная кнопка"  

Это сообщение отредактировал(а) SloganGray - 6.5.2006, 23:59
PM MAIL WWW   Вверх
ShadeSt
Дата 8.5.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 9.8.2005
Где: Россия, г. Ставро поль

Репутация: 4
Всего: 7



Цитата(SloganGray @  6.5.2006,  23:41 Найти цитируемый пост)
Может знаешь как эту сигналку с ключём "Таблетка" обучить работать?


Теоретически не сложно, а практически никогда этим не занимался. Видел, только человечек один делал коробочку, которая с одной стороны была как "таблетка", а с другой стороны у нее была читалка для этих самых "таблеток", вобщем она запоминала 100 ключей, и нужным всегда можно было воспользоваться.
 


--------------------
It's nice to be importand, but it's more importand to be nice © Scooter
PM MAIL ICQ Jabber   Вверх
PILOT
Дата 9.5.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: 20
Всего: 54



Мои рассуждения:

Если человек не имеет возможности (не хочет, не может, лень, другая профессия и т.п.) что-то сделать, но спрашивает об этом, то есть 2 варианта:
1) Человек хочет сам разобраться и сделать
2) Человек хочет чтоб ему все сделали с минимальными затратами (т.е. бесплатно)

Вывод, если нужно что-то сделать, причем самому, то нужно сделать первые шаги прежде чем задавать более конкретный вопрос, нежели: "хочу чтоб было так". Если же разбираться не хочется, то услуга по написанию целого модуля общения по однопроводному интерфейсу с таблеткой вообще говоря небесплатная и реализуема за определенное вознаграждения в течение 2-3х дней если человек с таблеткой никогда не воевал или в течении 2-3 часов если опыт имеется (а то и того меньше).

Итог: 
есть 2 варианта:
1) Вы разбираетесь сами в проблеме (делаете попыту, приводите исходники, ворошите документацию) и лишь потом задаете вопрос
2) Вы не имеете возможности (желания) писать объемный кусок кода и ищете возможность сделать эту работу на стороне за определенное вознаграждение.

Какой вариант Ваш?

СУВ. 


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
SloganGray
Дата 11.5.2006, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.4.2006
Где: Республика Белару сь

Репутация: нет
Всего: нет



PILOT
Мне подходят оба варианта сейчас объясню почему:

1) Я хочу разабраться и сделать
2) Мои знания в этой области слабоваты
3) Я бы и рад заплатить но незнаю такого человека (в своем городе) который бы это сделал
4) Я не знаю сколько это стоит
5) С таблетками не встречался

Поэтому чтобы хоть как-то реализовать свой проект задаю вопросы.

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




 
PM MAIL WWW   Вверх
ShadeSt
Дата 11.5.2006, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 9.8.2005
Где: Россия, г. Ставро поль

Репутация: 4
Всего: 7



Почитай тут: Touch Memory - электронный идентификатор
а потом посмотри:
Имитатор ключей iButton
Имитатор touch-memory DS1990A

Вобщем-то тут есть еще ссылки на оф.сайт и на описание стандарта шины  1-Wire, почти все отправят сюда: http://www.ibutton.com/
 
Сначала надо будет научится читать ключики, а потом можно будет и к сигнализации прикрутить. Правда, насколько я понял, для экспериментов желательно иметь считыватель, ну или надо будет придумать какую нибудь конструкцию, для того, что бы обеспечить нормальный контакт с ключом. 

Это сообщение отредактировал(а) ShadeSt - 11.5.2006, 08:36


--------------------
It's nice to be importand, but it's more importand to be nice © Scooter
PM MAIL ICQ Jabber   Вверх
PILOT
Дата 11.5.2006, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: 20
Всего: 54



Цитата(SloganGray @ 10.5.2006,  22:53)
PILOT
Мне подходят оба варианта сейчас объясню почему:

1) Я хочу разабраться и сделать
2) Мои знания в этой области слабоваты
3) Я бы и рад заплатить но незнаю такого человека (в своем городе) который бы это сделал
4) Я не знаю сколько это стоит
5) С таблетками не встречался

Поэтому чтобы хоть как-то реализовать свой проект задаю вопросы.

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

Тебе уже ответили где искать информацию, так что пробуй, там ничего сложного.

Теперь по порядку:
1) Обычно вся информация есть на сайтах производителей, например если таблетка DS, то нужно идти на сайт Dallas Semicinductor и искать файл в формате pdf (Acrobat Reader) такие файлы называются datasheet (информационный лист) - это не полная документация на микросхему, а лишь та часть которая нужна основному большинству разработчиков, в ней нет иникакой информации ни про испытания, ни про требования по надежности. Более подробная документация высылается по запросу.
2) см. 1
3) для того чтобы найти человека нужно его искать, например по конференциям по электронике бросить клич. Многие работают удаленно, но там встанет вопрос оплаты удаленно.
4) то о чем ты говоришь похоже на разработку модуля для работы с  TouchMem, у многих он уже написан, есть и исходники в интернете, но если ты не находишь, такая работа будет стоить 100$ (дальше в зав-ти от жадности разработчика), я бы больше за это не отдал.
5) ссылка в предыдущем посте поможет тебе.

СУВ.
 


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
SloganGray
Дата 13.5.2006, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.4.2006
Где: Республика Белару сь

Репутация: нет
Всего: нет



Спасибо за инфу!

Не сочтите за наглость но . . .

Появились еще два вопроса... Где (в каком месте указываеться длинна телефонного номера на который посылаеться смс). И как сделать чтобы постановка в режим охраны с снятие с вышеупомянутого производилась кратковременным замыканием контактов а не тумблером?


Еще раз Спасибо за инфу! Это по деловому. 
PM MAIL WWW   Вверх
ShadeSt
Дата 14.5.2006, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 9.8.2005
Где: Россия, г. Ставро поль

Репутация: 4
Всего: 7



Цитата(SloganGray @  13.5.2006,  21:01 Найти цитируемый пост)
в каком месте указываеться длинна телефонного номера на который посылаеться смс

А что не так с номером?

Вообще номер вытаскивается из первой ячейки сим карты в первом цикле while() в теле  main().
Код

   while(pBuf[cp])
        {
            if(pBuf[cp]=='\"' && pBuf[cp+1]=='+'/* && pBuf[cp+13]=='\"'*/)
            {
                // нашли "+
                szSMSRecipientNumber[0] = pBuf[cp+1+2]; // 8
                szSMSRecipientNumber[1] = pBuf[cp+1+1]; // 7
                szSMSRecipientNumber[2] = pBuf[cp+1+4]; // 2
                szSMSRecipientNumber[3] = pBuf[cp+1+3]; // 1
                szSMSRecipientNumber[4] = pBuf[cp+1+6]; // 0
                szSMSRecipientNumber[5] = pBuf[cp+1+5]; // 9
                szSMSRecipientNumber[6] = pBuf[cp+1+8]; // 4
                szSMSRecipientNumber[7] = pBuf[cp+1+7]; // 3
                szSMSRecipientNumber[8] = pBuf[cp+1+10]; // 6
                szSMSRecipientNumber[9] = pBuf[cp+1+9]; // 5
                szSMSRecipientNumber[10] = 0x46; // F
                szSMSRecipientNumber[11] = pBuf[cp+1+11]; // 7
                szSMSRecipientNumber[12] = 0; // EOS
                DiagOut(0x82); 
                cp = 241;
                break;
            }


Буфер под него выделен выше
Код

char szSMSRecipientNumber[15]

номер должен вернутся в сл. формате "'+12345678901"
    
Цитата(SloganGray @  13.5.2006,  21:01 Найти цитируемый пост)
кратковременным замыканием контактов

Завести дополнительную переменную, в которой будет хранится текущее состояние и немного модифицировать рабочий цикл
Код

0. Инициализировать переменную статуса нулем
1. опрос новой кнопки, с учетом дребезга контактов
    - если кнопка нажата, то "инвертируем" переменную статуса
2. если текущий статус == 0, то перейти к шагу 1
3. проверить датчики
4. перейти к шагу 1.

  

Это сообщение отредактировал(а) ShadeSt - 14.5.2006, 12:59


--------------------
It's nice to be importand, but it's more importand to be nice © Scooter
PM MAIL ICQ Jabber   Вверх
SloganGray
Дата 14.5.2006, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.4.2006
Где: Республика Белару сь

Репутация: нет
Всего: нет



Просто получаеться что обычный номер 12 знаков не считая "+" а там стоит 15.
Почему?
Значит если я изменю 15 на 12 то размер номера будет двенадцатизначным и ничего больше менять не нужно так?
szSMSRecipientNumber[15] 
PM MAIL WWW   Вверх
ShadeSt
Дата 15.5.2006, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 9.8.2005
Где: Россия, г. Ставро поль

Репутация: 4
Всего: 7



szSMSRecipientNumber - это просто буфер для хранения номера.
там дальше в коде есть такое:
Код

szSMSRecipientNumber[12] = 0; // EOS

т.е. ставим признак конца строки. Вот и получается, что номер будет 12 знаков. 


--------------------
It's nice to be importand, but it's more importand to be nice © Scooter
PM MAIL ICQ Jabber   Вверх
SloganGray
Дата 17.6.2006, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.4.2006
Где: Республика Белару сь

Репутация: нет
Всего: нет



 smile А что это такое я имею в виду может кто в кратце обьяснит для чего какой файл.
Откуда их брать т.е. они стандартные (библиотечные) или их нужно писать под каждую прогу?

#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <string.h>
#include "uart.h" 
PM MAIL WWW   Вверх
PILOT
Дата 19.6.2006, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: 20
Всего: 54



Стандартные. Их нужно найти у себя или скачать там, где недокачал.

СУВ. 


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0991 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.