Arduino TFT färg klocka (3 / 4 steg)
Steg 3: Koden
Några av koden kommer direkt från exempel skisser som kom med sköld och RTC modul. Resten var kokas upp av undertecknad verkligen och tungt kommenterade för din användarvänlighet. En sak måste du se upp för är de olika sätt du kan ställa in för TFT-skärmen. Det finns även som en enkel breakout styrelse (utan joystick eller SD-kortläsare) och ordningen på pinout är annorlunda för det. Det finns också flera versioner av skölden som anges med färgen på fliken på skärmen beskyddare. Min kom med en grön flik men bara arbetat med svart fliken kod aktiverad. Du måste bara prova några saker till få din arbetar. Se exempel skisser för hjälp.
Du måste inkludera följande bibliotek:
- Wire.h
- SPI.h
- RTClib.h
- Adafruit_GFX.h
- Adafruit_ST7735.h
Kontrollera att du har hämtat och installerat i IDE innan du får gå. Tre första måste vara i den exakta ordningen eller får du kompilera fel. Jag var illa för ett bra tag innan jag hittade denna lilla godbit i ett forum någonstans.
Jag ska förklara koden lite. Om du vill välja en färg att använda på skärmen måste du använda en 16-bitars hex värde men det är i en konstig konfiguration som är lite svårt att förstå i början. Det kallas 565 färg och det är för det gröna värdet behandlas annorlunda. Det finns fem bitar för röd och blå men eftersom ögat är mer känslig för grönt används 6 bitar som som. Så har du 16 för röd och blå och 32 värden för grönt. Men det är inte allt. Det lägsta värdet är faktiskt noll så det högsta värdet är faktiskt 15 eller 31.
Medan du kan få ut ett hex diagram och göra vissa konverteras det är slags besvärligt att vara ständigt att skriva i färgvärden i hex som 0xFFFF för vit (du kan förklara vissa färgvärden, se upp på skissen) GFX biblioteket ger en trevlig liten funktion för att ta hand om saker för dig med värden från 0 till 255.
Vad tidsdelen av skissen gör är att ta timvärdet och funktionen karta för att konvertera 24 timmar, 60 minuter, och 60 sekunder till värden mellan 0 och 255. Sedan ansluts den dessa variabler till tft. Color565 funktion och det hand tar om kommer upp med det hex värdet. Timmar ge röda värdet, minuter gröna och sekunder blå.
redValue = map(hour(t), 0, 23, 0, 255);
grnValue = map(minute(t), 0, 59, 0, 255);
bluValue = map(second(t), 0, 59, 0, 255);
tft.fillRect (0, 0, 160, 50, (tft. Color565(redValue, grnValue, bluValue)));
Det är vad skissen används för att ange text-och fältet. Jag bråkade med att eliminera det svarta fältet och istället få tiden visas i svart med klartext bakgrund men det var lite flickery. Det är därför baren finns och den drar två rektanglar av färg i stället för att bara fylla skärmen med färg.
När det gäller färger kan du få veta om var du är i dag eller timme med bara en snabb blick.
Strax efter midnatt är det mycket mörka eftersom röda värde (timmar) är noll och så är de blå och gröna (minuter och sekunder). Som understöder bocka av saker får blåare och blåare tills minuten fästingar och en liten bit av grön läggs och blå värdet återställs till noll. När det är nästan en AM saker kommer att bli mycket grönt med sekunder tar saker i kricka som kryper de upp.
Vid lunchtid finns det en hel del rött i play så saker och ting börjar att få lite mer lila.
Och i slutet av dagen, speciellt precis innan midnatt saker är mycket ljus eftersom alla värden är mycket höga på denna punkt.
Om du också har sköld med joysticken är det mycket lätt att lägga till lite kod för att ställa in ljusstyrkan. Du kan bara lägga två knappar till några två stift som kan göra en digitalRead om du har gått den enkla vägen. Använd en för att anropa funktionen ljusstyrka och sedan de andra två för upp och ner. Hit select igen för att avsluta.
Om du vill göra sig av med knappar helt kan du antingen program ljusstyrka beroende på tid på dagen, eller använda en fotosensor och styra med omgivande ljuset nivåer.
Här är koden: