Ik blijf wat sukkelen met de werking
Ik heb m'n printje wat aangepast en
- R2 vervangen door een 2k7 weerstand
- C1 en R1 weggelaten (en R1 vervangen door een verbinding natuurlijk)
- R3 is weggelaten (dus connectie 5V is weg). in de plaats hiervan zit er een levelconverter die de +5v en de 3.3v van de esp overzet (en dus reeds een weerstand heeft die naar de +5v trekt), dus de schakeling zit aan de rechterkant van onderstaand plaatje, de esp links.
Met deze wijziging leest de esp correct uit als :
- er geen Vac aanwezig is
- er wel Vac aanwezig is
- het geheel traag knippert
Als het snel knippert gaat hij evenwel vaak de mist in.
Hij gaat van status 3 (de correcte) naar status 1 (continue branden) of 0 (uit) etc...
De 50Hz komt er evenwel niet door (ik print de lengte van de puls via Serial)
Vandaar deze vragen:
- maakt het een verschil of C2 een radiale elco is (dus met een + en -) of een gewone keramische?
- kan het zijn dat het in het programma de Serial.print en het verzenden naar http de metingen mis doet gaan of zou de esp32 snel genoeg moeten zijn om dit te kunnen?
- doe ik iets anders compleet fout
Het stukje code die ik gebruik is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| schuifCurrentState = digitalRead(schuifpoortIN);
unsigned long currentTimeSchuif = millis();
int mogelijkfout = 0; // om de fout eruit te halen dat het zegt traag knipperen, maar dat het snel knipperen is - onzeker waarom dit er hierin zit ;-)
if (schuifCurrentState != schuifLastState){ // de status is aangepast
Schuiftijdsindsvorige = currentTimeSchuif - SchuifTimeOfLastButtonEvent;
SchuifTimeOfLastButtonEvent = currentTimeSchuif;
Serial.print("ms sinds vorige is: "); ////////// ifv testen
Serial.println(Schuiftijdsindsvorige); ////////// ifv testen
}
//0: staat volledig dicht, 1: staat in pauze of volledig open, 2: gaat open, 3: gaat dicht, 5: onzeker
if (currentTimeSchuif - SchuifTimeOfLastButtonEvent > 1000){// meer dan 1 seconden geen verandering, dus het zal niet knipperen, dus AAN of UIT - we mogen hier niet de Schuiftijdsindsvorige gebruiken omdat in deze stand de status niet wijzigt...
// hiermee zit er nog een foutje in dat als er minder dan 1 seconden geleden naar volledig branden is overgegaan, het nog niet correct is weergegeven
if (schuifCurrentState == LOW){ //het is omgekeerd, door de pull-up, dus ze is laag als er signaal is
schuif_status = 1; //de led brand, we staan dus in pauze (voetgangersstand) of volledig open
foutmelding3="";
} else if (schuifCurrentState == HIGH) { //de poort is toe
schuif_status = 0;
foutmelding3="";
} else { //er klopt iets niet...
schuif_status = 5; //er is een probleem
foutmelding3="fout=Schuifpoort_onzeker-probleem?";
infoverzenden(foutmelding3); //verzenden naar de raspberry pi
}
} else if ((Schuiftijdsindsvorige > 650) && (Schuiftijdsindsvorige < 1000)){// meer dan 0.65 seconde geen verandering en minder dan 1 seconde (we mogen er niet vanuit gaan dat dit al minder dan 1seconde was door de if aangezien er geen update is wegens continu led aan of uit)
//het zal dus traag knipperen, volgens de metingen is traag ongeveer 775 en 826 ms lang (uit en aantijden)
schuif_status = 2; //de led knippert traag
} else if ((Schuiftijdsindsvorige < 650 )&& (Schuiftijdsindsvorige > 400)) { // het was minder dan 0.65 seconde sinds een verandering dus het zal snel knipperen, de check tegenover 0 is om te vermijden dat we nog met de vorige waarde in gedachten zitten, hiervoor zetten we dit op 0 in de if
schuif_status = 3; //de led knippert snel, volgens de metingen is snel ongeveer 516 en 564ms (uit en aantijden)
}
schuifLastState = schuifCurrentState;
if (debug) {
Serial.print("Status schuifpoort: (0: staat volledig dicht, 1: staat in pauze, 2: gaat open, 3: gaat dicht, 4: staat volledig open, 5: onzeker ");
Serial.println(schuif_status);
}
if ((schuif_statusOLD != schuif_status) && (mogelijkfout == 0) ) { // het is aangepast, dus de status verzenden naar de esp - 2e check is voor de fout van traag en snel knipperen zie hoger
teverzenden ="schuif_status=" + String(schuif_status);
infoverzenden(teverzenden); //verzenden naar de raspberry pi
schuif_statusOLD = schuif_status;
} |
en
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| void infoverzenden(String url3) {
WiFiClient client;
if (!client.connect(host, httpPort)) {
if (debug) {Serial.println("connection failed");}
return;
}
if (debug) {
Serial.print("Requesting URL: ");
Serial.println(url3);
}
// This will send the request to the server
client.print(String("GET ") + "/" + url2 + ".php?" + url3 + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
if (debug) {
Serial.print("totale url is: ");
Serial.println(host + String("/") + String(url2) + ".php?" + url3);
delay(500);
// Read all the lines of the reply from server and print them to Serial
while(client.available()){
String line = client.readStringUntil('\r');
Serial.print(line);
}
Serial.println("closing connection");
}
} |