Cwik klok v1.0 - An Arduino Binary Clock (9 / 15 stap)

Stap 9: Prototyping het Display, tijdsinstelling en Seconds


Nu dat we de basis programma hebben voor het uitvoeren van een binaire klok, de knowhow om van potentiometers, te lezen en experts zijn in het gebruik van Ampèremeters, is het tijd om het allemaal samen! Het kan lijken op een rat's nest van kabels en componenten, maar je moet niet hebben problemen als u stapsgewijze volgen.

In de volgende video gebruik ik de reset-schakelaar op de Uno onze om programma te starten vanaf het begin (tijd 00:00). Kunt u de seconden tellen op de analoge meter die helaas een max waarde van 50, niet 60 heeft (maar we kunnen het openstellen en omwisselen de achtergrond indien gewenst). Ongeacht wat de meter leest, teken het"" 60 keer per minuut. Na een volledige minuut, we zien de tijd wijzigen om 00:01, en de analoge meter wordt opnieuw ingesteld. Ik later schakelen naar instelling tijdweergave (dit is wanneer de oranje LED op de middenboven ingeschakeld wordt), op welk punt kunt u de seconden opnieuw ingesteld op 0. Ik stel de tijd om 16:59, en het moment kom ik tijd instelling modus uit (de oranje LED op de middenboven wordt uitgeschakeld), de seconden op de analoge meter begint opnieuw tellen. Ik wacht nog een minuut, op welk punt de tijd gewijzigd tot 17:00 uur.

De definitieve Code
/*
Cwik klok v1.0 - Prototyping het Display
Auteur: Dennis Cwik
Datum: 23 juli 2012

Dit programma is de controller voor een binaire klok, met LEDs
gekoppeld aan digitale pinnen 0 t/m 10, 12 en 13. 2 potentiometers
aangesloten op A0 en A1 controle hoeveel uren en minuten respectievelijk
en alleen wanneer A2 hoge wordt getrokken. Toen A2 is hoog, trok een LED op
PIN A5 zal oplichten om te vertellen van de gebruiker zijn tijdig ingesteld modus.
Ten slotte, pin 11 met PWM wordt gebruikt om de Toon van de seconden op een analoge
ampèremeter.

Deze voorbeeldcode is in het publieke domein.
*/

Dit kan worden gewijzigd voor debug doeleinden te maken een minuut sneller door.
int ONE_SECOND = 1000; gemeten in milliseconden
int DELAY_BETWEEN_LOOP_CALLS = 200; gemeten in milliseconden

Ik kom niet met dit, het is uit de arduino-documentatie
unsigned long MAX_UNSIGNED_LONG = 4294967295; = (2 ^ 32) - 1

int HOUR_INPUT_PIN = A0;
int MIN_INPUT_PIN = a1 worden verkregen;
int CLOCK_MODE_SWITCH_PIN = A2;
int CLOCK_MODE_LED_PIN = A5;

1e kolom voor LEDs
int PIN_MIN1 = 0;
int PIN_MIN2 = 1;
int PIN_MIN4 = 2;
int PIN_MIN8 = 3;

2e kolom voor LEDs
int PIN_MIN10 = 4;
int PIN_MIN20 = 5;
int PIN_MIN40 = 6;

3e kolom voor LEDs
int PIN_HOUR1 = 7;
int PIN_HOUR2 = 8;
int PIN_HOUR4 = 9;
int PIN_HOUR8 = 10;

PWM op de analoge meter om seconden weer te geven.
int SEC_OUTPUT_PIN = 11;

4e kolom voor LEDs
int PIN_HOUR10 = 12;
int PIN_HOUR20 = 13;

de laatste keer de seconden in de tijd werden verhoogd
unsigned long m_lastTick;

gebruikt om ons te vertellen als we de tijd, of niet instelt
Boole m_inTimeSetMode = false;

de tijd
byte m_second;
byte m_minute;
byte m_hour;

/**
* Verplichte installatieroutine voor Arduino, wordt één keer uitgevoerd bij het begin.
*/
VOID Setup
{
met behulp van één van de analoge ingangen als output
pinMode (CLOCK_MODE_LED_PIN, uitvoer);

initialiseren van de pinnen gebruikt voor de uitvoer van tijd
pinMode (PIN_MIN1, uitvoer);
pinMode (PIN_MIN2, uitvoer);
pinMode (PIN_MIN4, uitvoer);
pinMode (PIN_MIN8, uitvoer);
pinMode (PIN_MIN10, uitvoer);
pinMode (PIN_MIN20, uitvoer);
pinMode (PIN_MIN40, uitvoer);

pinMode (PIN_HOUR1, uitvoer);
pinMode (PIN_HOUR2, uitvoer);
pinMode (PIN_HOUR4, uitvoer);
pinMode (PIN_HOUR8, uitvoer);
pinMode (PIN_HOUR10, uitvoer);
pinMode (PIN_HOUR20, uitvoer);

clock-variabelen initialiseren
m_lastTick = 0;
setTime (0, 0, 0);
}

/**
* Verplichte methode voor Arduino, het heet voortdurend na Setup.
*/
void loop
{
checkMode();

Als we de tijd instellen, of tijd stroom normaal laten zien
Als (m_inTimeSetMode)
{
getTimeFromPots();
}
anders
{
Tick();
}

nu dat het tijd is vernieuwd, de tijd weergeven
displaySeconds();
displayMinutes();
displayHours();

willekeurige vertragen zodat we niet weg 100% van de tijd, zijn verwerkt
een daad van energiebesparing
delay(DELAY_BETWEEN_LOOP_CALLS);
}

/**
* Een helper-methode om het m_hour, m_minute en m_second instellen.
*/
VOID setTime (byte newHour, byte newMinute, byte newSecond)
{
m_second = newSecond;
m_minute = newMinute;
m_hour = newHour;
}

/**
* Deze methode houdt spoor van de logische stroom van de tijd. Als u genoeg tijd heeft
* verstreken sinds de laatste keer dat het werd geroepen, m_second, m_minute en m_hour
* zal nodig worden bijgewerkt. Dit houdt rekening met die millis() rolt
* over ongeveer elke 50 dagen.
*/
VOID tick()
{
niet-ondertekende lang = millis();
unsigned long msElapsed;

Allereerst moeten we erachter te komen hoeveel tijd is verstreken sinds de laatste keer dat we
genaamd tick()
Als (nu < m_lastTick)
{
zucht, ofwel heb gelukt om terug in de tijd, of millis() gewikkeld rond reizen!
msElapsed = (MAX_UNSIGNED_LONG - m_lastTick) + nu;
}
anders
{
msElapsed = nu - m_lastTick;
}

voor elke seconde dat verstreken (hopelijk slechts 1, tenzij onze code echt laggy is),
toevoegen van 1 seconde de tijd en de minuten & uren indien nodig verhoogd
for (int i = 0; ik < msElapsed / ONE_SECOND; ++ ik)
{
m_lastTick = m_lastTick + ONE_SECOND;

++ m_second;
Als (m_second == 60)
{
m_second = 0;
++ m_minute;
Als (m_minute == 60)
{
m_minute = 0;
++ m_hour;
Als (m_hour == 24)
{
m_hour = 0;
}
}
}
}
}

/**
* Deze methode PWM gebruikt voor weergave van de m_second op een analoge meter aangesloten
* om te SEC_OUTPUT_PIN.
*/
VOID displaySeconds()
{
analogWrite (SEC_OUTPUT_PIN, kaart (m_second, 59, 0, 0, 255));
}

/**
* Deze methode leest de m_minute, wordt het geconverteerd naar een binair getal worden omgezet en
* het op de juiste LEDs (degenen die PIN_MIN *).
*/
VOID displayMinutes()
{
byte degenen = m_minute % 10;
digitalWrite (PIN_MIN1, degenen & B1);
digitalWrite (PIN_MIN2, degenen & B10);
digitalWrite (PIN_MIN4, degenen & B100);
digitalWrite (PIN_MIN8, degenen & B1000);

divisie is soort duur, maar we gaan ervan uit dat het compileren optimaliseert dit voor ons :)
byte tientallen = m_minute / 10;
digitalWrite (PIN_MIN10, trans-Europese netwerken & B1);
digitalWrite (PIN_MIN20, trans-Europese netwerken & B10);
digitalWrite (PIN_MIN40, trans-Europese netwerken & B100);
}

/**
* Deze methode leest de m_hour, wordt het geconverteerd naar een binair getal worden omgezet en
* het op de juiste LEDs (degenen die PIN_HOUR *).
*/
VOID displayHours()
{
byte degenen = m_hour % 10;
digitalWrite (PIN_HOUR1, degenen & B1);
digitalWrite (PIN_HOUR2, degenen & B10);
digitalWrite (PIN_HOUR4, degenen & B100);
digitalWrite (PIN_HOUR8, degenen & B1000);

byte tientallen = m_hour / 10;
digitalWrite (PIN_HOUR10, trans-Europese netwerken & B1);
digitalWrite (PIN_HOUR20, trans-Europese netwerken & B10);
}

/**
* Deze methode leest de waarden van de 2 potentiometers, zet hen aan
* mimnutes en uren, en reeksen m_minute en m_hour naar de bijbehorende waarden.
*/
VOID getTimeFromPots()
{
Lees de potentiometers
int hourSensor = analogRead(HOUR_INPUT_PIN);
int minuteSensor = analogRead(MIN_INPUT_PIN);

de lezingen van de sensor (van 0 tot 1023) naar de juiste schaal
schalen (0 tot en met 23 uur, 0 tot en met 59 minuten)
setTime (kaart (hourSensor, 0, 1023, 0, 23), kaart (minuteSensor, 0, 1023, 0, 59), 0);

We stellen de laatste teek op nu, omdat wanneer wij m_inTimeSetMode ingesteld op false,
kunnen veel seconden zijn verstreken sinds de laatste keer, en de tijd vooruit zou springen
m_lastTick = millis();
}

/**
* Deze methode controleert u CLOCK_MODE_SWITCH_PIN om te zien of het hoge. Als het is,
* het betekent dat we nu in de modus voor het instellen van klok (m_inTimeSetMode is ingesteld op true), en
* Hiermee schakelt u de CLOCK_MODE_LED_PIN.
*/
VOID checkMode()
{
m_inTimeSetMode = (analogRead(CLOCK_MODE_SWITCH_PIN) > 512);
digitalWrite (CLOCK_MODE_LED_PIN, m_inTimeSetMode);
}

Gerelateerde Artikelen

LilyPad Arduino Binary Clock

LilyPad Arduino Binary Clock

LilyPad Arduino Binary Clock instructies!Lijst van materialen:LilyPad Arduino 328 hoofdboard - $21,95https://www.Sparkfun.com/products/9266LilyPad FTDI fundamentele Breakout - $14.95https://www.Sparkfun.com/products/10275Mini USB cord - $3.95Misschie
Arduino Binary Clock (uren, minuten en seconden)

Arduino Binary Clock (uren, minuten en seconden)

Hallo iedereen; Ik was op zoek naar dit project voor een lange tijd.  Tot slot ik het samen met een heleboel inspanning.  Voor dit project zal u het volgende nodig:1 - Arduino Uno ($30 van Radio Shack)2 - RTC DS1307 (zoals $2 van EBay)3 - 2 shift Reg
Arduino Binary Clock

Arduino Binary Clock

er een "arduino brein" om ons te tonen hoe laat is het op een binaire manier. De eerste rij van leds zijn de uren en in het tweede voorbeeld toont u de notulen. U moet optellen om op tijd te zijn. Het kan werken met een 9v batterij of een AC/DC-
Arduino Powered Binary Clock

Arduino Powered Binary Clock

dit instructable zal u helpen bij het bouwen van een Arduino Binary Clock.  De orignial idee voor dit instructable werd ontworpen door Daniel Andrade.  Mijn instructable surface mount componenten gebruikt, maar kan gemakkelijk aangepast worden door h
De NerdClock: Een RGB-Binary Clock [Arduino Software]

De NerdClock: Een RGB-Binary Clock [Arduino Software]

IntroductieBinaire klokken zijn een werkelijk koele manier om aan te tonen van de tijd op een mysterieuze manier. En voor degenen die niet weten hoe om te lezen dat soort klok is een eenvoudige, maar effectieve manier omhoog uw nerdiness niveau hemel
Arduino Binary 7 Segment Display klok & kalender

Arduino Binary 7 Segment Display klok & kalender

In tegenstelling tot de meeste andere binaire klokken toont deze klok de binaire tijd en datum op 3 rijen van 8 zeven segment weergeeft als onderdeel en nullen in plaats van alleen rijen van LEDs.Volledige details hierover mijn website hier.Een Ardui
Verbinding 4 Binary Clock

Verbinding 4 Binary Clock

Welkom dames en heren!Als ondernemer ben ik altijd op zoek naar grote projecten te delen.  Mezelf en twee andere klasgenoten onlangs samen een project voor onze meester van Engineering programma in technische ondernemerschap, en we zijn blij om onze
RGB-Binary Clock

RGB-Binary Clock

Dit is mijn eerste Instructable. Ik was op dit moment bezig met een ander project, een POV klok (ook bekend als een propellor klok), maar ik kreeg stumped met het printje en de inductie power kloof maar dat is een ander verhaal die ik hopelijk spoedi
4 Leds Binary Clock

4 Leds Binary Clock

4 LEDs Binary Clock, het het tijdstip in de binaire modus worden weergegeven, met de LED's knipperen eerste show de uren en minuten, om te begrijpen hoe het werkt u vervolgens weten moeten om te lezen van binaire hier is link naar leren:http://www.wi
12 hr Binary Clock, uren en minuten alleen, DS1307 de RTC, i2C, Arduino-Nano

12 hr Binary Clock, uren en minuten alleen, DS1307 de RTC, i2C, Arduino-Nano

Voor een tijdje nu heb ik wilde een binaire klok, maar na het rondkijken heb ik besloten dat ik wilde iets een beetje anders. Dus heb ik besloten alleen weergegeven hoeveel uren en minuten en slechts het weergeven van een klok 12 uur, betekent dit da
DIY Arduino Word-Clock Project

DIY Arduino Word-Clock Project

Dit instructable is bij de bouw van mijn Arduino Word-klok. Dit instructable brengt samen een paar van mijn vorige sub-projecten die zijn gepubliceerd op instructables zoals ik zijn gevorderd tot de voltooiing van de Word-klok.Dus, wat is een Word-kl
Volledige Binary Clock

Volledige Binary Clock

dwaalde ik het internet op zoek naar een goede arduino tutorial over het bouwen van een binaire klok met seconden, maar ik kon niet een vinden. Dus nu schrijf ik dit voor u te hebben een binaire klok met seconden, minuten en uren.Wat ik deed:-Want 20
Ping Pong Ball Full colour Binary Clock

Ping Pong Ball Full colour Binary Clock

Kleur veranderende binaire klok 24 uur met behulp van ping pong ballen en full-colour LED's en een Funduino 8 * 8 matrix bord.Ik heb al een kleine 12Hr binaire klok gebouwd en het voorzien in een computer, dit werkte heel goed, maar was slechts echt
Verstandig klok 3 - geeky alarmklok Arduino gebaseerde

Verstandig klok 3 - geeky alarmklok Arduino gebaseerde

Wise klok 3 is een open-source, zeer hackable geeky klok die veel meer dan de tijd toont. Haar belangrijkste functie is het weergeven van gebruiker-bewerkbare offertes ontvangen van een SD-kaart (zoals die worden gebruikt in foto camera's).Wise klok