Ви не увійшли.
я еще не пробовал, сейчас занимаюсь автостартом для жены на ее машину пока зима не кончилась )))). А с терариумом, действительно если не поможет замена RTC модуля. Придется по меткам ориентироватся. Я правда не понял что за подтяжка на I2C? У меня просто мега подключена по двум проводам к часовому модулю.
В терариуме хамелеон )))) , лучше бы теща, но жена не позволит))
приветствую,
написал скетч для терариума. так все работает нормально. Заметил 2 - 3 раза в день будто бы ардуино перезагружается. Думал помехи поменял блок питания - не помогло. Потом случайно оставил дисплей в настройках. Увидел что опять все перегузилось, но дисплей остался в настройках. Единственное объяснение этому может только то что часовой модуль кратковременно теряет связь
и / или по I2C шине приходит вместо нормального времени 00:00 и сразу опять приходит нормальное время. Поэтому ардуино думает что наступила ночь и кратковременно отключает все и сразу опять все включает. Помогите советом что можно сделать.
на всякий случай прикрипляю скетч.
Подскажите, а то не могу найти. Как отключить программно подсветку?
Нашел, как дисплей но при этом подсветка горит...
lcd.noBacklight();
используйте вместо delay - millis.
как в примере на этой страничке
https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
странная ситуация пишу скетч для меги, управление терарриумом. Не хочет шить скетч размером 60830 байт.
интересно то что если изменить любую переменую с byte на long или обратно чтоб размер скетча изменился то шьет нормально. пробовал несколько ардуин везде одно и тоже .
в чем может быть дело. Главное не шьет точно этот размер, чуть больше или меньше нормально. При этом размере начинает шить, но достигнув примерно 90% появляется ошибка что программатор не отвечает.
есть такой модуль, вообщем будет ли работать если я с одной стороны подключу одну ардуино SDA >A4 SDL>A5 и соответственно также другую ардуинно к этому же модулю.
спасибо большое , буду пробовать.
Здравствуйте, спасибо за ответ.
д12 это маленькие лазеры для рычага коробки чтоб определить что рычаг находится на нейтральной скорости.
дома от блока питания , тоже часто выключалась сим900 без причин.
а еще она на смс не реагирует например если она включится а ардуино не настроит ее командами из power(); тогда она хоть и работает но смс не принимае. Мне больше всего не нравится то что после определенного времени она перестает принимать\реагировать на смс. и я даже посмотреть не могу в чем проблема. как только я комп подключу то ардуино перестартует. и тогда будет обратно все работать, а 2 дня со включенным компом - не реально сидеть в машине - замерзну).
Вообщем жена сдала на права, на первое время купили ей маленький ситроен с1 - простой на нет. Я давно хотел поэксперемеентировать с ардуино и машиной , вот выдался случай.
это моя третия программа для ардуино так что я новичок - не судите о коде строго. Управление по смс через сим900.
скеч работает все нормально. но есть несколько проблем.
1. переодично выключается сим900, непонятно почему. Питания точно хватает. Как временное решение встроил в программу слежение о сим900 , если выключится то сразу включить.
2. через некоторое время не использования, например день или два. На смс перестает реагировать. светодиоды на сим900 мигают правильно, что сеть есть все нормально. подозреваю что нарушается связь между ардуино и сим900 по сериалу.
посмтотрите скеч может я в нем намул чего что такое происходит.
/* Подключение
* д2 выход на реле зажигания
* д3 выход на реле стартера
* д4 выход на реле габариток от дверного замка
* д5 выход на динамик или пищалку
* A2 вход от педали тормоза если 1 то нажата и выключает зажигание
* A3 вход от ручника 5 в. если 0 то натянут
* д6 вход от ГСМ статус включен ли ГСМ модуль
* д7 и д8 комуникация с ГСМ модулем
* д9 включение и выключение ГСМ модуля
* д10 на реле открытия замка
* д11 на реле закрытия замка
* д12 выход на лазеры
* д13 выход на сигнальный светодиод
* A0 вход от 1 фото резистора от коробки передач для определения нетральной скорости
* A1 вход от 2 фото резистора от коробки передач для определения нетральной скорости
* A4 вход от генератора для определения работы мотора
*/
#include <SoftwareSerial.h>
SoftwareSerial gprsSerial(7, 8);
int zundungs_Pin = 2;
int starter_Pin = 3;
int taste_Pin = 3;
int sensor_GSM_Pin=6;
int bremse_Pin=A2;
int laser_Pin=12;
int handbremse_Pin=A3;
int motorgestartet_Pin=A4;
int getriebe_V_Pin=A0;
int getriebe_V_Wert;
int getriebe_H_Pin=A1;
int getriebe_H_Wert;
int motorgestartet_Wert;
int bremse_Wert; //если равен 0 то педаль не нажата
int handbremse_Wert; //если равен 0 то ручник натянут
int versuch=0;
int schloss_Auf_Pin=10;
int schloss_Zu_Pin=11;
int blinker_Pin=4;
int status_Led_Pin=13;
int toner_Pin=5;
const long time_out=60000*15; //через какое время будет выключен мотор, если ничего не происходит
const long versuch_dauer=29000; //Zeit zwischen Startversuche
unsigned long altMillis = 0;
unsigned long neuMillis;
bool motorgestartet = false; //логика если правда то мотор включен
bool gsmmodul = true; //логика если правда то модуль сим900 включен
bool prozess_autostart=false; //логика если правда то автозапуск активен
bool neutrale; //логика если правда то скорость нетральная включена
bool bremse;
bool handbremse;
bool fehlversuch=false;
void setup(){
gprsSerial.begin(19200);
Serial.begin(19200);
pinMode(zundungs_Pin, OUTPUT);
pinMode(starter_Pin, OUTPUT);
pinMode(laser_Pin, OUTPUT);
pinMode(status_Led_Pin, OUTPUT);
pinMode(schloss_Auf_Pin, OUTPUT);
pinMode(schloss_Zu_Pin, OUTPUT);
pinMode(blinker_Pin, OUTPUT);
pinMode(toner_Pin, OUTPUT);
pinMode(sensor_GSM_Pin, INPUT);
pinMode(bremse_Pin, INPUT);
pinMode(handbremse_Pin, INPUT);
pinMode(motorgestartet_Pin, INPUT);
pinMode(getriebe_V_Pin, INPUT);
pinMode(getriebe_H_Pin, INPUT);
power();
}
String currStr = "";
// Переменная принимает значение True, если текущая строка является сообщением
boolean isStringMessage = false;
void loop()
{
check();
if(!gsmmodul){power();}
smserkennen();
//Debuging
//handbremse=true; neutrale=true; //обязательно отключить - только для отладки кода
if (versuch>=3){versuch=0; MotorStop();prozess_autostart=false;feedback3versuchefaul();fehlversuch=true;}
check();
if(prozess_autostart){digitalWrite(laser_Pin,HIGH);}else{digitalWrite(laser_Pin,LOW);}
if(prozess_autostart&& neutrale && !motorgestartet && (versuch<3) && (versuch>0)){Serial.print("z87 Zaehler=");Serial.println(neuMillis-altMillis);
if(versuch_dauer>(neuMillis-altMillis)){Serial.println("Versuch Zeit abg. neu Versuch");
MotorStop();delay(3000);MotorStart();}}
if(prozess_autostart && motorgestartet){ if(time_out<(neuMillis-altMillis)){zeit20Abgelaufen();Serial.println("Zeit 20min ist abgelaufen - STOP!!!");prozess_autostart=false;
MotorStop();versuch=0; } }
if(bremse){fehlversuch=false;digitalWrite(laser_Pin,HIGH); check();if(neutrale){digitalWrite(status_Led_Pin,HIGH);}else{digitalWrite(status_Led_Pin,LOW);}}
if(!bremse){digitalWrite(status_Led_Pin,LOW);}
if(bremse && prozess_autostart){MotorStop();prozess_autostart=false;versuch=0;fehlversuch=false;}
//digitalWrite(laser_Pin,HIGH);
//Serial.println(getriebe_V_Wert);
//Serial.println(getriebe_H_Wert);
//Serial.println(neutrale);
//Serial.println(handbremse);
}
//распознование смс
void smserkennen(){
if (!gprsSerial.available())
return;
char currSymb = gprsSerial.read();
if ('\r' == currSymb) {
if (isStringMessage) {
//если текущая строка - SMS-сообщение, отреагируем на него соответствующим образом
if (!currStr.compareTo("MotorStart")) {Serial.println("sms MotorStart empfangen");prozess_autostart=true;MotorStart();}
else if (!currStr.compareTo("MotorStop")) {Serial.println("sms MotorStop empfangen"); if(prozess_autostart){prozess_autostart=false;MotorStop();}}
else if (!currStr.compareTo("Tuereauf")) {Serial.println("sms Tuereauf empfangen");tuereAuf();}
else if (!currStr.compareTo("Tuerezu")) {Serial.println("sms Tuerezu empfangen");tuereZu();}
else if (!currStr.compareTo("status")) {Serial.println("sms status empfangen");statusBool();}
isStringMessage = false;
} else {
if (currStr.startsWith("+CMT")) {
//если текущая строка начинается с "+CMT",
//то следующая строка является сообщением
isStringMessage = true;
}
}
currStr = "";
} else if ('\n' != currSymb) {
currStr += String(currSymb);
}
}
void MotorStart() {
altMillis=neuMillis;digitalWrite(laser_Pin,HIGH);delay(20); check();
if(neutrale){
digitalWrite(zundungs_Pin, HIGH);Serial.println("Zuendung eingeschaltet");delay(4000);digitalWrite(starter_Pin, HIGH);Serial.println("Starter eingeschaltet");
delay(4000);digitalWrite(starter_Pin, LOW);Serial.println("Starter ausgeschaltet"); versuch++;Serial.print("Versuch: ");Serial.println(versuch);
Serial.print("Prozess Austostart=");Serial.println(prozess_autostart);Serial.print("Motorgestartet=");Serial.println(motorgestartet);
Serial.print("Zaehler=");Serial.println(neuMillis-altMillis);
delay(500);check();if(motorgestartet){feedbackMotorGestartet();}
delSms();}else{statusBool();prozess_autostart=false;fehlversuch=true;}
}
void MotorStop()
{
digitalWrite(zundungs_Pin, LOW);Serial.println("Motor / Zuendung aus");digitalWrite(laser_Pin,LOW);delay(200);
}
void tuereAuf()
{digitalWrite(blinker_Pin,HIGH);delay(500);digitalWrite(schloss_Auf_Pin,HIGH);delay(700);digitalWrite(blinker_Pin,LOW);digitalWrite(schloss_Auf_Pin,LOW);delay(50);
}
void tuereZu()
{digitalWrite(blinker_Pin,HIGH);delay(500);digitalWrite(blinker_Pin,LOW);digitalWrite(schloss_Zu_Pin,HIGH);
delay(700);digitalWrite(blinker_Pin,HIGH);digitalWrite(schloss_Zu_Pin,LOW);delay(50);delay(450);digitalWrite(blinker_Pin,LOW);}
void feedback3versuchefaul()
{
gprsSerial.print("AT+CMGF=1\r"); // AT command to send SMS message
delay(100);
gprsSerial.println("AT + CMGS = \"+49151xxxx\""); // recipient's mobile number, in international format
delay(100);
gprsSerial.println("Nach 3 Versuche koennte den Motor nicht starten"); // message to send
delay(100);
gprsSerial.println((char)26); // End AT command with a ^Z, ASCII code 26
delay(100);
gprsSerial.println();
}
void feedbackMotorGestartet()
{
gprsSerial.print("AT+CMGF=1\r"); // AT command to send SMS message
delay(100);
gprsSerial.println("AT + CMGS = \"+49151xxxx\""); // recipient's mobile number, in international format
delay(100);
gprsSerial.println("Motor ist erfolgreich gestartet"); // message to send
delay(100);
gprsSerial.println((char)26); // End AT command with a ^Z, ASCII code 26
delay(100);
gprsSerial.println();
}
void zeit20Abgelaufen()
{
gprsSerial.print("AT+CMGF=1\r"); // AT command to send SMS message
delay(100);
gprsSerial.println("AT + CMGS = \"+49151xxxx\""); // recipient's mobile number, in international format
delay(100);
gprsSerial.println("Zeit - 20 Min. abgelaufen, Motor ist ausgeschaltet"); // message to send
delay(100);
gprsSerial.println((char)26); // End AT command with a ^Z, ASCII code 26
delay(100);
gprsSerial.println();
}
void statusBool(){
if(prozess_autostart && !neutrale && !handbremse)
{
gprsSerial.print("AT+CMGF=1\r"); // AT command to send SMS message
delay(100);
gprsSerial.println("AT + CMGS = \"+49151xxxx\""); // recipient's mobile number, in international format
delay(100);
gprsSerial.println("Gang ist nicht Neutral und Handbremse nicht angezogen, Motor wird nicht gestartet"); // message to send
delay(100);
gprsSerial.println((char)26); // End AT command with a ^Z, ASCII code 26
delay(100);
gprsSerial.println();
}
if(prozess_autostart && neutrale && !handbremse)
{
gprsSerial.print("AT+CMGF=1\r"); // AT command to send SMS message
delay(100);
gprsSerial.println("AT + CMGS = \"+49151xxxx\""); // recipient's mobile number, in international format
delay(100);
gprsSerial.println("Gang ist Neutral aber Handbremse nicht angezogen, Motor wird nicht gestartet"); // message to send
delay(100);
gprsSerial.println((char)26); // End AT command with a ^Z, ASCII code 26
delay(100);
gprsSerial.println();
}
if(neutrale && handbremse && motorgestartet && prozess_autostart)
{
gprsSerial.print("AT+CMGF=1\r"); // AT command to send SMS message
delay(100);
gprsSerial.println("AT + CMGS = \"+49151xxxx\""); // recipient's mobile number, in international format
delay(100);
gprsSerial.println("alles OK. Autostart ist aktiv, Motor ist gestartet"); // message to send
delay(100);
gprsSerial.println((char)26); // End AT command with a ^Z, ASCII code 26
delay(100);
gprsSerial.println();
}
if(fehlversuch)
{
gprsSerial.print("AT+CMGF=1\r"); // AT command to send SMS message
delay(100);
gprsSerial.println("AT + CMGS = \"+49151xxxx\""); // recipient's mobile number, in international format
delay(100);
gprsSerial.println("Nach 3 Versuche, den Motor ist nicht gestartet"); // message to send
delay(100);
gprsSerial.println((char)26); // End AT command with a ^Z, ASCII code 26
delay(100);
gprsSerial.println();
}
}
void check()
{
neuMillis = millis();
gsmmodul = digitalRead(sensor_GSM_Pin);
bremse_Wert = analogRead(bremse_Pin); if(bremse_Wert>1000){bremse=true;}else{bremse=false;}
handbremse_Wert = analogRead(handbremse_Pin); if(handbremse_Wert<150){handbremse=true;}else{handbremse=false;}delay(300);
motorgestartet_Wert = analogRead(motorgestartet_Pin); if(motorgestartet_Wert<100){motorgestartet=true;}else{motorgestartet=false;}
getriebe_V_Wert = analogRead(getriebe_V_Pin);
getriebe_H_Wert = analogRead(getriebe_H_Pin);
if((getriebe_V_Wert>850)&&(getriebe_H_Wert>500)){neutrale=true;}else{neutrale=false;}
}
//стереть все смс
void delSms(){
gprsSerial.print("AT+CMGD=1,4 ");
delay(2000);
}
void ShowSerialData()
{
while(gprsSerial.available()!=0)
Serial.write(gprsSerial.read());
}
//включить модуль гсм
void power(){
digitalWrite(9, HIGH);
delay(1000);Serial.println("GSM Modul wird gestartet");
digitalWrite(9, LOW);
delay(5000);
gprsSerial.print("AT+IPR=19200");
delay(500);
gprsSerial.print("AT+CMGF=1\r");
delay(300);
gprsSerial.print("AT+IFC=1, 1\r");
delay(300);
gprsSerial.print("AT+CPBS=\"SM\"\r");
delay(300);
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
delay(500);
gprsSerial.print("AT+CMGD=1,4 ");
delay(3000);
Serial.println("GSM Modul ist bereit");
}