ардуино и андроид связь через GPRS с модулем M590e
- Войдите на сайт для отправки комментариев
Здраствствуйте ищу помошника, наставника, и кому это все интересно, будем разбиратся вместе или если вы профи и у вас есть время повозится со мной то я буду очень рад! есть проект GSM сигнализации с автозапуском на ардуино, используется там модуль gsm М590е, все работает отлично! от звонка запускает авто, с проверками скорости и т.д. плюс туда подключил брелок от сигнализации, который ставит на охрану автомобиль, снимает с охраны, и открывает багажник. уже портотип стоит в авто и катается около 2-ух месяцев, глюки некоторые постепенно убираются и добавляется функционал, щас стоит вопрос создания отдельного куска кода на соединение и управление всем этим (для меня "чудом") через интернет, приложение на смартфоне написать смогу(конечно пользуясь примерами) вопрос в том что не знаю как создать сервер для связи приложения и автомобиля, как реализовать связь с помощью GET запросов.
Перечитал много информации по этому поводу, и нашел проблему всех людей. что бы устройство всегда работало и можно было им управлять постоянно, оно отправляет слишком много запросов на сервер, тем самым съедая много трафика, выход из этого придумал что бы ардуино начала соединятся с интернетом надо сделать звонок с телефона, реализуется звонок программно из приложения на андроид, т.е. при запуске приложения, сначала идет звонок на ардуино, ардуиносвязывается с сервером и посылает на него какую-то команду, например connect_OK вместе с ним посылается состояние авто, т.е. двери закрыты, тревога в норме, двигатель заглушен, тогда приложение в телефоне становится активным и все данные уже проходят через интернет, в приложении активные кнопки, с которых можно управлять автосигнализацией, после всего этого можно закрыть приложение, посылая на сервер команду отсоединить gprs модуль от интернета, и сигнализации переходит на режим звонок, т.е. по любой причине начинает звонить на телефон. и остается либо бежать к авто либо зайти в приложение и посмотреть что с ней, либо отправить допустим смс с командой "status" и она отсылает ответное смс с состоянием авто.
что совсем нет никого кто мог помочь? или я что-то не правильно описал
Все правильно.
только если не можешь сделать сам- иди в тему насчет разработки за оплату. Если можешь сам - то делай. На конкретные проблемы с конкретным устройством возможно откликнутся. хотя не факт. Но опять эе это касается конкретных внятно описанных проблем с публикацией алгоритма, кода и железа.
А вопрос "давайте вы за меня сделаете" нужно задавать только в теме "платные услуги"....
А с учебниками, даташитами и прочей документацией сейчас по сравнению с прошлым веком просто рай :)
Никто не говорит что бы мне написали всю программу за меня, я лишь прошу помощи в создании проекта, т.к. некоторые вещи не могу понять, посто что бы подтолкнули или кому эта тема интересна что-то бы вместе с ним разбираться, код могу выложить без проблем, вопрос нужнно ли это кому.
Тут еще труднее - потому что для создания проекта нужен не программер а аналитик - постановщик задачи!
Приведу пример.
я сделал реквизит для игры в страйкбол.
1. я разработал ТЗ на реквизит - для себя, неформально - но сделал. ТЗ включает функционал.
2. я прорисовал алгоритм действий реквизита.
3. я разбил алгоритм на модули.
4. я отработал на макете отдельные блоки алгоритма.
5. я собрал на макете прообраз
6. я собрал 6 действующих образцов.
в процессе были вопросы по реализации кода по отдельным пунктам. при наличииконкретного вопроса с указанием конкретной проблемы получал весьма вменяемы советы.
сборку всего в кучу делал сам.
чего желаю.
Выложи код, пожалуйста!
Мне интересно.
// подключение библиотек #include <TM1637.h>// индикатор 4 секции 7сегментов #include <OneWire.h>// считка ТМ ключей #include <EEPROM.h>// работа с паматью // назначение пинов #define TMread 2//TM key pin #define LEDclk 3//LED 1637 pin CLK #define LEDdio 4//LED 1637 pin DIO #define SoundPin 9//Звук в динамик #define pinKBx1 6 // 1 столбец кнопок #define pinKBx2 7 // 2 столбец кнопок #define pinKBx3 8 // 3 столбец кнопок #define pinKBy1 14 // 1 строка кнопок #define pinKBy2 15 // 2 строка кнопок #define pinKBy3 16 // 3 строка кнопок #define pinKBy4 17 // 4 строка кнопок // x1 x2 x3 //y1 1 2 3 //y2 4 5 6 //y3 7 8 9 //y4 A B C #define Battary 21 // измерение напряги аккма //long int KBatt=1453; // Коэффициент для измерения напряги аккума 1 //long int KBatt=1442; // Коэффициент для измерения напряги аккума 2 //long int KBatt=1428; // Коэффициент для измерения напряги аккума 3 //long int KBatt=1447; // Коэффициент для измерения напряги аккума 4 //long int KBatt=1425; // Коэффициент для измерения напряги аккума 5 //long int KBatt=1000; // Коэффициент для измерения напряги аккума 6 long int KBatt=1000; // Коэффициент для измерения напряги теста const long int TimeXX=60000;//делитель миллисекунд int TimeCH=1; //минуты для ЧЕМОДАНА byte Seg_ON=0; //двоеточие на индикаторе byte TMbuffer[8];// буфер приема byte TMlistKEY[20][8];// 5 ключей админских и 15 игровых ключей byte PrevCMD=0;// Предыдущая команда byte NextCMD=0;// следующая команда byte ChCMD=0;// буфер считывания команды byte SetMode=0;// режим - 0 не установлен, 1 кнопки, 2 ключи byte SetTimerMode=1;// режим - 0 таймер выключен, 1 таймер включен byte AdminTM=0;// unsigned long buffMillis=0;// буфер для расчетов unsigned long PrevMillis=0;// предыдущее время в миилсах unsigned long NextMillis=0;// следующее время в миилсах unsigned long CMDmillis[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};// следующее время в миилсах byte buffTM[8];// буфер приема ТМ-ключей byte ChemodanKey[4]={0,0,0,0}; TM1637 tm1637(LEDclk,LEDdio); OneWire ds(TMread); // выход считывателя на пин TMread void setup() // стартовая инициализация { //Serial.begin(9600); //для отладки //Serial.println("Start..."); //для отладки //SirenaOUT(); /* Инициализация структур */ pinMode(pinKBx1, INPUT); // назначить порт ввода X1 digitalWrite(pinKBx1, HIGH); // включить подтягивающий резистор pinMode(pinKBx2, INPUT); // назначить порт ввода X2 digitalWrite(pinKBx2, HIGH); // включить подтягивающий резистор pinMode(pinKBx3, INPUT); // назначить порт ввода X3 digitalWrite(pinKBx3, HIGH); // включить подтягивающий резистор pinMode(pinKBy1, OUTPUT); // назначить порт вывода Y1 pinMode(pinKBy2, OUTPUT); // назначить порт вывода Y2 pinMode(pinKBy3, OUTPUT); // назначить порт вывода Y3 pinMode(pinKBy4, OUTPUT); // назначить порт вывода Y4 pinMode(Battary, INPUT); // назначить порт вывода A7 tm1637.init(); tm1637.set(5);//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7; tm1637.display(0,0); //в левом сегменте 0 остальные потушены // Читаем с хранилища ключи - 20 шт 5 админских 0-4 и 15 игровых 5-20 for(byte TM1 = 0; TM1 < 20; TM1++) { for(byte TM2 = 0; TM2 < 8; TM2++) { TMlistKEY[TM1][TM2]=EEPROM.read(TM1*8+TM2); } } } void loop() //Основной цикл { //StartBattary(); PrevMillis=millis();//запоминаем первый миллс while(1){ byte buff=0; if (SetMode==3)//если режим ЧЕМОДАН { StartMODE3(); } if (SetMode>0&&NextCMD>0&&PrevCMD>0)//если режим установлен в 1 или 2. Если 0 - пропускаем { buffMillis=CMDmillis[NextCMD];//вносим в буфер NextMillis=millis();//читаем миллсы if(SetTimerMode) { CMDmillis[NextCMD]+=NextMillis-PrevMillis;//добавляем миллсы в счетчик команды } PrevMillis=NextMillis;//запоминаем время if ((buffMillis/TimeXX!=CMDmillis[NextCMD]/TimeXX)||(AdminTM))//если число минут предыдущей записи отличается от минут текущих - выводим на экран { buffMillis=CMDmillis[NextCMD]/TimeXX; TimeDisplay(NextCMD,buffMillis); AdminTM=0; } } // чтение ТМ-ключа if(ds.reset()) // если обнаружено устройттво { ds.write(0x33); // отправляем команду "считать ROM" delay(10); // на всякий случай ждем for(int i=0;i<8;i++) { buffTM[i] = ds.read(); // считываем ключ } //проверяем ключ админа buff=ScanTM();//проверяем ключ в базе if(buff) { if(buff<6) {AdminMode();}//если админский ключ идем в режим администрирования if(buff>5)//если есть номер команды { if (!SetMode||ChCMD)//режим не установлен - режим ключей 2 { SetMode=2; PrevMillis=millis(); ChCMD=0; } if(SetMode==2)//если режим ключей 2 запоминаем номер ключа команды { NextCMD=buff-5; } } } } // Чтение кнопок delay(500); buff=KBDread();//проверяем нажатие кнопок if (buff)//если нажата любая кнопка { if (!SetMode||ChCMD)//режим не установлен - режим кнопок 1 { SetMode=1; PrevMillis=millis(); ChCMD=0; } if(SetMode==1)//если режим кнопок 1 запоминаем номер кнопки - команды { NextCMD=buff; } } if (NextCMD!=PrevCMD)//если команда изменилась { PrevCMD=NextCMD;//запоминаем номер новой команды buffMillis=CMDmillis[NextCMD]/TimeXX; TimeDisplay(NextCMD,buffMillis); } delay(200); } } byte KBDread()//опрос клавиатуры { byte KBread=0; byte KBx; byte KBy; for (KBx=0;KBx<3;KBx++)//цикл по столбцам { for (KBy=0;KBy<4;KBy++)//цикл по строкам { digitalWrite(pinKBy1+KBy, LOW);// 0 на столбец if (!digitalRead(pinKBx1+KBx))//читаем строку { KBread=KBy*3+KBx+1;//если 0 определяем кнопку } digitalWrite(pinKBy1+KBy, HIGH);//1 на столбец } } return KBread;//возвращаем 0 или номер кнопки 1-12 } void AdminMode(void) // 1 - чтение ключей из базы, 12 - выход // 2 - стоп таймера // 3 - старт таймера если он был включен // 4 - управление ключами команд, 5 - запись и сл номер, 10 - стирание, 12 - выход, 2с задержка на переключениеключа // 5 - запись ключа и сл номер // 6 - запись ключей админов, 5 - запись и сл номер, 10 - стиранние, 12 - выход, 2с задержка на переключениеключа // 7 - чтение времени команд, 12 - выход, 7 - следующая, 2с задержка на переключениеключа // 8 - проверка звука - сирена // 9 - Тест аккума, выход 12 // 10 (А) - режим КНОПКИ // 11 (В) - режим КЛЮЧИ // 12 (С) - режим ЧЕМОДАН/ВЫХОД { byte KeySave=0; byte numTM=0; byte buff=0; byte buffZ=0; byte buff1=0; byte Rkbd=0; AdminTM=1; tm1637.clearDisplay(); tm1637.display(0,10); //выводим на дисплей A do{ buff=KBDread(); if (buff){tm1637.display(1,buff);} delay(200); switch(buff){ case 1://чтение ключей по командам, кнопка 12 выход KeySave=1; buff1=1; do { if(ds.reset()) // если обнаружено устройттво { ds.write(0x33); // отправляем команду "считать ROM" delay(10); // на всякий случай ждем for(int i=0;i<8;i++) { buffTM[i] = ds.read(); // считываем ключ } } buffZ=ScanTM(); if(buffZ>5){tm1637.display(2,12);tm1637.display(3,buffZ-5);}//пользовательский ключ, выводим С* if(buffZ>0&&buffZ<6){tm1637.display(2,10);tm1637.display(3,buffZ);}//админский ключ, выводим А* if(!buffZ){tm1637.display(2,0);tm1637.display(3,0);}//админский ключ, выводим А* delay(1000); if(KBDread()==12){buff1=0;} }while(buff1); KeySave=0; break; case 2://стоп таймера SetTimerMode=0; break; case 3://старт таймера SetTimerMode=1; break; case 4://запись/стирание ключей команд, 5- запись, 10-стирание, 12 - выход KeySave=1; numTM=6; Rkbd=0; buffTM[0]=255; do{ buffZ=0; tm1637.display(2,0); tm1637.display(3,numTM-5); if(ds.reset())// если обнаружено устройттво { ds.write(0x33); // отправляем команду "считать ROM" delay(10); // на всякий случай ждем for(int i=0;i<8;i++) { buffTM[i] = ds.read(); // считываем ключ } }else { for(int i=0;i<8;i++) { buffTM[i] = 255; // стираем прошлый ключ в памяти } tm1637.display(2,0);tm1637.display(3,0); } buffZ=ScanTM(); if(buffZ>5){tm1637.display(2,12);tm1637.display(3,buffZ-5);}//пользовательский ключ, выводим С* if(buffZ>0&&buffZ<6){tm1637.display(2,10);tm1637.display(3,buffZ);}//админский ключ, выводим А* Rkbd=KBDread(); if(!buffZ)//если ключ не найден в базе { tm1637.clearDisplay(); tm1637.display(0,10); tm1637.display(1,4); tm1637.display(3,numTM-5); if(Rkbd==5)//если кнопка 5 записываем ключ { if(buffTM[0]!=255) { for(int i = 0; i < 8; i++) { EEPROM.write((numTM-1)*8+i,buffTM[i]); TMlistKEY[numTM-1][i]=buffTM[i]; } buffTM[0]=255; numTM++; }else { numTM++; } tm1637.display(2,5); tm1637.display(3,numTM-5);//пользовательский ключ, выводим S* } } if(Rkbd==10)//если нажата кнопка 10 { EEPROM.write((numTM-1)*8,255);//стираем ключ TMlistKEY[numTM-1][0]=255; tm1637.display(2,12); tm1637.display(3,numTM-5);//выводим подтверждение стирания ключа С* } delay(1000); if(Rkbd==12){numTM=99;}//если нажата кнопка 12 выход }while(numTM<21); KeySave=0; break; // 5 - подтверждение записи и сл номер, 10 - стиранпие записи 12 выход case 6://запись/стирание ключей админа, 5 - запись и сл номер, 10 - стирание 12 выход KeySave=1; numTM=1; Rkbd=0; do{ buffZ=0; tm1637.display(2,0); tm1637.display(3,numTM-1); if(ds.reset())// если обнаружено устройттво { ds.write(0x33); // отправляем команду "считать ROM" delay(10); // на всякий случай ждем for(int i=0;i<8;i++) { buffTM[i] = ds.read(); // считываем ключ } }else { for(int i=0;i<8;i++) { buffTM[i] = 255; //стираем прошлый ключ в памяти } tm1637.display(2,0);tm1637.display(3,0); } buffZ=ScanTM(); if(buffZ>5){tm1637.display(2,12);tm1637.display(3,buffZ-5);}//пользовательский ключ, выводим С* if(buffZ>0&&buffZ<6){tm1637.display(2,10);tm1637.display(3,buffZ);}//админский ключ, выводим А* Rkbd=KBDread(); if(!buffZ)//если ключ не найден в базе { tm1637.clearDisplay(); tm1637.display(0,10); tm1637.display(1,6); tm1637.display(3,numTM); if(Rkbd==5)//если кнопка 5 записываем ключ { if (buffTM[0]!=255) { for(int i = 0; i < 8; i++) { EEPROM.write((numTM-1)*8+i,buffTM[i]); TMlistKEY[numTM-1][i]=buffTM[i]; } buffTM[0]=255; numTM++; }else { numTM++; } tm1637.display(2,5); tm1637.display(3,numTM);//flvbycrbq ключ, выводим S* } } if(Rkbd==10&&numTM>1)//если нажата кнопка 10 и ключ более 1 { EEPROM.write((numTM-1)*8,255);//стираем ключ TMlistKEY[numTM-1][0]=255; tm1637.display(2,10); tm1637.display(3,numTM);//выводим подтверждение стирания ключа С* } delay(1000); if(Rkbd==12) { numTM=99; }//если нажата кнопка 12 выход }while(numTM<21); KeySave=0; break; case 7://чтение времени по командам 5 переключение команд 12 выход KeySave=1; numTM=1; Rkbd=0; buffMillis=CMDmillis[numTM]/TimeXX; TimeDisplay(numTM,buffMillis); while(numTM<16) { Rkbd=KBDread(); if(Rkbd==5)//если нажата кнопка 10 и ключ более 1 { numTM++; buffMillis=CMDmillis[numTM]/TimeXX; TimeDisplay(numTM,buffMillis); } delay(1000); if(Rkbd==12) { numTM=99; }//если нажата кнопка 12 выход } KeySave=0; break; case 8://проверка сирены SirenaOUT(); break; case 9://Напряжение аккума, ввод коэффициента - выход 12 while (KBDread()!=12) { StartBattary(); } break; case 10://режим КНОПКИ SetMode=1; ChCMD=1; tm1637.display(2,5); tm1637.display(3,1);//S1 режим кнопок break; case 11://режим КЛЮЧИ SetMode=2; tm1637.display(2,5); tm1637.display(3,2);//S2 режим ключей break; case 12://Режим ЧЕМОДАН SetMode=3; tm1637.display(2,11); tm1637.display(3,3);//S3 режим ЧЕМОДАН break; } delay(200); }while(ds.reset()||KeySave); delay(200); tm1637.clearDisplay(); tm1637.display(0,0); if(!NextCMD) { PrevMillis=millis();//запоминаем первый миллс } } void StartMODE3(void)// режим ЧЕМОДАН { //при старте выбираем время блокировки //на экране bd (block delay) в инутах //выбор на кнопках от 1 до 12 минут //затем инициализация датчика случайных чисел SE //генерируется 4 цифры кода, выводятся на экран на 2 сек //если нажата неправильная цифра - блокировка на время bd минут и сирена //если все цифры угаданы - звук и переход на новую игру //если найден ключ ТМ - сбрасываем все включая звук, найденные ключи //если с ключем ТМ наата любая кнопка - рестарт игры while(1) { byte EndGAME=0; byte i=1; byte j=0; byte buff=0; byte ChmNM=0;// цифра угадана byte numKey=0;// количество угаданных цифр byte ChemodanRead[4]={0,0,0,0};//буфер //инициализация параметров игры tm1637.clearDisplay();//на экран выводим bd tm1637.display(0,11); tm1637.display(1,13); buff=KBDread(); do //ждем нажатие на кнопку { buff=KBDread();//читаем кнопки TimeCH=buff;//устанавливаем тайм-аут для ошибки набора мин tm1637.display(3,buff);// выводим число минут тайм-аута }while(!buff);//ждем нажатие на кнопку delay(2000); tm1637.clearDisplay();//на экран выводим 5Е tm1637.display(0,5); tm1637.display(1,14); while(!KBDread())//ждем нажатие на кнопку { randomSeed(millis());//инициализируем счетчик рандома delay(200); } ChemodanKey[0]=random(1,13);//из списка 1-12 первая цифра while(i<4)//набираем 4 цифры { buff=random(1,13);//из списка 1-12 следующая цифра ChmNM=1; for(j=0;j<i;j++) { if(ChemodanKey[j]==buff)//Если цифра повторяется { ChmNM=0;//сбрасываем счетчик - идем на повтор } } if (ChmNM)//если цифра новая - запоминаем, ищем следующую { ChemodanKey[i]=buff; i++; } } ChmNM=0; for (i=0;i<4;i++) { tm1637.display(i,ChemodanKey[i]);//выводим установленные цифры //Serial.print(ChemodanKey[i],HEX); //для отладки } //Serial.println(); //для отладки SirenaOUT();//мявкаем в динамик delay(2000); tm1637.clearDisplay();//стираем все tm1637.display(0,0);//на экран 0 numKey=0; while(!EndGAME)//пока EndGAME==0 крутим цикл { if(ds.reset()) // если обнаружен ключ сбрасываем все в 0 { for(i=0;i<=numKey;i++) { ChemodanRead[i]=0;//сбросили хранилище угаданных ключей } ChmNM=0;//изменили статус на 0 numKey=0;//число угаданных 0 tm1637.clearDisplay();//стираем все tm1637.display(0,0);//на экран 0 if (KBDread())//если нажата кнопка стартуем новую игру { EndGAME=1; } } buff=KBDread();//читаем клавиатуру if(buff)//если кнопка нажата { ChmNM=0; for(i=0;i<4;i++)// проверяем цифру { if(buff==ChemodanKey[i])//если цифра есть в коде { ChmNM=1;//изменили статус на 1 ChemodanRead[numKey]=ChemodanKey[i];//запомнили угаданную цифру SirenaOUT();//мявкнули в динамик tm1637.display(numKey,ChemodanRead[numKey]);//вывели на экран угаданную цифру } } if(!ChmNM)//если не угадали { for(i=0;i<=numKey;i++) { ChemodanRead[i]=0;//сбросили хранилище угаданных ключей } ChmNM=0;//изменили статус на 0 numKey=0;//число угаданных 0 tm1637.clearDisplay();//стираем все for(i=0;i<4;i++) { tm1637.display(i,0);//на экран 0 } //Serial.println(" ERROR "); //для отладки PrevMillis=millis();//запоминаем первый миллс while(millis()-PrevMillis<TimeCH*TimeXX)//в течении ХХ минут ревем сиреной { SirenaOUT();//сирена delay(1000); //Serial.println(" ERROR 1"); //для отладки if(ds.reset()) // если обнаружен ключ сбрасываем все в 0 { for(i=0;i<=numKey;i++) { ChemodanRead[i]=0;//сбросили хранилище угаданных ключей } PrevMillis=TimeCH*TimeXX+millis(); ChmNM=0;//изменили статус на 0 numKey=0;//число угаданных 0 tm1637.clearDisplay();//стираем все tm1637.display(0,0);//на экран 0 if (KBDread())//если нажата кнопка стартуем новую игру { EndGAME=1; } } } tm1637.clearDisplay();//стираем все tm1637.display(0,0);//на экран 0 }else { numKey++;//если угадали - следующий номер delay(1000); } } if(numKey>3)//если угадали все 4 - гимн { SirenaOUT(); SirenaOUT(); SirenaOUT(); EndGAME=1; } } } } void TimeDisplay (byte Ncmd, unsigned long buffTime)//Вывод на дисплей - 1 цифра номер команды, 2-4 - число минут текущей команды { tm1637.display(0,Ncmd); //выводим на дисплей 1 цифру - команда tm1637.display(1,buffTime/100);//выводим на дисплей 1 цифру - сотни минут tm1637.display(2,buffTime%100/10);//выводим на дисплей 1 цифру - десятки минут tm1637.display(3,buffTime%10);//выводим на дисплей 1 цифру - минуты if(buffTime>999) { Seg_ON=1; }else { Seg_ON=0; } tm1637.point(Seg_ON);//вкл двоеточие между сегментами если минут больше 999 } byte ScanTM(void)//проверка ключей ТМ на наличие в хранилище { byte buff2=0; byte buff1=1; for(int y=0;y<20;y++) { if(TMlistKEY[y][0]!=255)//Если 1й байт ключа FF - ячейка пустая, пропускаем { buff1=1; for(int i=0;i<8;i++) { if(buffTM[i]!=TMlistKEY[y][i]){buff1=0;} // сравниваем ключ с базой } if (buff1){buff2=y+1;} } } return buff2; //Возвращаем номер ключа или 0 если не найден } void SoundSET(void) { /********************************************************* //вывод звука for (int thisNote = 0; thisNote < 8; thisNote++) { // to calculate the note duration, take one second divided by the note type. //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. int noteDuration = 1000 / noteDurations[thisNote]; tone(SoundPin, melody[thisNote], noteDuration); // to distinguish the notes, set a minimum time between them. // the note's duration + 30% seems to work well: int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); // stop the tone playing: noTone(SoundPin); } *********************************************************/ } void SirenaOUT(void) { /*********************************************************/ //Сирена byte Dlit = 17; int Niz = 500; int Verh = 3000; byte Shag = 70; for (int j = Niz;j<= Verh;j+=Shag) { tone(SoundPin,j, Dlit); delay(Dlit); } for (int j = Verh;j>= Niz;j-=Shag) { tone(SoundPin,j, Dlit); delay(Dlit); } /***********************************************************/ } void StartBattary(void) { long int Batt0=analogRead(Battary); long int Batt=Batt0*KBatt/1000; tm1637.display(0,Batt/1000); //выводим на дисплей 1 цифру - десятки В tm1637.display(1,(Batt%1000)/100);//выводим на дисплей 2 цифру - единицы В tm1637.display(2,(Batt%100)/10);//выводим на дисплей 3 цифру - десятые В tm1637.display(3,Batt%10);//выводим на дисплей 4 цифру - сотые В delay(500); }Выложи код, пожалуйста!
Мне интересно.
Без схемы неактульно.
Но закомментировал как мог - для себя любимого.
а схема секретна? :)
Схема не секретная, просто лень рисовать.
Если на словах:
- подключена считка ТМ-ключей (1 пин, второй на минус)
- подключен 4-секционный 7-сегментный индикатор 2 пина
- подключена клава 3*4, пины расписаны.
Вот собственно и вся перифеотия.
В режиме ключей при наличии ТМ-ключа игрока включается таймер команды.
В режме кнопок при нажатии на свою кнопку включается таймер команды
номер команды и время выводится на индикатор.
При наличии админского ключа переходит в режим меню. Можно прописать или считать ключи, посмтортеть время, установить режим и т.д.
Тут еще труднее - потому что для создания проекта нужен не программер а аналитик - постановщик задачи!
Приведу пример.
я сделал реквизит для игры в страйкбол.
1. я разработал ТЗ на реквизит - для себя, неформально - но сделал. ТЗ включает функционал.
2. я прорисовал алгоритм действий реквизита.
3. я разбил алгоритм на модули.
4. я отработал на макете отдельные блоки алгоритма.
5. я собрал на макете прообраз
6. я собрал 6 действующих образцов.
в процессе были вопросы по реализации кода по отдельным пунктам. при наличииконкретного вопроса с указанием конкретной проблемы получал весьма вменяемы советы.
сборку всего в кучу делал сам.
чего желаю.
это хорошо, вы большой молодец! я как бы сам тоже собрал устройство, кому интересно могу выложить, мне не жалко, задал вопрос тем кому это интересно позаниматся, кто в силу своей скупости или бедности не может позволить себе купить устройство за 15-25 т.р. которе по себестоимости выходит в 1500, нет так нет, да так да. моя программа работает и не глючит, но хотелось бы добавить простоты в виде приложения на андроиде. и может еще каких нибудь мыслей, не удорожая устройство. и все. дешево, красиво и функционально.
Здраствствуйте ищу помошника, наставника, и кому это все интересно, будем разбиратся вместе или если вы профи и у вас есть время повозится со мной то я буду очень рад! есть проект GSM сигнализации с автозапуском на ардуино, используется там модуль gsm М590е, все работает отлично! от звонка запускает авто, с проверками скорости и т.д. плюс туда подключил брелок от сигнализации, который ставит на охрану автомобиль, снимает с охраны, и открывает багажник. уже портотип стоит в авто и катается около 2-ух месяцев, глюки некоторые постепенно убираются и добавляется функционал, щас стоит вопрос создания отдельного куска кода на соединение и управление всем этим (для меня "чудом") через интернет, приложение на смартфоне написать смогу(конечно пользуясь примерами) вопрос в том что не знаю как создать сервер для связи приложения и автомобиля, как реализовать связь с помощью GET запросов.
Напиши что нибудь думаю придумаем, я как раз доделал сигнаху для дома и офиса с оповещением по SMS с таким же модулем
обязательно напишет :))))
з.ы.
поначитаются всяких тем и ютубов насмотреться и делают всякую херню.
и главное одно понять не могут что машина а) стоит возле квартиры в 99% или у офиса в котором ты же сидишь.
и нафиг тратить трафик сотовый когда можно сделать тупо вайфай. а все остальное только в случае отсутствия в зоне доступа.
хахах, ну делают херню - это преувеличение, есть много интересных проектов))
По поводу WiFi можно, но бессмысленно... видимо Вы не прорабатывали этот вопрос (а если это так то зачем писать такие комментарии)
Машина может быть в гараже, я могу уехать на поезде в командировку машину оставить на стоянке, и до подъезда к городу за 10 минут завести авто... и т.д.
Если в Вашем городе все таки есть здания где этажность больше 3, думаю проблематично будет через WiFi управлять авто
по смс и звонку вообще проблемм нет, тут вопрос про интернет именно
Вот я тоже хотел разобраться с интернетом
что совсем нет никого кто мог помочь? или я что-то не правильно описал
мне тоже это интересно. А что Вы переживаете за трафик? Сейчас пакетные тарифы всякие есть (у нас в Челябинске, например, на Tele2 тариф 500 Мб за 99 р/мес). У меня, правда, Sim900 каждые 4 минуты отправляет инфу на ftp сервер. За неделю тратится менее 10 Мб.
На какой машине стоит это устройство (что-то как-то боязно ставить на машину не сертифицированную приблуду)? Мне интересно тема приложение на android. Я поверхносто (сильно не углублялся) пробывал найти инфу как с android связаться с ftp и прочитать, например, какой-нибудь файл *.txt.
d13lider, можно поконкретнее, что именно интересует (про интернет)?
мне тоже это интересно. А что Вы переживаете за трафик? Сейчас пакетные тарифы всякие есть (у нас в Челябинске, например, на Tele2 тариф 500 Мб за 99 р/мес). У меня, правда, Sim900 каждые 4 минуты отправляет инфу на ftp сервер. За неделю тратится менее 10 Мб.
просто опыта нет, а слышал что очень много трафика потребляет. поэтому и подумал что лучше сделать соединение по звонку из приложения.
На какой машине стоит это устройство (что-то как-то боязно ставить на машину не сертифицированную приблуду)? Мне интересно тема приложение на android. Я поверхносто (сильно не углублялся) пробывал найти инфу как с android связаться с ftp и прочитать, например, какой-нибудь файл *.txt.
d13lider, можно поконкретнее, что именно интересует (про интернет)?
вопрос в тупик поставил))) ну интересует связь через интернет, хочу зажечь светодиод через интернет, что бы дуина была подключена через M590 а на андроиде было приложение, в котором нажал на кнопку, светодиод зажегся, и появилась табличка "Светодиод включен"
По поводу большого трафика: да ты отправил 10 байт (на обычном тарифе Tele2), через минуту оператор округлил до 1Мб, бац у тебя со счета 5 рублей сняли. Выгоднее подключать пакет с интернетом. Потому что если как ты хочешь сделать по звонку это тоже будет дорого.
то есть тебе надо вырезку части из скетча, которая отвечает за связь с интернетом?
По поводу большого трафика: да ты отправил 10 байт (на обычном тарифе Tele2), через минуту оператор округлил до 1Мб, бац у тебя со счета 5 рублей сняли. Выгоднее подключать пакет с интернетом. Потому что если как ты хочешь сделать по звонку это тоже будет дорого.
вы не поняли, звонок из приложения пришел, дуина сбросила вызов, пошло подключение через интернет, подключилась в приложении написанно "Соеденено" и все управление пошло через интернет, приложение закрылось- послали команду на разъединение
то есть тебе надо вырезку части из скетча, которая отвечает за связь с интернетом?
ну если грубо говоря да, но самому дойти охото до этого, лучше бы помогли объяснить как это все наладживается
я может быть ошибаюсь, но по-моему, к М590е (и к SIM900) подключиться удаленно нельзя (как, например, к удаленному столу по VPN). По-моему, хоть как arduino и android будут общаться через промежуточный сервер (если я ошибаюсь, то исправьте меня, пожалуйста).
Вот это поможет?
я может быть ошибаюсь, но по-моему, к М590е (и к SIM900) подключиться удаленно нельзя (как, например, к удаленному столу по VPN). По-моему, хоть как arduino и android будут общаться через промежуточный сервер (если я ошибаюсь, то исправьте меня, пожалуйста).
да все верно, надо через сервер. но если это все заработает, я даже готов снять сервер. и платить за него.
Вот это поможет?
там про SIM900 он дороже, хотелось бы M590 использовать, с SIM900 думаю таких проблемм нет, там можно произвести соединение через адрес http а на M590 только через IP
я снимаю ftp сервер за 13 р/месяц ))))
Вот это не понял!
ну допустим через GET запросы если общаться, то надо прописывать путь к файлу, допустим как будет выглядеть путь у SIM900
>http://lider.ru/1.php
а у M590 будет так:
>265.278.894.24/1.php
так вот получается что прямой IP адрес для GET запроса не возможно получить от хостинга, не разрешают они так... а свой сервак постоянно держатиь включенным нерентаблельно. это вот я так щас думаю, пока нашел только такой путь общения M590 с интернетом... может я что то не понял?
Вот вырезка из моего кода (не люблю я слово "скетч", как-то не привычно оно для меня).
а подскажите где такой сервер за 13р и ip статичный?)))
Давай по почте. Напиши мне belousovev9999999 @ 99999mail. 9999ru . Без девяток и пробелов.
Честно не пойму зачем так сложно. Некоторые сотов. операторы предоставляют услугу передачи данных. С первого сотового набираешь комманду соединиться с таким-то сотовым в режиме передачи данных и шлешь и читаешь то что тебе нужно. В електросетях давно используется.
Честно не пойму зачем так сложно. Некоторые сотов. операторы предоставляют услугу передачи данных. С первого сотового набираешь комманду соединиться с таким-то сотовым в режиме передачи данных и шлешь и читаешь то что тебе нужно. В електросетях давно используется.
По подробнее можно? Примеры, ссылочки?
Подробнее сейчас не скажу. Года 4 назад устанавливал на предприятии для отдела энергетика. Автоматизированная система учета электроенергии. Программа под винды, ГСМ модем, вподстанции ГСМ модем с 485 и туда подключаются счетчики.