Wlan Wecker versteckter Fehler

Hallo zusammen,

ich wollt mir ein Wecker bauen den ich im Wlan einstellen kann. ich hab folgenden Bauplan und code erstellt aber irgendwie funktioniert der Wecker nicht.

Ich kann mich Verbinden,die Zeit läuft auch, ich kann auch den Wecker stellen aber, den alarm notiert er sich nur 2 sekunden. Ich denke irgend ein fehler ist mit dem IR. denn wenn ich ihn abklemme geht der wecker aber auch nur kurz.

Ziel ist es den Wecker mit den IR auszuschalten.

könnt ihr mir helfen?

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <arduino.h>
#include <WiFiClient.h>
#include <Wire.h>
#include <RTClib.h>
#include <time.h>
char t[32];
RTC_DS3231 rtc;
const char* ssid = "alarmclock";
const char* password = "123456789";
String alarmtime;
String hr,minut ;
int hr1, minut1;
int inputPin = 12; 
int val=0;
int motor=13;
int timee=0;
DateTime now = rtc.now();
ESP8266WebServer server(80);

const char MAIN_page[] PROGMEM = R"=====(
<!DOCTYPE html> 

<html>
<head>

    <title>Alarm Clock</title>
</head>

<body>

<h1>WELCOME TO Alarm Clock</h1>

<h2>Kindly enter alarm time </h2>
<h3>In 24hrs hour:mins format e.g 16:58</h3>

<form action="/action_page.php">

<p>Alarm Time:</p>
<p><input type="numeric" name="alarm_time" autofocus></div></p>
<a><input type="submit" value="Submit"></a></p>

</form>
</div>
</body>

</html>
)=====";

void alarmotor(){
 DateTime now = rtc.now();
 
 val = digitalRead(inputPin); // read input value 
   if (val == LOW)
   { // check if the input is HIGH
     unsigned long startMillis;
     unsigned long currentMillis;
     const unsigned long period = 30000; 
     startMillis = millis(); 
      if (startMillis - period >= period)
      {
     Serial.println(startMillis);
      Serial.print("here");
      analogWrite(motor, 512);
      delay(2000);
      analogWrite(motor, 128);
      delay(2000);
      analogWrite(motor, 0);
      delay(2000); 
      analogWrite(motor, 0);
      delay(60000);
         return;
      }
       if  (startMillis - period < period) 
      {analogWrite(motor,512);
      Serial.println("keep hand on longer");
      startMillis=millis();
      return; 
     
   }
      
      }
    
}


void handleRoot() {
 //String s = MAIN_page; //Read HTML contents
 server.send(200, "text/html",MAIN_page ); //Send web page
}


String handleForm() {
// String AM_PM = server.arg("AM/PM"); 
 String alarm_time = server.arg("alarm_time"); 
 //Serial.print("am or pm:");
 //Serial.println(AM_PM);

 //Serial.print("alarm_time");
 //Serial.println(alarm_time);
 
// String s = "<a href='/'> Go Back </a>";
 server.send(200, "text/html","Alarm is set" "
<a href='/'> Go Back </a>"); //Send web page
 return alarm_time;
}


void setup(void){

//  
  Serial.begin(9600);
  
  
  Wire.begin();
  rtc.begin();
  //rtc.adjust(DateTime(21.01.2020(__DATE__),F(__TIME__)));

  WiFi.softAP(ssid, password); 
  //Connect to your WiFi router
  Serial.println("");

  // Wait for connection
  IPAddress IP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(IP);

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());;  //IP address assigned to your ESP

  server.on("/", handleRoot);  //Which routine to handle at root locatio
  server.on("/action_page.php", handleForm);

  server.begin();                  //Start server
  Serial.println("HTTP server started");
  pinMode(inputPin, INPUT);
  pinMode(motor, OUTPUT);
}

void loop(void)
{
  server.handleClient();
  DateTime now = rtc.now();

  sprintf(t, "%02d:%02d:%02d %02d/%02d/%02d",  now.hour(), now.minute(), now.second(), now.day(), now.month(), now.year());  
  
  Serial.print(F("Date/Time: "));
  Serial.println(t);

  delay(1000); 
        //Handle client requests
      alarmtime=handleForm();      
      Serial.println(alarmtime);
      hr= alarmtime.substring(0, 2);
      hr1 = hr.toInt();
      minut= alarmtime.substring(3, 5);
      minut1 = minut.toInt(); 

      if( now.hour() == hr1 && now.minute() == minut1)
      {Serial.println("alarm in on");
      analogWrite(motor,512);
      alarmotor();
      }
}

Bauplan.png

nodemuc_alarm_clock.ino (3.74 KB)

Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *). So ist er auch auf portablen Geräten lesbar.
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Dein Wecker kann nicht funktionieren, da du einen Fehler im Schaltbild hast.
Der Ausgang vom IR-Empfänger liegt auf GND, das macht keinen Sinn.

das habe ich schon geändert. leider funktioniert er trotzdem nicht.

Baublan 2.jpg

Dann b

Komacrew:
das habe ich schon geändert. leider funktioniert er trotzdem nicht.

Dann beschreibe mal besser, was geht und was nicht.
Aus deiner obigen Beschreibung werde ich nicht schlau.

"Alarm notiert er nur 2 Sek."
"Geht der Wecker nur kurz"

Was soll das heißen ?

HotSystems:
Was soll das heißen ?

Das heist "alarm_time" wird beim verlassen der Funktion "handleForm" weggeworfen!!

Macht also, was programmiert wurde.

TO, das solltest du ändern!

Gruß Fips

Und hast Du auch den GND vom Node mit dem GND vom Motortreiber und - der Batterie verbunden?
Im Schaltplan fehlt diese Verbindung, Dadurch hat das Steuersignal für den Motortreiber keinen Bezugspunkt.

Und wenn Du solche Fehlerkorrekturen gemacht hast, solltest Du das auch im Schaltplan ändern und den korrigierten Schaltplan posten. Sonst wirst Du vlt. noch öfters darauf hingewiesen, dass Deine schaltung so gar nicht funktionieren kann.

LG Stefan

Derfips:
Das heist "alarm_time"....

Danke Fips.

Nur schade, das unsere Fragen und Hinweisen den TO überhaupt nicht interessieren.

doch interessiert mich schon. Um alles zu ändern was hier erwähnt wurde brauche ich auch meine Zeit den ich bin auch noch Anfänger und taste mich ran. Entschuldigt mich das ich nicht sofort Antworte.

Hi

Toll, daß Du wohl interessiert bist - toller wäre Es, wenn Du auch auf die anstehenden Fragen Bezug nehmen würdest - dadurch entscheidet sich, ob von unserer Seite das Interesse, Dir helfen zu wollen, stehen bleibt, oder fällt.

Du musst nicht im Sekundentakt antworten, aber Deine Antwort sollte auch Antworten enthalten ...

Ob Du Anfänger bist, oder nicht, musst Du ebenfalls nicht alle zwei Posts wiederholen - Das bekommen wir schon mit - zur Not fragen wir nach :wink:

MfG