Universele klok geschikt voor slechtzienden (5 / 6 stap)

Stap 5: Uploaden van de code

Ga naar de Arduino kleine projectsite en download de versie arduino-kleine-0100-0010.zip. Volg inbegrepen readme.txt bestand voor stap voor stap instructies op hoe te laten werken met uw arduino omgeving. (Niet echt moeilijk.) Ook, zal u wilt PinChangeInterrupt-0001.zip te downloaden vanaf dezelfde website. Ook de Arduino tijd bibliotheekdownloaden. Installatie van bibliotheken is vrij eenvoudig, in het geval van verwarring verwijzen naar deze site.

Vervolgens zet je arduino in zogenaamde isp door het openen van de arduino ide, bestand-voorbeelden-Arduino als ISP selecteren in het dropdownmenu en raken uploadt knoop.

Zodra u hebt gedaan dat, plak de volgende code er, selecteert u tools-bestuur-attiny85 (interne oscillator, BZV uitgeschakeld), plaatst u de attiny-fiche in de aansluiting van de programmeur, breadboard of wat dan ook zoals vermeld hier en gaat u verder met het uploaden.

!!!! BELANGRIJK!!!
Als uploaden mislukt, probeer het uploaden van de arduino als isp schets van een oudere versie van de arduino ide, zoals 0022. Als zelfs dat niet lukt, wellicht hebt u uw verkeerde verbindingen

#define encoderPinA 2
#define encoderPinB 0
#define buttonpin 2
#define loudspeakerpin 1
#include "Time.h"//I niet maken deze bibliotheek
#include "PinChangeInterruptSimple.h"//And ook deze bibliotheek was niet door mij gemaakt
vluchtige int encoderPos = 0; //position van de encoder, vluchtige omdat het verandert op onderbreken
unsigned int lastReportedPos = 1;   veranderingsmanagement
statische Booleaanse roterende = false;      ontdendering beheer
int stepstochangeitem = 10; Hoeveel encoder stappen zijn nodig voor menu-item te wijzigen
Boole A_set = false;              Sommige debouncing verwante vars, wie weet, ik heb niet gedaan dit deel van code
Boole B_set = false;
int items = 4; //number van items in menu
int selecteditem = 0;
int R = 512; //307; //telling welke knop ingedrukt-512 is = pullup weerstand heeft dezelfde waarde als de knop een
int argument numbertype [] = {//roman cijfers; als u deze instelling, neem dan ook verandering de numtypesound matrixvariabele abd typecount wijzigen
50, 10,5,1};
int numbertypesound [] = {//pitches van verschillende cijfers
100, 300, 500, 700};
int typecount = 4; //number van cijfers alltogether
int delaytime = 150;
Boole inmenu = true; / / zijn we nu in menu?
unsigned long presslength = 0; //buttons-for hoe lang is een knop ingedrukt
time management vars hieronder
lange diff = 0; //difference tussen synchroniseert van tijd in millis
lange realdiff = 0; //same zoals hierboven, maar afgerond op halve uren
Const unsigned long hh 1800000; = //half uur in milliseconden
lange drift = 0; //by hoeveel de realdiff van diff verschilt
unsigned long lastmillis = 0;
unsigned long lastcheckedtime = 0;
int onemetervalue = 300; //how lang (in stappen van de encoder) bedraagt maximaal één meter
Boole driftenabled = false; //are we corrigeren van de tijd drijven?
VOID Setup {}
pinMode (encoderPinA, INPUT);
pinMode (encoderPinB, INPUT);
pinMode (buttonpin, INPUT);
pinMode (loudspeakerpin, OUTPUT);
encoder pin op interrupt 0 (pin 2)
attachPcInterrupt (2, doEncoderA, verandering);
encoder pin op interrupt 1 (pin 3)
attachPcInterrupt (0, doEncoderB, verandering);
Serial.begin (9600);
beepnumber (35); //I hou gewoon van het geluid van dat
/ * int tempR=analogRead(buttonpin);
Als (verbran > 5)
{
R = verbran;
playSound(1);
beepnumber(tempR);
encoderPos = 0;
SelectedItem = 0;
delay(500);
}*/
}

int WaardeInstellen (Booleaanse minuten) //set waarde; gebruikt voor klok en ei timer routines
{
[wrapvalues] = {0,2,1,4};
encoderPos = 0; //reset encoder positie
SelectedItem = 0; //reset menu-positie
int returnvalue = 0; de waarde moet worden geretourneerd aan het einde van de functie
int stepnumber = 0; //number van de huidige stap. elke numerieke instelling = 1 stap
int laststepnumber = 0;

while //infinite lus (1) te worden gebroken uit met behulp van de opdracht break
{
inmenu = true; //so dat het piept uit menu-item, die hier is gebruikt om te bepalen hoe vaak u wilt elk cijfer te zijn in uw gewenste nummer
wrapEncValues();
inmenu = false; //resets terug naar de juiste waarde
Als (stepnumber == 0 & & notulen == false) //setting uur? Dan 50-waarde instellen (stap overslaan 0)
{
stepnumber = 1;
laststepnumber = 1;
}
Als (laststepnumber == stepnumber)
{
Als (minuten == false & & stepnumber == 2 & & returnvalue > = 20) //skipping waarde 5 instelling als gebruiker ondergaat uur en heeft ze als > 20 (het opzetten van 25:00 zoals tijd zou niet zinvol)
stepnumber = 3;
Als (minuten == true & & stepnumber == 1 & & returnvalue > = 50) //skipping waarde 10 instelling als gebruiker ondergaat minuten en heeft ze als > 50 (59 is de max waarde voor minuten)
stepnumber = 2;
beepnumber(NumberType[stepnumber]);
laststepnumber =-1;
}
Als (minuten == false)
{
schakelaar (stepnumber)
{
geval 1: / / 10s
items = 2;
breken;
geval 2: / / 5s
Als (returnvalue > = 20) waarde van de //20-something
stepnumber = 3; //skip 5s
items = 1;
breken;
Case 3: / / 1s
Als (returnvalue > = 20) waarde van de //20-something
{
items = 3;
}
anders
items = 4;
breken;
}
}
anders
{
schakelaar (stepnumber)
{
geval van 0: / / 50s
items = 1;
breken;
geval 1: / / 10s
Als (returnvalue > = 50) //50-something waarde
{
stepnumber = 2; //skip 10s
breken;
}
items = 4;
breken;
geval 2: / / 5s
items = 1;
breken;
Case 3: / / 1s
items = 4;
breken;
}
}

Als (buttonpressed()==1)
{
returnValue += argument numbertype [stepnumber] * selecteditem;
stepnumber += 1;
SelectedItem = 0;
laststepnumber = stepnumber;
Als (stepnumber > 3)
{

inmenu = true;
stepstochangeitem = 10;
SelectedItem = 1; //back naar menu
items = 4; //not echt nodig aangezien 'items' allready deze waarde bij toeval hebben zal
retourneren returnvalue;
breken;
}
}
}
}
VOID wrapEncValues()
{
int beepnum =-1;
terwijl (encoderPos > stepstochangeitem)
{
encoderPos = encoderPos-stepstochangeitem;
SelectedItem += 1;
beepnum = selecteditem;

}
terwijl (encoderPos < 0)
{
encoderPos = stepstochangeitem + encoderPos;
SelectedItem-= 1;
beepnum = selecteditem;
}

Als (selecteditem > items)
{
SelectedItem = 0;
beepnum = selecteditem;
}
Als (selecteditem < 0)
{
SelectedItem = items;
beepnum = selecteditem;
}
Als (beepnum! =-1 & & inmenu == true)
beepnumber(beepnum);

}
VOID playSound (int soundtype) //routine voor pieptoon uit specifieke codes (voor nul, het invoeren van programma-, alarm- en "OK piep" die wordt ook gebruikt voor het scheiden van de uren en minuten wanneer tijd weergeven
{
schakelaar (soundtype)
{
geval van 0: / / enter
/ * for (int i = 0; ik < = 100; i ++)
{
Toon (loudspeakerpin, ik * 5);
delay(5);
}
noTone(loudspeakerpin);
*/
Toon (loudspeakerpin, 500,250);
delay(100);
Toon (loudspeakerpin, 800,250);
delay(500);
breken;
geval 1: / / melody
Toon (loudspeakerpin, 200,250);
delay(100);
Toon (loudspeakerpin, 500,500);
delay(50);
breken;
geval 2: / / nul
Toon (loudspeakerpin, 950,250);
delay(50);
Toon (loudspeakerpin, 250,250);
breken;
Case 3: / / dot
delay(100);
Toon (loudspeakerpin, 950,250);
delay(100);
noTone(loudspeakerpin);
Toon (loudspeakerpin, 950,250);
delay(400);
breken;
}
}

void loop
{//Do stuff hier
/ * pinMode(13,OUTPUT);
digitalWrite(13,HIGH);
delayMicroseconds(100000);
digitalWrite(13,LOW); * /

Als (driftenabled == true) //auto tijdcorrectie ingeschakeld
{
Boole setlastcheckedtime = false;
terwijl (nu ()-lastcheckedtime > 3600) //more dan uur verschil sinds de laatste keer dat sync
{
setlastcheckedtime = true; //sync gebeurd
lastcheckedtime += 3600;
adjustTime(drift/1000);
}
Als (setlastcheckedtime == true) //set de tijd van laatste synchronisatie alleen als de synchronisatie gebeurd
lastcheckedtime=Now()-(drift/1000);
}
verplaatste code
wrapEncValues();
Als (Serial.read()=='B')
Serial.println (encoderPos, DEC);

Als (inmenu == true & & buttonpressed()==1)
{
inmenu = false;
playSound(0);
schakelaar (selecteditem)
{

geval van 0: / / klok
Als (presslength < 2000) //press was niet langer dan 2 seconden
{
beepnumber(Hour());
delay(200);
playSound(3);
delay(200);
beepnumber(Minute());
inmenu = true;
breken;
}
anders //longer dan 2 seconden
{
Als (presslength > 5000) //longer dan 5 seconden
{
Als (lastmillis! = 0)
driftenabled = true;
playSound(3);
onderstaande code berekent drift van interne oscillator door het vergelijken van de verwachte vertraging
(die kan worden gemakkelijk geschat, aangezien de gebruiker heeft om de sync op: 30 of: 00) verkregen waarde.
Vervolgens berekent drift, benoemt het tot een uur en worden opgeslagen om te "drijven" variabele
diff = millis ()-lastmillis;
unsigned long compval = hh/2;
int i;
voor (ik = 1; ik < = 10000; i ++)
{
compval += hh;
Als (diff < = compval)
breken;
}
realdiff = i * hh;
drift = realdiff-diff;
Drift=(2*drift)/(realdiff/HH);
lastmillis=Millis();
int hrz=hour();
int minz;
Als (minute() > 15 & & minute() < 45) //assume de klok is niet af met meer dan 15 minuten
minz = 30;
anders
{
Als (minute() > 45)
HRZ += 1;
minz = 0;
}
setTime(hrz,minz,0,1,1,1);

}

anders
{

int hrz=setvalue(false);

int minz=setvalue(true);
setTime(hrz,minz,0,1,1,1);
driftenabled = false;
lastmillis = 0;
lastcheckedtime=Now();
}
inmenu = true;
breken;
}
breken;
geval 1: / / tape maatregel
encoderPos = 0;
while(1)
{
wrapEncValues();
Als (buttonpressed()==1)
{
Als (presslength < 2000)
{
int cms=round(map(abs(encoderPos),0,onemetervalue,0,100));
beepnumber(CMS);
inmenu = true;
stepstochangeitem = 10;
SelectedItem = 1; //back naar menu
items = 4;
encoderPos = 0;
breken;
}
anders / / veronderstellen gebruiker heeft precies één meter gemeten en wil het centimeterlint kalibreren
{
playSound(3);
onemetervalue=ABS(encoderPos);
encoderPos = 0;
inmenu = true;
breken;
}
}
}
breken;
geval 2: / / water detector
{
stepstochangeitem = 4;
items = 10;
SelectedItem = 5;
while(1) {}
wrapEncValues();
Als (abs(selecteditem-5) > 2) //the-sonde gebruikt dezelfde input pin als knoppen; Daarom, om af te sluiten de water detector, gebruiker is verplicht te verdraaien van het coderingsprogramma wiel
{
inmenu = true;
stepstochangeitem = 10;
encoderPos = 0;
SelectedItem = 2; //back naar menu
items = 4;
noTone(loudspeakerpin);
breken;
}
Tone(loudspeakerpin,map(analogRead(buttonpin),0,512,100,1000)); //0-256; 100-500
}
breken;
}
Case 3: / / stopwatch
{
int startingsecs;
Boole watchrunning = false;
terwijl (1)
{
if(buttonpressed()==1)
{
playSound(3);
Als (watchrunning == false)
{
watchrunning = true;
startingsecs = millis () / 1000;
}
anders
{
watchrunning = false;
beepnumber(Millis()/1000-startingsecs);
inmenu = true;
SelectedItem = 3; //back naar menu
breken;

}
}
}
breken;
}
geval 4: / / ei timer
int minutemins = 99;
terwijl (1)
{
int buttoncode = buttonpressed (); //so dat het niet hoeft te bemonsteren tweemaal
Als (buttoncode == 0)
breken;
Als (buttoncode == 1)
{
minutemins=SetValue(true);
minutemins = (minuut () + minutemins) %60;//to zorgen het correct zal werken, zelfs als uur verandert terwijl de ei-timer actief is (die is niet echt mogelijk nu als ik erover nadenk...)
playSound(3);
}
Als (minute()==minutemins)
{
playSound(1);
Als (buttoncode == 0)
breken;
}
}

breken;

}
}
}

Tot nader order is de onderstaande code niet de mijne
ongeldig doEncoderA() {}
ontdendering
Als (roterende) vertraging (1);  een beetje wachten totdat het stuiteren is gedaan

Testen van de overgang, deed dingen echt veranderen?
Als (digitalRead(encoderPinA)! = A_set) {/ / nogmaals debounce
A_set =! A_set;

teller + als A B leidt aanpassen
Als (A_set & &! B_set)
encoderPos += 1;

roterende = false;  niet meer debouncing tot loop weer raakt
}
}

Onderbreken op B staat, net als een bovenstaande wijzigen
ongeldig doEncoderB() {}
Als (roterende) vertraging (1);
Als (digitalRead(encoderPinB)! = B_set) {}
B_set =! B_set;
aanpassen teller - 1 als B A leidt
Als (B_set & &! A_set)
encoderPos-= 1;

roterende = false;
}
}
van nu af aan, is de code de mijne weer

int buttonpressed()
{
Als (analogRead(buttonpin) > 5) //is iets gaan op helemaal?
{
int-returnvalue =-1;
unsigned long beginms = millis (); //variable voor later vergelijking te vertellen voor hoe lang is de knop ingedrukt
while(1)
{
unsigned long lastmillis;

int value=analogRead(buttonpin);
Als (waarde > 5) //should 0 worden, maar sommige hysteresion kan nooit kwaad
{
lastmillis=Millis();
Als (abs(value-((2*R)/3)) < 10) //button 2
returnValue = 0;
anders
Als (abs(value-R) < 10) //button 1
{
returnValue = 1;
R = waarde;
}
anders
Als (abs(value-((2*R)/5)*3) < 10) //both knoppen, niet echt werkt
returnValue = 2;
}
anders
Als (millis ()-lastmillis > 20) //to doen de debouncing; Graaf knop zoals vrijgegeven zodra het is vrijgegeven voor meer dan 20 MS
{
presslength = millis ()-beginms;
retourneren returnvalue;
breken;
}
}
}
anders
retourneren -1;
}

int (int num) beepnumber //beeping uit het nummer. Werkt in principe pseudorecursively door het argument te delen door de cijfers van hoog naar laag
en dan voedt de modulo van divisie terug naar zichzelf en het hele proces herhaalt
{
Als (num == 0)
{
playSound (2), //special code voor nul
keren 0;
}
int initpos = encoderPos;
int numbertypevalue [] {} =
-1, -1, -1 ,-1                                             };
for (int i = 0; ik < typecount; i ++)
{
Als (num/argument numbertype [i] > = 1)
{
numbertypevalue[i]=Floor(num/NumberType[i]);
num = num % argument numbertype [i];
}

encoderPos = initpos; //basically gebruiker draaien van het coderingsprogramma als piepen de waarde negeren
Als (numbertypevalue [i] > -1)
{
voor (int i2 = 0; i2 < numbertypevalue[i];i2++)
{
voor (int i3 = 0; i3 < 4-i; i3 ++)
{
delay(delaytime/2);
Toon (loudspeakerpin, numbertypesound[i],delaytime);
delay(delaytime);
}
delay(delaytime*2);
}
}

}

}

Gerelateerde Artikelen

Zelf gemaakt universele mount geschikt voor: mobiele telefoon, smartphone, iPhone, iPod, iPad, GPS PDA, mp3-spelers en gelijkaardige,.

Zelf gemaakt universele mount geschikt voor: mobiele telefoon, smartphone, iPhone, iPod, iPad, GPS PDA, mp3-spelers en gelijkaardige,.

Florero PhoneHook (Florero.ph) is een universele mount toepassing elektronische apparaten die bedoeld zijn voor persoonlijk gebruik (bijv. Cell Phones, smartphones, iPhone, iPod, satelliet navigatie-, audio- en video-spelers, GPS antennes, laptops, e
Braille taal ingeschakeld mobiele telefoon voor slechtzienden

Braille taal ingeschakeld mobiele telefoon voor slechtzienden

De mobiele telefoons veranderd vandaag mensenlevens op vele manieren. Er is grote behoefte om uit te breiden van de verschillende functies die door mobiele telefoons voor blinde persoon. We geloven sterk dat deze voordelen in het algemeen bijdragen z
Nederlandse kaneel Candy - gezondere versie, geschikt voor mensen met diabetes

Nederlandse kaneel Candy - gezondere versie, geschikt voor mensen met diabetes

Nederlandse kaneel snoep is een traditionele candy, vaak verkocht op de kermis/beurzen in de vorm van een grote stok verpakt in perkamentpapier. Het is een van mijn favoriete snoep van vaders, maar hij kan niet eten ze meer omdat hij diabetes heeft.
Steampunk handschoen geschikt voor PDA/iPhone

Steampunk handschoen geschikt voor PDA/iPhone

ik maakte deze handschoen voor een recente steampunk LARP, en dacht dat ik het proces document zou. Tool-Wise het is relatief eenvoudig.U moet:Een lederen handschoen van lassenVerschillende kleine koperen gewrichten (zie foto verderop)een lengte van
CNC frezen, 3D-printing, data-acquisitie. ««Introductie, de C3 brengen persoonlijke innovatie in ieders huis met een professionele kwaliteit hybride machine geschikt voor 3D-printen en CNC frezen!

CNC frezen, 3D-printing, data-acquisitie. ««Introductie, de C3 brengen persoonlijke innovatie in ieders huis met een professionele kwaliteit hybride machine geschikt voor 3D-printen en CNC frezen!

http://www.youtube.com/watch?v=eLcYgvIIbBMJa dit is niet een 'instructable' persay. Hoewel ik heb een lid op dit citeren voor een paar jaar weet en ik weet dat deze Gemeenschap wil wat ik te bieden hebben.Aangepaste innovaties lanceert de C-3,De C-3
Slimme Arduino wandelstok voor slechtzienden

Slimme Arduino wandelstok voor slechtzienden

De slimme walking stick is een zeer interessant project en ideaal voor beginners. Het hoofddoel van deze stick is signalering slechtzienden over een obstakel op zijn manier. Er wordt gegenereerd wanneer de sensor elk object in een bereik van 60 cm de
Maak van uw HTML-Website geschikt voor mobiele apparaten

Maak van uw HTML-Website geschikt voor mobiele apparaten

eerst was ik niet tevreden toen ik een bureaublad geoptimaliseerde Website op een smartphone bezocht.De lettertypen zijn te klein, u hebt pan en zoom in/uit de hele tijd, de links zijn altijd moeilijk te richten. Dus ik moest doen wat onderzoek hoe m
Goedkope en eenvoudige klok Hack voor zware bielzen

Goedkope en eenvoudige klok Hack voor zware bielzen

dit is mijn eerste Instructable dus ik hoop dat iedereen geniet.In de ochtenden ik heb de neiging te hebben moeite om uit bed.  Ik heb geprobeerd instelling meerdere klokken, brengen de klokken Pension de kamer, en ik vind nog steeds een manier om he
Heroverwegen telefoon voor slechtzienden - met een slimme stok

Heroverwegen telefoon voor slechtzienden - met een slimme stok

Hier is het eerste prototype van de telefoon van de Arduino voor de slechtzienden met behulp van een Arduino Uno en het Seeed studio GPRS schild 1.0. Er zijn twee functies die deze telefoon heeft, die wordt gedreven door de modus-schakelaar, net onde
Een nieuwe manier om geroosterde kastanjes en haal ze uit hun schelpen hele - geschikt voor rond de Turkije en de marrons glacés

Een nieuwe manier om geroosterde kastanjes en haal ze uit hun schelpen hele - geschikt voor rond de Turkije en de marrons glacés

GOED VOEDSEL VOOR GRATIS!Het bekendste gebied in Frankrijk voor kastanjes is de Ardèche maar in feite hier in landelijk Normandie zoete kastanjebomen grens veel velden en bermen. In ons dorp in oktober is iedereen uit voor dit prachtige en veelzijdig
Autoreader voor slechtzienden

Autoreader voor slechtzienden

Ik ben in donker. Ik heb een kaars, maar ik heb geen lucifers voor verlichting it. In de laatste woorden die ik bedoel te zeggen dat dit instructable is slechts over een idee dat kan zeer nuttig zijn, maar het ding is hoe gaan wij met behulp van de a
Mantel klok geval voor Chronulator (Meter klok)

Mantel klok geval voor Chronulator (Meter klok)

Casu klok mantel is ontworpen en gebouwd naar het huis van mijn MSP430 gebaseerd Chronulator. Een Chronulator is een retro klok die elektrische paneel meter wordt weergegeven hoeveel uren en minuten.Zie:Ik was op zoek naar een stijl die passend zou z
Arduino Klok Project voor Ahmed

Arduino Klok Project voor Ahmed

Dit is niet een Instructable hoe het klok-project dat Ahmed Mohamed in de problemen kwam in September 2015 opnieuw te maken, noch wil ik dit als een discussie over wat er gebeurd is. Wat ik wil doen is lay-out van een eenvoudige klok project met behu
DIY Nerf pistool geschikt voor kleine kinderen

DIY Nerf pistool geschikt voor kleine kinderen

Dit project werd gemaakt omdat mijn 2-jarige zoon wilde spelen nerf geweren met zijn oudere broers en zus. Het probleem is, hij is niet sterk genoeg om deze blasters, prime, dus hij zeer gefrustreerd krijgt en ze naar me brengen houdt te laden elke 4