En mi último Blog en he presentado una placa con el nombre con Scroll propio al texto, un empleo posible es un letrero de castas de carta. Sin embargo encuentro que nuestro display con un anuncio del nombre y Scroll sólo del texto como letrero de castas de carta algo subexige en las posibilidades es. ¿Cómo esto sería, por eso, si nuestro display indicaría también si de las castas de carta era abierto antes por el cartero? Así podemos mirar por así decir directamente „a una mirada“ si esto es rentable abrir a las castas de carta o no.
Con eso tenemos que ampliar nuestro código sólo algo y efectuar un cambio pequeño y respectivamente una ampliación en el circuito. Además necesitamos un microinterruptor como portero.
Principio funcional:
Añadimos Microtaster que es demasiado oprimido por la válvula de castas de carta en el estado normal „“ y cierra por lo tanto el contacto. Si la válvula de castas de carta es abierta ahora, se abre brevemente también de Drucktaster y da un telún impulso a nuestro microcontroller, él esta señal „como Esto una carta era interpretada de modo roto“.
En el display este símbolo de carta es indicado después para 12 horas:
Mediante este símbolo se puede reconocer enseguida si una carta era rota.
El circuito debe ser ampliado con eso en Taster (portero).
Aquí el plan de cambio necesario y respectivamente ampliado:
Cargamos en lo alto el código folgendne en nuestro Arduino:
#include <LiquidCrystal.h> #include <avr/sleep.h> //port 10 porteros //Constants & Definitions const float Warnvoltage = 4.0; const float Sleepvoltage = 3.2; const int Scrollspeed = 700; const long interval = 1000; //Definición of a Second en Milliseconds //const el byte de VoltTestPin = 0;//la prueba la entrada análoga 0 const byte VoltTestPin = 2; //Productivamente Alalogeingang 2 //Realmente Time Clock long previousMillis = 0; //ve molesta leía time que measured byte seconds = 0; byte minuto = 0; byte hour = 0; //Bramante Defitions Bramante LetterBoxOwner = " Tobias Kuch"; //¡Por favor, en el nombre propio cambian! Bramante StandardScolltext = "No rompen, por favor, ninguna publicidad y ningunos periódicos gratuitos. ¡Gracias! -"; Bramante LetterArrivedScolltext = "Muchas gracias para la entrega del envío postal. El receptor es avisado."; Bramante BattInfo; //Propesar logic byte CharPointers[200]; float value; int Voltage; boolean BatteryEmpty = false; boolean IsSensorActive = false; //¡En Reset High reconocido la señal (Geöffnneter el interruptor no se hace de modo no hecho caso), si ningún interruptor desde el principio! exisiert (Mucho tiempo HighPegel) byte Moda de display = 0; byte oldDisplaymode = 0; boolean MailAlreadyDelivered = false; int Switchstate = 1; byte DispLATextOneTime = 0; byte DispLATextOneTimeWASDisp = 0; int cmpMsgWith = 0; int MAMsgDC = 0; byte MatC = 0; //12 horas de anuncio de los símbolos "la nueva noticia" byte newChar[8] = { 0b11111, 0b10011, 0b10101, 0b11001, 0b11001, 0b10101, 0b10011, 0b11111 }; //LiquidCrystal (rs, enable, d4, d5, d6, d7); LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void InitLcdScreen () { lcd.clear(); lcd.cursor de juego(0, 0); lcd.print("Letterbox"); lcd.cursor de juego(0, 1); lcd.print("tobias.kuch at"); delay(2000); lcd.cursor de juego(0, 0); lcd.print(LetterBoxOwner); lcd.cursor de juego(0, 1); lcd.print("googlemail.com"); delay(3000); } void Setup() { for (int a = 0; a < 200; a++) { CharPointers[a] = a; } lcd.createChar(0, newChar); lcd.begin(16, 2); //salida the library pinMode(10, INPUT_PULLUP); //for new el mail arrival el Detection LOW: Válvula a HIGH: funciona abiertamente Switchstate = digitalRead(10); InitLcdScreen(); analogReference(DEFAULT); if (!Switchstate) { IsSensorActive = true; } } void NormalScrolltext () { int cmpMsgWith = StandardScolltext.length() - 2; Moda de display = 0; delay (Scrollspeed); lcd.cursor de juego(0, 1); for (int a = 0; a < 17; a++) { lcd.print(StandardScolltext[CharPointers[a]]); } for (int a = 0; a < cmpMsgWith; a++) { CharPointers[a] = CharPointers[a] + 1; if (CharPointers[a] > cmpMsgWith) { CharPointers[a] = 0; } } } void BatteryWarningScrolltext () { BattInfo = "- ¡la estima! Tensión de pila:" + Bramante(Voltage * 3) + " El voltio. Cargan, por favor, el acumulador. -" + StandardScolltext + " "; int cmpMsgWith = BattInfo.length() - 2; Moda de display = 2; delay (Scrollspeed / 2 ); lcd.cursor de juego(0, 1); for (int a = 0; a < 17; a++) { lcd.print(BattInfo[CharPointers[a]]); } for (int a = 0; a < cmpMsgWith; a++) { CharPointers[a] = CharPointers[a] + 1; if (CharPointers[a] > cmpMsgWith) { CharPointers[a] = 0; } } } void LetterArrScrolltext () { int cmpMsgWith = LetterArrivedScolltext.length() - 2; Moda de display = 3; delay (Scrollspeed - 50 ); lcd.cursor de juego(0, 1); for (int a = 0; a < 17; a++) { lcd.print(LetterArrivedScolltext[CharPointers[a]]); } for (int a = 0; a < cmpMsgWith; a++) { CharPointers[a] = CharPointers[a] + 1; if (CharPointers[a] > cmpMsgWith) { CharPointers[a] = 0; DispLATextOneTimeWASDisp = 1; } } } void Powerdown () //Toggle Powerdown, if critical Voltage is reached. { lcd.cursor de juego(0, 1); lcd.print(" "); lcd.cursor de juego(0, 1); lcd.print("Sys en SleepMode"); set_sleep_mode(SLEEP_MODE_PWR_DOWN); cli(); sleep_enable(); fue(); sleep_cpu(); //tipo de resto } boolean BattWarning () { value = analogRead(VoltTestPin); //read el input the pin value = value * 0.00488; if (value <= Sleepvoltage) { Voltage = value; Powerdown(); } if (value <= Warnvoltage) { Voltage = value; return true; } { return false; } } void runrealTimeClock() { //Realmente Time Clock & cuenta atrás unsigned long currentMillis = millis(); if (currentMillis - previousMillis > interval) { previousMillis = currentMillis; //Cuenta atrás //Countup 24 San Hr. seconds = seconds + 1; if (seconds > 59) { seconds = 0; minuto = minuto + 1; BatteryEmpty = BattWarning (); if (minuto > 59) { minuto = 0; if (MatC > 1) { MatC --; //Anuncio de la noticia del símbolo } hour = hour + 1; } if (hour > 23) { hour = 0; } } } } void ChangeDisplayMode() { if ( Moda de display > oldDisplaymode ) { oldDisplaymode = Moda de display; for (int a = 0; a < 200; a++) { CharPointers[a] = a; } } if ( Moda de display < oldDisplaymode ) { oldDisplaymode = Moda de display; for (int a = 0; a < 200; a++) { CharPointers[a] = a; } } } void DisplayMailArrivedSig(boolean trzstat) { byte custHeartChar = 0; if (trzstat) { lcd.cursor de juego(15, 0); lcd.write(custHeartChar); } else { lcd.cursor de juego(15, 0); lcd.write(" "); } } void NewLetterArrivedCheck() { int inPin = 10; Switchstate = digitalRead(inPin); //¡if (Switchstate &&! MailAlreadyDelivered) if (Switchstate == true ) { MailAlreadyDelivered = true; DisplayMailArrivedSig(true); MatC = 11; //Mail Arrived el indicador de tiempo (citación) //MAMsgDC = LetterArrivedScolltext.length (); DispLATextOneTime = 1; } if (MatC == 1) { DisplayMailArrivedSig(false); MailAlreadyDelivered = false; MatC = 0; DispLATextOneTime = 0; DispLATextOneTimeWASDisp = 0; } } void loop() { runrealTimeClock(); if (!BatteryEmpty) { if ( DispLATextOneTime == 1 && DispLATextOneTimeWASDisp == 0) { LetterArrScrolltext (); } else { NormalScrolltext (); } } if (BatteryEmpty) { BatteryWarningScrolltext (); } ChangeDisplayMode(); if (IsSensorActive) { NewLetterArrivedCheck(); //prueba if a new letter que arrived if así, marco//it en el display for next 12 Hours } }
De estos y otros proyectos de mí encuentras también en mis nuevos GitHub Lado.
Mucha diversión copiando y hasta la vez cercana.
3 comentarios
KoPP
Nette Menschen könnten auch noch ein “Danke lieber Briefträger” ausgeben.
Flo
Gute Idee, aber ich werde das noch etwas erweitern:
Wenn wir noch einen zweiten Mikroschalter einsetzen um die “Entnahmeklappe/Briefkastentür” zu überwachen, kann man damit das Briefsymbol wieder löschen und es öffnen nicht alle Bewohner den Kasten, wenn sie nach Hause kommen. Wir vermeiden so die “Enttäuschung” der zweiten und dritten Heimkehrer…
Viele Grüße Flo
Arnold Schommer
Den Brief einfach fix für 12 Stunden anzuzeigen ist eine pragmatische, einfache und damit wenig fehlerträchtige Lösung.
Ich hätte vielleicht einen Taster eingeplant, mit dem die Anzeige dann gelöscht wird. Sei es, dass man den zweiten Taster beim Entnehmen des Briefes drückt oder dass er – wenn das “baulich” geht – das Öffnen des Briefkastens “erkennt”. Aber dabei kann halt einiges “schief gehen”.