Hall Sensor --> Anruf

Sobald ein Hall sensor einen Magneten erkennt soll eine Nummer angerufen werden mittels GSM Modul.

Na dann leg los :wink:
Eine Frage hattest Du ja nicht.

Das Programm funktioniert einwand jedoch sobald ich etwas in die Funktion void detect () schreibe wird der Magnet nich immer erkannt bzw er ruft nur teilweise an, an was könnte das liegen ?

#define Eingang 2                             // Drehzahl-Eingang: Pin2 / Interrupt 0
#include<SoftwareSerial.h>
SoftwareSerial gsm(10,11);


void setup() {
 pinMode(Eingang, INPUT);                    // Eingangspin auf Eingang stellen
 //digitalWrite(Eingang, HIGH);              // und Pullup-Widerstand einschalten
   
 Serial.begin(9600);

 // Interrupt 0 auf Routine readmicros setzen
 attachInterrupt(0, detectMagnet, FALLING);

 Serial.println("Hall-Effekt-Sensor Test");
}


void loop() {

}


// Interrupt-Routine
// Diese Funktion wird immer dann aufgerufen, wenn ein Magnet vom Arduino erkannt wird
void detectMagnet() {
 Serial.println("Magnet erkannt");
 delay(10000);
 Serial.begin(9600);
 gsm.begin(9600);
 gsm.println("ATDXXXXXXXXXX;"); 
 
}

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *). Das kannst Du auch noch nachträglich tun.

Du solltest Dich näher mit Interrupt-Routinen beschäftigern.
Sie müssen so kurz wie möglich sein, ein delay hat darin nichts zu suchen.
Für Deine Anwendung brauchst Du keinen Interrupt, das kannst Du im loop abfragen, wenn Du ohne Blockierung, also ohne delay programmierst.

Schau Dir BlinkWithoutDelay aus den Beispielen der IDE an und verstehe es.

Meinst Du, es bringt Dir viele Sympathien ein, wenn Du Dein Thema auf viele Einzelthreads aufteilst? Es könnte sein, dass Du dann sehr wenige Antworten bekommst.

Gruß Tommy

jonas10:
Das Programm funktioniert Einwand....

Und das kann schon mal nicht stimmen.

Warum der Magnet nicht erkannt wird, können wir nicht wissen.
Evtl. ist dieser zu weit vom Hallsensor entfernt.

Das Programm funktioniert Einwandfrei der Magnet wird erkannt aber sobald zusätzlich irgendwas in die Funktion "void detect ()" geschrieben wird, wird der Magnet nur teilweise erkannt

jonas10:
Das Programm funktioniert Einwandfrei der Magnet wird erkannt aber sobald zusätzlich irgendwas in die Funktion "void detect ()" geschrieben wird, wird der Magnet nur teilweise erkannt

"void detect()" sehe ich nicht.

Du meinst sicher "void detectMagnet()".

Dein Problem hat die Tommy schon geschildert.
Warum liest du nicht richtig.
Je länger deine IRQ-Routine wird, umso schlimmer.

Wozu überhaupt einen IRQ ?

Die gebetsmühlenartige Wiederholung Deiner Behauptung wird nicht zum Ziel führen.
Die Ursache für das Fehlverhalten habe ich Dir genannt.

Nochmal: In einer Interruptroutine werden nur Flags gesetzt, die dann im Loop ausgewertet werden.

delay, Serial.print, gsm und ähnliche langsame Sachen haben darin nichts zu suchen.

Es bringt Dir nichts, unangenehme Antworten zu ignorieren.

Gruß Tommy

Ok Danke werde probieren das Problem zu lösen

jonas10:
Ok Danke werde probieren das Problem zu lösen

Und lass dabei den IRQ aus dem Spiel.
Das geht auch alles ohne den.

Habe mir das jetzt in etwa so vorgestellt, jedoch bis noch keinen erfolg gehabt habe mir auch BlinkWithoutDelay angesehen

const int hallSensorPin = 12; // Pin an dem der Hall-Sensor angeschlossen ist

int hallSensorStatus = 0;

void setup() {
  // Pin fuerr den Hall-Sensor als Eingang definieren
  pinMode(hallSensorPin, INPUT);
}

void loop() {
  // Status des Hall-Sensors auslesen
  hallSensorStatus = digitalRead(hallSensorPin);

  if (hallSensorStatus == LOW) {     

    Serial.println("EIN"); 
  } else {
    // LED ausschalten
    Serial.println("AUS");
  }

}

Hallo , der Anfang ist ja schon Mal richtig , und wird der Sensor erkannt . ??

Also sorry du musst schon ein bisschen was sagen , wir können sonst besser mit der Glaskugel kommunizieren. Wenn die dann endlich Mal wieder läuft , die ist nämlich seit ein paar Wochen kaputt.

Heinz

jonas10:
Habe mir das jetzt in etwa so vorgestellt ...

Liefert ein Hall-Sensor nicht ein analoges Signal? Wäre da ein Analog-Pin nicht besser geeignet?

Ich kenne diese Dinger blöderweise nicht. Im Datenblatt des Sensors solltest Du alle Informationen finden können.

Gruß

Gregor

Habe das Problem mittlerweile gelöst aber trotzem Danke

Hi

Dann gibt's die Hall-Sensoren auch 'tastend' und 'schaltend'.
Normal sind die 'Tastenden', Die auf eine Seite des Magneten reagieren und dann 'durchschalten', solange der Magnet 'gesehen' wird.
Die 'Schaltenden' kann man mit der einen Magnet-Seite AN-schalten (bleibt dann auch an) und mit der Anderen AUS-schalten.
Was Du für einen Sensor hast, ob Dieser korrekt angeschlossen ist - Das weiß nur der liebe Gott (und Du).
Und wie??
Eine Antwort, daß auch folgende Fragende nicht strack gegen die Wand rennen, wäre schon 'lieb'.

MfG

jonas10:
Habe das Problem mittlerweile gelöst aber trotzem Danke

Dann zeige uns, wie du es gelöst hast.
Auch das gehört zur Forums-Etikette.

jonas10:
Habe das Problem mittlerweile gelöst aber trotzem Danke

Es wäre schön, wenn Du mitteilen würdest, wie Du es gelöst hast.

Gruß

Gregor