Hallo, ich bin am verzweifeln. Zur Zeit bin ich dabei eine kleine Türüberwachung zu entwickeln. Ablauf: Die Tür ist geschlossen. Alle 12h gibt es über ein GSM Shield (SIM900) einen Kontrollanruf. Zwischen diesen 12h lege ich den Atmega 328 schlafen. Wird die Tür in der Zwischenzeit geöffnet, gibt es ebenfalls einen Anruf. Der normalerweise darauf folgende Anruf (12h Takt) bleibt ab dann aus. Alles funktioniert wunderbar bis hier hin: 1. Der 12h Stunden-Takt, wobei ich hoffe diesen mit einem DS3231 RTC hinzubekommen. 2. Da das Ganze batteriebetrieben läuft, möchte ich den Atmega natürlich nicht, so wie jetzt, auf einem Arduino UNO laufen lassen, sondern als Bareboard. Sprich nur die min. Bauteile werden verbaut. (Um Strom zu sparen.) Mein Bareboard sollte soweit funktionieren. Ich habe ein kleines Projekt (Blink) übertragen und das hat soweit funktioniert. Wenn ich jetzt die nötigen Verbindungen (RX, TX, GND, 5V, Pin9 (Um das SIM900 Shield anzuschalten)) verbinde, funktioniert der Anruf vom Arduino Uno einwandfrei aber vom Bareboard nicht. Selbst wenn ich den auf den UNO gesteckten Atmega328 direkt von den Pins zum SIM900 verbinde gehts. Wenn ich aber die Pins direkt vom Bareboard zum SIm900 verbinde geht es nicht. Ich habe auf dem Bareboard leider einen 12er Quarz und keinen 16er verbaut könnte dies damit zusammen hängen? Mein Code im Anhang..
> Ich habe auf dem Bareboard leider einen 12er Quarz und keinen 16er > verbaut könnte dies damit zusammen hängen? Bestimmt!
Eplan schrieb: > Ich habe auf dem Bareboard leider einen 12er Quarz und keinen 16er > verbaut könnte dies damit zusammen hängen? Das mußt Du dem Programm irgendwo mitteilen sonst stimmt die Berechnung der Baudrate für die serielle Schnittstelle nicht.
Im Anhang mal der Schaltplan vom Bareboard und hier der Code: #include <SoftwareSerial.h> //SoftwareSerial Library #include <avr/sleep.h> //Sleep Modus Library SoftwareSerial SIM900(7, 8); // Konfiguriert die Software Schnittstelle zwischen den Boards int counter=0; // Counter wird initialisiert //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++ void setup(){ Serial.begin(9600); SIM900.begin(19200); SIM900power(); // GSM Shield wird eingeschaltet delay(2000); //configure pin3 as an input and enable the internal pull-up resistor pinMode(3, INPUT_PULLUP); pinMode(13, OUTPUT); //LED13 pinMode(2, INPUT_PULLUP); digitalWrite(2, HIGH); } void SIM900power() { digitalWrite(9, HIGH); delay(1000); digitalWrite(9, LOW); delay(2000); } void pinInterrupt() { sleep_disable(); detachInterrupt(0); //Pin 2 detachInterrupt(1); //Pin 3 } void sleepSetup(){ sleep_enable(); attachInterrupt(0, pinInterrupt, LOW); attachInterrupt(1, pinInterrupt, HIGH); set_sleep_mode(SLEEP_MODE_PWR_DOWN); digitalWrite(13, LOW); sleep_cpu(); Serial.println("Aufgewacht"); digitalWrite(13, HIGH); } void loop(){ Serial.println("Geht zu Bett"); SIM900power(); sleepSetup(); delay(500); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++ // Hier wird kontrolliert: //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++ // Falle offen //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++ int sensorVal = digitalRead(3); if ((sensorVal==LOW)&&(counter==0)) { Serial.println("Tür Zu"); SIM900power(); delay(20000); Serial.println("Anruf..."); SIM900.println("ATD + +49151xxxxxx;"); delay(100); SIM900.println(); delay(12000); SIM900.println("ATH"); Serial.println("Tür war zu "); delay(500); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++ // Tür auf! //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++ } else if ((sensorVal==HIGH)&&(counter==0)) { Serial.println("Tür Auf!"); SIM900power(); delay(20000); Serial.println("Anruf..."); SIM900.println("ATD + +4915152518358;"); // wähle deutsche Vorwahl und dann die Telefonnr. ohne 0 delay(100); SIM900.println(); delay(12000); // Ruft an SIM900.println("ATH"); counter=1; Serial.println("Tür war auf!"); delay(500); } else { SIM900power(); } }
Nabend, ich habe jetzt einen 16er Quarz verbaut und das Bareboard nocheinmal neu aufgebaut und siehe da, die Kommunikation zum SIM900 funktioniert einwandfrei. Nun habe ich das nächste Problem. Um einen 12h Takt (für die Kontrollanrufe zu bekommen) nutze ich einen DS3231 RTC. Zurzeit bekomme ich jede Sekunde vom RTC ein Ausgangssignal (Alarmsignal). Sinn der Geschichte ist es ja aber alle 12h (oder zum Test jede Minute) ein Signal heraus zu bekommen. Ich kann den Fehler nicht finden. Hier mein Sketch: Danke für jede Hilfe im voraus! #include <Wire.h> #include <DS3231.h> DS3231 clock; RTCDateTime dt; boolean isAlarm = false; boolean alarmState = false; int alarmLED = 13; void alarmFunction() { Serial.println("ALARM"); isAlarm = true; } void setup() { Serial.begin(9600); // Initialize DS3231 Serial.println("Initialize DS3231");; clock.begin(); // Disarm alarms and clear alarms for this example, because alarms is battery backed. // Under normal conditions, the settings should be reset after power and restart microcontroller. clock.armAlarm1(false); clock.armAlarm2(false); clock.clearAlarm1(); clock.clearAlarm2(); // Manual (Year, Month, Day, Hour, Minute, Second) clock.setDateTime(2014, 4, 25, 0, 0, 0); // Set Alarm2 - Every 01m in each hour // setAlarm2(Date or Day, Hour, Minute, Mode, Armed = true) clock.setAlarm2(0, 0, 1, DS3231_MATCH_M); // Attach Interrput 0. In Arduino UNO connect DS3231 INT to Arduino Pin 2 attachInterrupt(0, alarmFunction, FALLING); // Setup LED Pin pinMode(alarmLED, OUTPUT); } void loop() { dt = clock.getDateTime(); Serial.println(clock.dateFormat("d-m-Y H:i:s - 1", dt)); if (isAlarm) { digitalWrite(alarmLED, alarmState); alarmState = !alarmState; clock.clearAlarm2(); } delay(1000); }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.