ANOLOUGE DIGITAL-B-I-N-A-R-Y-KLOCKA ALLT I ETT!?!? (4 / 6 steg)

Steg 4: programmering



På grund av tidsbegränsning jag kunde inte slutföra min binär klocka läggs till de andra klockorna. Jag kommer att avsluta projektet och post binärfilen klocka på här senare.

Här är programmet

#platform "uLCD-32PT_GFX2"
#inherit "4DGL_16bitColours.fnc"
#inherit "FONT4.fnt"

#constant falskt, sant / / FALSE = 0, sant = 1

#STACK 100

bild etiketter för vad vi använder i GFX2DEMO. GCI (bild kontroll indexvärden)
#constant SEG7 0
#constant knappsats 1
#constant EXITBTN 4
#constant ADDBTN 8
#constant CHECKBTN 15
#constant CLOCKBTN 27

klockan register
#constant sekunder 0
#constant minuter 1
#constant timmar 2
#constant DS1307 0xD0
#constant WR 1
var sekunder, minuter, timmar.
#constant SEG7_BG_COLOUR 0x0841 / / 7 seg display bakgrundsfärg

var iHndl; bild kontrollhandtag
var mx, min; mus/touch position
var edstate; klockan redigera stat, 1 = HH, 2 = MM, 3 = SS

var hFile;
#constant FACECOLOUR röd
#constant SECONDSCOLOUR vitt
#constant MINUTESCOLOUR gul
#constant HOURSCOLOUR blå

globala variabler
var seconds2, minutes2, timmar2;
var targetX, targetY;
var screenwidth, screenheight;
var xc, yc, r;
var n, x, y, k, colr, t, kj: = 1;
var kkl: = 1;
var exit2: = 0;
var firstx, firsty, x 2, y2, state2;
var set_timeButtonX, set_timeButtonY;

karta över nyckelvärden för knappsatsen
#DATA
byte nycklar 7,8,9,4,5,6,1,2,3,0,0,0
#END

Max tid register värde för redigera kontroll
#DATA
byte maxval 0x59, 0x59, 0x23
#END

Översätt redigera pos till krävs register
#DATA
ordet xlat timmar, minuter, sekunder

#END

FUNC DrawHand (var längd, var vinkel, var färg)

gfx_MoveTo (OLC, yc); MÅSTE RE_ESTABLISH MITTPUNKTEN!

gfx_Set (OBJECT_COLOUR, färg);
gfx_Orbit (vinkel -90, längd);
gfx_LineRel (targetX, targetY); FEL! Picaso arv hade en trasig gfx_LineRel som fungerade ok här,
gfx_LineTo (targetX, targetY); men det bör vara gfx_LineTo, detta är nu korrekt
endfunc

FUNC knappsatsen (var staten)
var privat charpos;
var temp, r, n, x, y, k, x 1, y1, xoffs, yoffs, oldshadow;
var privat keyval;
IF (!. Clock.Edit)
IF(!edstate)
charpos: = 2;
oldshadow: = gfx_Set(BEVEL_SHADOW,1);
img_Darken (iHndl, knappsats);
img_SetAttributes (iHndl, knappsats, I_TOUCH_DISABLE); Inaktivera tangentbordet touch
img_SetWord (iHndl, knappsats, IMAGE_INDEX, 10); Ange 10. ram, knappen upp (opressad) tillstånd
gfx_Set(BEVEL_SHADOW,oldshadow);
annat
img_ClearAttributes (iHndl, knappsats, I_TOUCH_DISABLE); Aktivera knappsatsen touch
keyval: = 10; till en början anta ingen nyckel pressat, Välj sista bildrutan
IF(State == TOUCH_PRESSED)
calc vilken knapp trycks
x1: = 4 + img_GetWord (iHndl, knappsats, IMAGE_XPOS);
Y1: = 4 + img_GetWord (iHndl, knappsats, IMAGE_YPOS);
xoffs: = (img_GetWord(iHndl, KEYPAD, IMAGE_WIDTH)-8) / 3;
yoffs: = (img_GetWord(iHndl, KEYPAD, IMAGE_HEIGHT)-8) / 4;
x1: = 44.
Y1: = 89.
xoffs: = 16. Vi vet var knappsatsen är, använda bara fasta värden för att spara codespace
yoffs: = 16.
för (y: = y1; y < y1 + yoffs * 4; y += yoffs) / / nu hitta touch co-ord
för (x: = x1; x < x1 + xoffs * 3; x += xoffs)
n ++;
om (mx > x & & mx < x + xoffs & & min > y & & min < y + yoffs) k: = n;
Nästa
IF(k) semester.
Nästa
IF(k) / / om vi fick en giltig nyckel
keyval: = nycklar [k - 1]; få nyckeln val
r: = xlat [edstate - 1]; Peka på rätt register
Temp: = Clock.time[r]; flytta och lägga till nya siffran
Temp: = ((temp << 4) & 0xF0) + keyval;
Clock.Time[r]: = härda;
Clock.Edit & = ~ (charpos << ((edstate-1) << 1)); ändra understreck
charpos: = 1;
Clock(); uppdatera 7seg exempel
endif

endif
img_SetWord (iHndl, knappsats, IMAGE_INDEX, keyval); Set krävs ram, om 10 ram, det är knappen upp (opressad) staten
endif
img_Show (iHndl, knappsats);

endfunc

Visa tid normalt om redigera == 0, annars visar krävs understreck.
varje bit i var edit coresponds till en understrykning visas, bit5 är
siffran 1 CEN. bit 0 = siffran 6
FUNC Clock()
PAUSE(1000);
var privat redigera; i redigeringsläget, väljer bitar 5:0 uderscores för siffrorna 6:1
var privat tid [3]. tid i BCD-format, coresponds att klocka registrerar sekunder, minuter, timmar
var k, n, xpos, regptr;

#constant X 22 / / x-position för tiden
#constant Y 32 / / y läge för tiden
#constant W 22 / / siffra bredd

img_Enable (iHndl, SEG7); Aktivera 7seg visning medan vi Visa det
Xpos: = X; Ange start x
regptr: = timmar; börja på timmar
medan (n < 6)
img_SetPosition (iHndl, SEG7, xpos, Y); Ange position för siffra
om ((Redigera >> n) & 1) / / om redigering siffra,
k: = 11; Välj understreck
annat
k: = tid [regptr]; annars få krävs tid register
om (! () n & 1)) k: = k >> 4. få HI nibble om Hej siffra
endif
img_SetWord (iHndl, SEG7, IMAGE_INDEX, k & 15); Välj krävs siffror

img_Show (iHndl, SEG7); Visa bild
Xpos += W;
n ++;
om (n == 2 || n == 4) / / vid behov
regptr--; dekrement registrera pekaren
Xpos += 4.
gfx_RectangleFilled (xpos, Y + 10, xpos + 4, Y + 14, ORANGE); Placera kolon
gfx_RectangleFilled (xpos, Y + 20, xpos + 4, Y + 24, ORANGE);
Xpos += 10.
endif
wend
img_Disable (iHndl, SEG7); Vi är klar visar, inaktivera 7seg visning
endfunc

Kontrollera att fiskens som redigerats bara är ok
snabb med ett kort meddelande om utanför intervallet,
ställa in redigeringsfältet tillbaka till samma pos för ett nytt försök.
Returnerar noll om misslyckades
FUNC checkRegisters()
var reg, retval: = TRUE;
IF(edstate)
REG: = xlat [edstate-1].
om (Clock.time [reg] > maxval[reg]) / / kolla för förnuftiga värde
gfx_MoveTo(90,3);
txt_FGcolour(Red); om inte, kasta meddelandet
putstr("ERROR\r");
PAUSE(500);
putstr("");
edstate--; och backup så vi stanna i nuvarande redigeringsfältet
retval: = FALSE;
endif
endif
returnera retval;
endfunc

FUNC main)
var n, c, colr: = grå;
var staten.
var utresa.

var igen: = 10;
medan (försök igen--& &! file_Mount()); montera enheten
om (! igen)
putstr ("Mount misslyckades!");
PAUSE(2000);
hemkomst. avsluta om inte montera
endif

iHndl: = file_LoadImageControl ("GFX2DEMO. DAT","GFX2DEMO. GCI", 1); bygga bildkontrollen hjälp krävs läge, returnerar en pekare till struktur fördelningen
om (! iHndl)
PAUSE(2000);
hemkomst. avsluta om kan inte ladda bild-kontroll
endif

I2C_Open(I2C_SLOW); 100khz
I2C_Open(I2C_MED); 400khz
I2C_Open(I2C_FAST); 1mhz NB DS1307 kan inte köra på 1mhz!

PAUSE(10);

n:=readbyte(seconds) & 0x7F; se CH bit är klart annars klocka kommer inte att köra
WriteByte(seconds, n);

PAUSE(1000);
gfx_Cls();

img_Disable(iHndl, all); först upp, inaktivera alla bilder

nu möjligt behöver vi
img_Enable (iHndl, knappsats); Vi vill att knappsatsen
img_Enable (iHndl, ADDBTN);
img_Enable (iHndl, EXITBTN); Vi vill på exit-knappen
img_Enable (iHndl, CLOCKBTN); Vi vill ha knappen tid

gfx_Origin(30,15);

gfx_Panel (PANEL_RAISED, 0, 0, 200, 17, mörkblå); namnlist
gfx_Panel (PANEL_RAISED, 0, 18, 200, 150, grå); huvudfönstret i panelen
img_SetPosition (iHndl, EXITBTN, 184, 2); Placera på exit-knappen
gfx_MoveTo(8,3);
txt_Opacity(OPAQUE);
txt_BGcolour(DARKBLUE);
txt_FGcolour(cyan);
putstr ("Set tid"); Placera titeln

7 seg uppvisning panel
gfx_Panel (PANEL_SUNKEN, 15, 24, 170, 50, grå);
gfx_Panel (PANEL_RAISED, 19, 28, 162, 42, SEG7_BG_COLOUR);

img_SetPosition (iHndl, knappsats, 40, 85); Placera knappsatsen
img_SetPosition (iHndl, CLOCKBTN, 140, 90); Placera knappen tid
img_SetPosition (iHndl, CHECKBTN, 138, 130); Placera på exit-knappen (dold till redigering)
img_SetPosition (iHndl, ADDBTN, 3, 100);
gfx_Button (BUTTON_UP, 3, 100, SILVER, röd, FONT1, 1, 1, "Set");

img_Show(iHndl, all); uppdatera bilder
gfx_Rectangle (90-140, 163, 111, röd); Placera röd rektangel runt tidsknappen (låst tillstånd)

Keypad(0);

touch_Set(TOUCH_ENABLE); Aktivera pekskärmen
Clock();

While(!Exit) / / bo i slinga til avsluta knappen hit

om (Clock.edit == 0 & & edstate == 0) / / om vi inte edition
c: = sekunder. om sekunder har rullat
IF(c!=Clock.Time[seconds])

Clock.Time[seconds]: = sekunder. Läs klocka chip
Clock.Time[Minutes]: = minuter;
Clock.Time[hours]: = timmar;
Clock();

endif
endif

staten: = touch_Get(TOUCH_STATUS); Vi ska se för någon touch verksamhet
MX: = touch_Get(TOUCH_GETX); Vi ska också ta tag i x
min: = touch_Get(TOUCH_GETY); och y-koordinaterna för beröring

IF(State == TOUCH_PRESSED) / / om det finns en press
n: = img_Touched(iHndl, ALL); se om någon profilen berördes
om (n! = -1)
IF(n == KEYPAD) / / om knappsatsen var rörd,
Keypad(State); uppdatera knappsats
annat
img_Lighten (iHndl, n); annars bara ljusare när vi berör
img_Show (iHndl, n);
endif
endif
gfx_Rectangle (90-140, 163, 111, colr); Placera rektangel runt klockan btn
endif

IF(State == TOUCH_MOVING) / / om det finns rörelse
endif

IF(State == TOUCH_RELEASED) / / om det finns en utgåva;
om (n! = -1)

IF(n==EXITBTN) utgång: = 1; avsluta om exit knappen hit

IF(n==CHECKBTN) / / om check knappen hit
IF(checkRegisters()) / / om senaste redigeringen var ok
sekunder: = Clock.time[SECONDS]; Skriv sekunder + håll
minuter: = Clock.time[MINUTES]; skriva minuter
timmar: = Clock.time[HOURS]; Skriv timmar
seconds2: = Clock.time[SECONDS]; Skriv sekunder + håll
minutes2: = Clock.time[MINUTES]; skriva minuter
timmar2: = Clock.time[HOURS]; Skriv timmar
n:=readbyte(seconds) & 0x7F; utgivnings håll
WriteByte(seconds, n);
PAUSE(100);
Clock.Edit: = 0; inte redigering nu, kör mode
edstate: = 0;
Colr: = röd;
img_Disable (iHndl, CHECKBTN); Inaktivera check knappen
gfx_RectangleFilled (138, 130, 138 + 28, 130 + 28, grå); radera knappen Kontrollera
Clock();
Keypad(0);
annat
n: = CLOCKBTN; annat fel, gör om nuvarande redigera fas
endif
endif

IF(n==ADDBTN)
om (kkl == 0)
Main ();
KKL: = 1;
endif
om (kkl == 1)
KKL: = 2;
endif
om (kkl == 2)
gfx_Cls();
iHndl: = file_LoadImageControl ("GFX2DEMO. DAT","GFX2DEMO. GCI", 1);
om (! iHndl)
PAUSE(2000);
hemkomst.
endif
img_Disable(iHndl, all);
PAUSE(10);

img_Enable (iHndl, ADDBTN);
img_SetPosition (iHndl, ADDBTN, 30, 10);
img_Show (iHndl, ADDBTN);
exit2: = 1;
seconds2: = Clock.time[SECONDS]; Skriv sekunder + håll
minutes2: = Clock.time[MINUTES]; skriva minuter
timmar2: = Clock.time[HOURS]; Skriv timmar
kJ: = 1;
endif
endif

IF(n == CLOCKBTN)
img_Darken (iHndl, CLOCKBTN);
img_Show (iHndl, CLOCKBTN);
checkRegisters(); Kontrollera om det finns rättsliga värden
om (++ edstate == 4) edstate: = 1; Bläddra igenom redigeringsfält
Clock.Edit: = 3 << ((edstate-1) << 1); anger krävs bitar hög i Redigera register
Keypad.charpos: = 2; börja redigera minst siffran
Clock.Time[xlat [edstate-1]]: = 0; noll Anläggningsregister redo
img_Enable (iHndl, CHECKBTN); Aktivera check knappen
img_Show (iHndl, CHECKBTN); Visa den
gfx_Rectangle (138, 130, 138 + 27, 130 + 27, grå); rektangeln bli av dessa irriterande justering prickar
Colr: = kalk;
Clock();
Keypad(State);
endif

IF(n == KEYPAD) / / om knappsatsen släpper
Keypad(State); uppdatera tillstånd
endif

endif
gfx_Rectangle (90-140, 163, 111, colr); Placera rektangel runt klockan btn
n: = -1;
endif
Setup();
wend
setupclock();
endfunc

FUNC setup()
om (exit2 == 1 & & kj == 1)
kJ: = 0;
txt_Set (TEXT_OPACITY, OGENOMSKINLIG);
ScreenWidth: = gfx_Get (X_MAX);
ScreenHeight: = gfx_Get (Y_MAX);
XC: = screenwidth >> 1.
YC: = screenheight >> 1.
r: = MIN (screenwidth, screenheight) >> 1.
gfx_Set (PEN_SIZE, SOLID);
gfx_Circle (xc, yc, r-16, FACECOLOUR);
gfx_Set (PEN_SIZE, disposition);
n: = -8;
medan (n ++ < 8)
Colr: = grön,
gfx_Circle (xc yc, r + n-8, colr);
wend

Ställ in mittpunkten
gfx_MoveTo (OLC, yc);

en variabel som mål för kommandot orbit
gfx_OrbitInit (& targetX, & targetY);

Markera timmarna runt clockface
gfx_Set (PEN_SIZE, SOLID);
gfx_MoveTo (OLC, yc);
n: = -90; klockan 12 position
medan (n < 270)
gfx_Orbit n, r-6.
k: = 3;
om (! () n % 90)) k: = 5;
gfx_Circle (targetX, targetY, k, blå);
n: = n + 30. varje 30 degreees
wend
KKL: = 0;

setupclock();
Touch();
annat
setupclock();
endif
endfunc

FUNC setupclock()
sekunder: = 80.
minuter: = 89.
timmar: = 18;
Upprepa
om (Clock.edit == 0 & & edstate == 0)
PAUSE(1000);
om (kkl == 1)
skriva ut ("The Time", [DEC1Z] timmar, ":", [DEC2Z] minuter, ":", [DEC2Z] sekunder);
sekunder
om (sekunder == 9)
sekunder: = sekunder + 6.
endif / / 25, 40, 55
om (sekunder == 25)
sekunder: = sekunder + 6.
endif
om (sekunder == 41)
sekunder: = sekunder + 6.
endif
om (sekunder == 57)
sekunder: = sekunder + 6.
endif
om (sekunder == 73)
sekunder: = sekunder + 6.
endif
minuter
om (minuter == 9)
minuter: = minuter + 7.
endif / / 25, 40, 55
om (minuter == 25)
minuter: = minuter + 7.
endif
om (minuter == 41)
minuter: = minuter + 7.
endif
om (minuter == 57)
minuter: = minuter + 7.
endif
om (minuter == 73)
minuter: = minuter + 7.
endif
timmar
om (timmar == 9)
timmar: = timmar + 7.
endif
om (! () sekunder: = (++ sekunder % 90)))
om (! () minuter: = (++ minuter % 90)))

om (timmar == 18)
timmar: = 0;
endif
timmar: = (++ timmar % 19);
endif
endif
endif
Clock.Time[seconds]: = sekunder. Läs klocka chip
Clock.Time[Minutes]: = minuter;
Clock.Time[hours]: = timmar;
Clock(); / / uppdatera tiden
hemkomst.
endif

om (kkl == 2 & & exit2 == 1)

DrawHand (r-20, seconds2 * 6, FACECOLOUR); undraw den andra handen

DrawHand (r-35, minutes2 * 6 + seconds2/10, FACECOLOUR); undraw minutvisaren

DrawHand (r-50, timmar2 * 30 + minutes2 >> 1, FACECOLOUR); undraw timvisaren

gfx_Circle (OLC, yc, 5, FACECOLOUR);

beräkna den nya tiden
Observera att detta var buggy,
om (! () seconds2: = (++ seconds2% 60)))
om (! () minutes2: = (++ minutes2% 60)))
timmar2: = (++ timmar2% 12);
endif
endif

display_Vsync();
DrawHand (r-20, seconds2 * 6, SECONDSCOLOUR); Rita om den andra handen
DrawHand (r-35, minutes2 * 6 + seconds2/10, MINUTESCOLOUR); Rita om minutvisaren
DrawHand (r-50, timmar2 * 30 + minutes2 >> 1, HOURSCOLOUR); Rita om timvisaren
gfx_Circle (OLC, yc, 5, ORANGE);
hemkomst.
Touch();
hemkomst.
endif
annat
hemkomst.
tag (!. Clock.Edit == 0 & &! edstate == 0)
PAUSE(100);

wend

endif
för evigt
endfunc

FUNC touch()
touch_Set(TOUCH_ENABLE); Aktivera pekskärmen
Clock();

Upprepa
var n, colr: = röd;
var staten.
staten: = touch_Get(TOUCH_STATUS); Vi ska se för någon touch verksamhet
MX: = touch_Get(TOUCH_GETX); Vi ska också ta tag i x
min: = touch_Get(TOUCH_GETY); och y-koordinaterna för beröring

IF(State == TOUCH_PRESSED) / / om det finns en press
n: = img_Touched(iHndl, ALL); se om någon profilen berördes
IF(State == TOUCH_RELEASED) / / om det finns en utgåva;
om (n! = -1)

IF(n==ADDBTN)

Main ();
KKL: = 0;
exit2: = 0;
endif
endif
endif
endif
hemkomst.
för evigt
endfunc

Se Steg
Relaterade Ämnen

TikiHead Mod för Vapor kung Digital

detta är en guide i skapandet av en TikiHead ändring för en standard Vapor kung Digital spridare.Den använder blender som är ett gratis 3d modellering program och dessutom används Autodesk 123D göra som tillåter en ShopBot CNC-maskin att skära ut bit...

Digital LED blomma

Digital LED blomman använder två vattenflaska landskamper för en disk med 8 pedaler gjord av lysdioder, pedalerna är glasflaskor med lysdioder insvept i trådnät och en knapp i mitten av blommans disk, som ändrar sekvenserna som LED. En Arduino Mini s...

Mugshots för mormors kylskåp och Digital Frame

för några år sedan min mamma började publicera en utskrift som visar alla hennes barnbarn på hennes kylskåp. Hon är ganska teknisk savvy (och en Apple-användare), men att hålla foton uppdaterade med de yngre växer som ogräs måste ha varit en syssla....

Digital går

Hej alla detta är min första instructables, och det är en digital går med en IC2 display, en Arduino UNO, ett laddningsbart batteri (en powerbank), en LM35 som temperaturgivare, och en tryckknapp som om du skjuter det visar temperatur snarare på cels...

Communicator titta

Teeny tiny kommunikationsenheter som du kan fästa mot bröstet, bandet till din arm, eller pop i örat har länge varit en sci-fi trop. Handled-slitna "tvåvägs radioapparater" mestadels antingen var leksaker eller resultatet av filmen magi, vi äntl...

En DVD spelaren hacka

detta är en beskrivning av öppen källkod/öppen hårdvara projekt av en fjärrkontrollerad Arduino (Freeduino) baserade Klocka/termometer utnyttja strömförsörjning och VFD panel från en trasig DVD-spelare i en skräddarsydd akryl hölje. Syftet med projek...

Cyberpunk klockan

ta en gammal loppmarknad-bundna klocka (eller i mitt fall, en väckarklocka jag missbrukade en alltför många gånger) och att det ser... snyggt. Det är också ett bra sätt att lära sig om digital elektronik och det ger människor intryck du förstå komple...

Lätta elbil: En passagerare @ 15mph, 210# Curb vikt

Jag designade och byggde denna roliga och framgångsrika ljus elbil för flera år sedan. Jag just nu lägga ut den på "Instructables" och kommer att lägga till fler steg, beskriver konstruktionen, i de närmaste veckorna.Använd länken till mitt webb...

Nya och förbättrade borstlös Electric Scooter Power System Guide

2008, jag satt ihop en guide på Instructables om uppgradering av kraftsystemet av dina små personliga elektriska fordon. Det var en primer på grunderna i en elbil kraftsystem och erbjuds resurser och tips för kompakt elektrisk skoter konvertering. Fr...

How to be an Elf

Jag tillbringade större delen av min barndom som springer runt i skogen låtsas vara olika magiska varelser medan min pappa läser mig fantasy-romaner. Mer än två decennier senare, har jag fortfarande vägrade att sluta spela klä upp. Jag har designat e...

En kartong televisor (med arduino och lysdioder)

Nyligen såg jag en dokumentär om historien om TV-apparaten. Och till min förvåning de visade att det fanns en mekanisk television för de välkända CRT TV-apparater.Dessa mekaniska TV-apparater eller televisors var ganska smart och enkel.En CRT är helt...

Säkring pärlor NES Controller

att göra en spelenhet med fuse pärlor som ser ut som en kylskåpsmagnet av fuse pärlor som ser ut som en Nintendo NES-kontrollant.Vintage videospel estetik gjorde en stor come-back för några år sedan. Fuse pärlor, med deras "pixel" utseende, desi...

3D-tryckt bild kopia bifogad fil

Kom ihåg filmen? Även om du inte, det finns en riktigt bra chans ett mörkt hörn av ditt hus är packad fast med gamla diabilder. I mitt fall inte bara har jag bilder som jag personligen sköt 30 + år sedan, men jag även ärvt större, äldre, bild samling...

En animering inuti en vatten droppe Physalia

2000 bilder komponera denna pjäs-det vill säga 2000 perfekt olika vattendroppar där vi kartlagt en animering. Droppar som beter sig och ser konstigt liknande i samband med mindre entropi, och blivit mer okontrollerad som de plaska.Det slutliga result...

Bygga en fusionsreaktor

Ja, du kan bygga din egen kärnfusionsreaktor i ditt hus! Men först, några varningar:-Det här projektet innehåller dödliga spänningsnivåer. Se till att du vet din högspänning säkerhet eller har en kvalificerad elektriska rådgivare.-Potentiellt farliga...

Väsentliga resetips

Tips1. kasta hotel bar tvål i väskan smutstvätt så det inte stinker upp resväskan för resten av din resa. Inte har någon bar tvål liggande? Använda en hårtork.2. Använd en natt fuktkräm på långa flygningar eftersom det är extra återfuktande och du ha...

Göra en ett skrivbord om elektronik Lab (i en liten plats, för nybörjare)

Levande utan garderober och utan ett arbetsrum är inte lätt, tycker verkligen inte att jag har ett litet rum. Vi har en helg hus, som jag besöker ofta eftersom jag har en hel elektronik lab där (med Arduino stationer och många fler), men här hemma i...

DIY R134a portabel luftkonditionering!

Här är min senaste företag i kyl. Jag har alltid velat ha en bärbar innebär att kyla en behållare för livsmedel eller luft villkor ett litet utrymme. Använda reservdelar liggande jag beslutat att skapa en liten paketerade luftkonditionering enhet.Jag...

LEGO Drone med GoPro kamera

Drone vi har du bygga är inte bara en annan korkad quadcopter. Här kommer att kunna helt självständiga återvända hem, autonoma landning, GPS biträdd flyg, flyga på otroliga höjder, höga hastigheter, stark nog att cary en GoPro med lätthet, men mest h...