Nastavitelny istic a prudovy monitor do auta
Moderátori: psichac, Moderátori
-
- Zaslúžilý člen
- Príspevky: 1373
- Dátum registrácie: 22 Jan 2012, 19:24
- Bydlisko: Nové Mesto nad Váhom
- Vek: 43
Nastavitelny istic a prudovy monitor do auta
Pani,
Kazdy autoelektrikar sa stretol so situaciou,ked stale nieco vypalovalo poistky a kym nasiel problem,tak mal plny sacok poodpalovanych poistiek.
Medzi tychto ludi patrim aj ja a tato prax ma uz prestala bavit.
Tak som vyrobil nastavitelny istic,ktory sa pripoji na miesto problematickej poistky.
Ako sa mi v hlave formovala ucelena predstava tohto zariadenia,dostal som rozne napady,ako tuto jednoduchu funkcionalitu rozsirit.
tak vzniklo zariadenie,ktore teraz popisem.
Zakladne informacie:
- riadenie prostrednictvom Arduino Nano
- LCD 5110
- napajanie vstavanym akumulatorom 18650
- nabijaci obvod pre akumulator TP4056
- stepup menic XL6009 pre napajanie autorele
- Hallov snimac prudu pre 30A
- obsluha rotacnym enkoderom
Funkcie:
- zakladny ampermeter
- graficke zobrazenie s menitelnou casovou zakladnou od 200-9999ms pre posun grafu o 1px,v krokoch 10ms
- moznost pridat buffer(nad limitny prud pre pripadne spicky),ktory vypne obvod po urcitom case,ked je prud nad limitom
- ak je prud nizsi ako v buffer zone,tak sa buffer resetuje po nastavenom case
- okamzite rozopnutie obvodu v pripade,ze prud prekroci nastaveny+buffer
- graficke zobrazenie dot/bar
- samozrejme,nastavitelna prudova hodnota
- konektor DB15 pre pripojenie adapterov na rozne tvary poistiek
- indikacia uzavreteho obvodu modrou LED
- indikacia stavu nabijania cervenou/zelenou LED
- indikacia napatia akumulatora
Kazdy autoelektrikar sa stretol so situaciou,ked stale nieco vypalovalo poistky a kym nasiel problem,tak mal plny sacok poodpalovanych poistiek.
Medzi tychto ludi patrim aj ja a tato prax ma uz prestala bavit.
Tak som vyrobil nastavitelny istic,ktory sa pripoji na miesto problematickej poistky.
Ako sa mi v hlave formovala ucelena predstava tohto zariadenia,dostal som rozne napady,ako tuto jednoduchu funkcionalitu rozsirit.
tak vzniklo zariadenie,ktore teraz popisem.
Zakladne informacie:
- riadenie prostrednictvom Arduino Nano
- LCD 5110
- napajanie vstavanym akumulatorom 18650
- nabijaci obvod pre akumulator TP4056
- stepup menic XL6009 pre napajanie autorele
- Hallov snimac prudu pre 30A
- obsluha rotacnym enkoderom
Funkcie:
- zakladny ampermeter
- graficke zobrazenie s menitelnou casovou zakladnou od 200-9999ms pre posun grafu o 1px,v krokoch 10ms
- moznost pridat buffer(nad limitny prud pre pripadne spicky),ktory vypne obvod po urcitom case,ked je prud nad limitom
- ak je prud nizsi ako v buffer zone,tak sa buffer resetuje po nastavenom case
- okamzite rozopnutie obvodu v pripade,ze prud prekroci nastaveny+buffer
- graficke zobrazenie dot/bar
- samozrejme,nastavitelna prudova hodnota
- konektor DB15 pre pripojenie adapterov na rozne tvary poistiek
- indikacia uzavreteho obvodu modrou LED
- indikacia stavu nabijania cervenou/zelenou LED
- indikacia napatia akumulatora
- Prílohy
0
Naposledy upravil/-a TomasNM v 22 Okt 2017, 22:26, upravené celkom 1 krát.
Re: Nastavitelny istic a prudovy monitor do auta
pekná práca , až na tú anglíčtinu . nemohlo to byť po slovenský ? všimol som si že najme mladší slováci radšej používaju anglíčtinu ako vlastnú materskú reč . myslíte si že niekto o takých 50 rokov bude ešte používať slovenčinu ? možno niekde na lazoch .... ale aj tá už bude poloslovenčina ....
0
-
- Zaslúžilý člen
- Príspevky: 1373
- Dátum registrácie: 22 Jan 2012, 19:24
- Bydlisko: Nové Mesto nad Váhom
- Vek: 43
Re: Nastavitelny istic a prudovy monitor do auta
Anglictina - jediny dovod:
Slovenske napisy mi tam nevojdu,inak by tam boli.
Slovenske napisy mi tam nevojdu,inak by tam boli.
0
Re: Nastavitelny istic a prudovy monitor do auta
Preco vidis takyto stav ako problem?enigma napísal:myslíte si že niekto o takých 50 rokov bude ešte používať slovenčinu ?
Edit:
Pracujem vo firme kde sa vyvija elektronika (na Slovensku). Nemame tu jedineho cudzinca. Zdrojaky/dokumentaciu/interfejsy atd. piseme zasadne v anglictine. Vitaj v realnom svete.
0
They say the world is turning
But we are stuck upside down...
But we are stuck upside down...
- Drakoush
- Ultimate člen
- Príspevky: 10964
- Dátum registrácie: 07 Feb 2012, 23:22
- Bydlisko: Nitra
- Vek: 28
- Kontaktovať používateľa:
Re: Nastavitelny istic a prudovy monitor do auta
Pretože keď sa pozrieš na pepikov, tak už skoro ani nehovoria česky. Ich mladá generácia má strašnú úchylku hovoriť každé tretie slovo po anglicky. Šit, tohle je rýl!
0
Odkupujem zaujímavé meracie prístroje. Ponuky mailom alebo SS.
Re: Nastavitelny istic a prudovy monitor do auta
to je celkom podarena vec, obcas by sa mi take nieco hodilo, bude to sukrmony projekt ci planujes to zverejnit aj s plnkou ?
K+ za originalitu.
K+ za originalitu.
0
-
- Ultimate člen
- Príspevky: 1639
- Dátum registrácie: 23 Jan 2008, 00:00
- Bydlisko: Trenčianska Turná
- Vek: 33
- Kontaktovať používateľa:
Re: Nastavitelny istic a prudovy monitor do auta
Nebojíš sa rozpájať jednosmerné skratové prúdy aute relatívne slabým 30A relé ? Nerozmýšlal si nad dostatočne dimenzovaným mosfetom/igbt na rýchle vypnutie pri veľkom skrate ?
Pracujem vo firme kde sa vyvija elektronika (na Slovensku). Nemame tu jedineho cudzinca. Zdrojaky/dokumentaciu/interfejsy atd. piseme zasadne v slovenčine. Baví ma hľadanie slovenských ekvivalentov všade kde sa to dá. Naši predkovia 1000 rokov vzdorovali maďarčine, tak im to teraz nepokazme.
Pracujem vo firme kde sa vyvija elektronika (na Slovensku). Nemame tu jedineho cudzinca. Zdrojaky/dokumentaciu/interfejsy atd. piseme zasadne v slovenčine. Baví ma hľadanie slovenských ekvivalentov všade kde sa to dá. Naši predkovia 1000 rokov vzdorovali maďarčine, tak im to teraz nepokazme.
0
http://mkbci.com
FEL UNIZA 2015, Ing.
ľudstvo je vírus ktorý napadol Zem
nerobme si ťažkú hlavu z debilov čo nám ani po členky nesiahajú, buďme radi že my dačo dokážeme a smejme sa im akí sú sprostí
FEL UNIZA 2015, Ing.
ľudstvo je vírus ktorý napadol Zem
nerobme si ťažkú hlavu z debilov čo nám ani po členky nesiahajú, buďme radi že my dačo dokážeme a smejme sa im akí sú sprostí
Re: Nastavitelny istic a prudovy monitor do auta
konektor iný, s väčšou prúdovou zatazitelnostou, , do serie dať poistku (pre prípad skratu v obvode o rad vysie ako je max meraný prúd), relé iné, ak je 30A relé, tak dat 70A-80A relé, podla 3D modelu DPS, to relé je automobilové, mohlo by byt aj na 70A-80A, to by tam vošlo
https://www.tme.eu/sk/details/am3-12b/e ... /am3-12bp/
mosfet je dobry napad pre extra rychle vypinanie, ale iba seriova kombinacia kontakt rele a mosfet, rele kvoli ochrane pred moznym prepolovanim vstupnych svoriek teda aj "prepolovanim" mosfetu
https://www.tme.eu/sk/details/am3-12b/e ... /am3-12bp/
mosfet je dobry napad pre extra rychle vypinanie, ale iba seriova kombinacia kontakt rele a mosfet, rele kvoli ochrane pred moznym prepolovanim vstupnych svoriek teda aj "prepolovanim" mosfetu
0
Návrh zapojení s jednočipovými mikropočítačmi, tvorba programového vybavenia pre mikropočítače
http://www.jk-elektronika.info/index.html
predaj !!
http://svetelektro.com/modules.php?name ... 54#p549154
http://www.jk-elektronika.info/index.html
predaj !!
http://svetelektro.com/modules.php?name ... 54#p549154
Re: Nastavitelny istic a prudovy monitor do auta
SUPER. Jaký typ HAlové sondy používáš na snímání proudu ??
0
-
- Zaslúžilý člen
- Príspevky: 1373
- Dátum registrácie: 22 Jan 2012, 19:24
- Bydlisko: Nové Mesto nad Váhom
- Vek: 43
Re: Nastavitelny istic a prudovy monitor do auta
Dal som tam 40A rele.martin knocik napísal:Nebojíš sa rozpájať jednosmerné skratové prúdy aute relatívne slabým 30A relé ? Nerozmýšlal si nad dostatočne dimenzovaným mosfetom/igbt na rýchle vypnutie pri veľkom skrate ?
Rychlost vypnutia nemusi byt az taky problem,beznym poistkam trva ovela dlhsie,kym zareaguju.
MOSFET by uz pri tychto prudoch mohol docela solidne hriat,takze som sa tym nezaoberal,navyse by musel byt zavisly na polarite,co sa mi nechcelo riesit.
Ono aj tu poistku na konci kablu som mal problem prepalit.
Original bola oznacena 20A a neprepalilo ju ani ked som cez nu tlacil 40A.
Zrejme cinska poistka.
-- Spojený príspevok 16 Nov 2017, 12:40 --
Ten konektor je 15pin,pricom vrchny rad je poprepajany na jednu stranu poistky,spodny rad je na druhu stranu.mac26 napísal:Mne sa skor nepaci ten konektor.
Nemal problem takto preniest 30A. Pouzity typ je z rozmerovych dovodov.
-- Spojený príspevok 16 Nov 2017, 12:45 --
Senzor prudu tam mam tento (ACS712):beny66ka napísal:SUPER. Jaký typ HAlové sondy používáš na snímání proudu ??
https://www.ebay.com/itm/5A-20A-30A-Ran ... 3d26f6f621
0
-
- Ultimate člen
- Príspevky: 6217
- Dátum registrácie: 20 Júl 2007, 00:00
- Vek: 41
Re: Nastavitelny istic a prudovy monitor do auta
Takze sa vraciame opat do obdobia pred 89, kde vsetko bolo pisane slovensky a teraz kopec mladych ani len netusi, co znamenali niektore slova a skratky.martin knocik napísal:Zdrojaky/dokumentaciu/interfejsy atd. piseme zasadne v slovenčine. Baví ma hľadanie slovenských ekvivalentov všade kde sa to dá.
Inac, ak tam obhajujes sw v slovencine, tak odporucam spravavovat lokalizovany windows server. Polovicu casu stravis premyslanim, co ti to vlastne chce povedat a potom pol dna googlis anglicke ekvivalenty, aby si sa dopratral riesenia.
Kod a specifikacie sa nepisu v anglictine len tak, lebo chceme. Kopec slov sa neda prelozit spravne a potom vznikaju komplikacie (napr. v sietovych veciach: router-> smerovac, switch->prepinac a kopec dalsich odbornych vyrazov). Dalsia vec je, ze casom sa moze firma rozrast a expandovat do zahranicia. Pochybujem, ze taky Madar, alebo nemec bude vediet co znamenaju tie slovenske vyrazy.
Posledna vec: kazdy moze mat iny navrh na preklad a mozu vznikat kolizie, ked pod jednym slovom si x-ludi predstavi xx- roznych veci.
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.
-
- Zaslúžilý člen
- Príspevky: 1373
- Dátum registrácie: 22 Jan 2012, 19:24
- Bydlisko: Nové Mesto nad Váhom
- Vek: 43
Re: Nastavitelny istic a prudovy monitor do auta
Nemam problem poskutnut informacie.troodon napísal:to je celkom podarena vec, obcas by sa mi take nieco hodilo, bude to sukrmony projekt ci planujes to zverejnit aj s plnkou ?
K+ za originalitu.
Niekam to zverejnovat neplanujem,ale ak by bol zaujem,tak mozem aj kod sem hodit.
Schema a zoznam suciastok su tu tiez.
3D model tiez nieje 1:1,pocas montaze som nieco poposuval. Tym mi islo skor si to rozhodit a zistit,ci to tam vobec vsetko vojde.
0
-
- Zaslúžilý člen
- Príspevky: 1373
- Dátum registrácie: 22 Jan 2012, 19:24
- Bydlisko: Nové Mesto nad Váhom
- Vek: 43
Re: Nastavitelny istic a prudovy monitor do auta
Na poziadanie pridavam aj kod...
Bohuzial,stale sa nedaju nahravat subory *.ino
Bohuzial,stale sa nedaju nahravat subory *.ino
Kód: Vybrať všetko
const PROGMEM byte screens[]={
0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x0F,0x08,0x0E,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0xF8,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0xA0,0xA0,0xA0,0xA0,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x01,0xFE,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0xFD,0x05,0x05,0x05,0x05,0x05,0x05,0xFD,0x80,0xFF,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x91,0x91,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0xFF,
0xFF,0x80,0xBE,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xBE,0x9C,0x80,0x80,0xFF,0x80,0x80,0x88,0x88,0xAA,0x9C,0x88,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xA0,0x80,0x80,0x80,0x80,0x80,0x80,0xBE,0x92,0xBE,0x80,0x80,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xA6,0x96,0x88,0xB4,0xB2,0x80,0xFF,
0xF8,0x0E,0xEA,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xCA,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0E,0x08,0x0F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x0F,0x08,0x08,0x0B,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0B,0x08,0x08,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0xF8,
0xFF,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,
0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xB8,0x88,0xB8,0x88,0xB0,0x80,0xA0,0xB8,0x88,0x80,0x80,0xFF,0x80,0x80,0x88,0x88,0xAA,0x9C,0x88,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xA0,0x80,0x80,0x80,0x80,0x80,0x80,0xBE,0x92,0xBE,0x80,0x80,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xA0,0x80,0x80,0x80,0x80,0x80,0x80,0xBE,0x92,0xBE,0x80,0xFF,
0xF8,0x0E,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0E,0x08,0x0E,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0xFF,
0xFF,0x00,0x00,0x00,0x2E,0x2A,0x3A,0x00,0x3E,0x2A,0x22,0x00,0x02,0x3E,0x02,0x00,0x00,0x00,0x3E,0x22,0x22,0x00,0x3E,0x20,0x3E,0x00,0x3E,0x12,0x2C,0x00,0x3E,0x12,0x2C,0x00,0x3E,0x2A,0x22,0x00,0x3E,0x04,0x08,0x3E,0x00,0x02,0x3E,0x02,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x22,0x3E,0x00,0x3E,0x22,0x3E,0x00,0x20,0x00,0x3E,0x22,0x3E,0x00,0x00,0x00,0x3E,0x12,0x3E,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x3E,0x2A,0x14,0x00,0x3E,0x20,0x3E,0x00,0x3E,0x0A,0x02,0x00,0x3E,0x0A,0x02,0x00,0x3E,0x2A,0x22,0x00,0x3E,0x12,0x2C,0x00,0x00,0x00,0x3E,0x10,0x0E,0x00,0x3E,0x12,0x3E,0x00,0x3E,0x20,0x20,0x00,0x3E,0x20,0x3E,0x00,0x3E,0x2A,0x22,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x22,0x3E,0x00,0x3E,0x22,0x3E,0x00,0x00,0x00,0x26,0x16,0x08,0x34,0x32,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x3E,0x2A,0x14,0x00,0x3E,0x20,0x3E,0x00,0x3E,0x0A,0x02,0x00,0x3E,0x0A,0x02,0x00,0x3E,0x2A,0x22,0x00,0x3E,0x12,0x2C,0x00,0x00,0x00,0x02,0x3E,0x02,0x00,0x3E,0x00,0x3E,0x04,0x08,0x04,0x3E,0x00,0x3E,0x2A,0x22,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x22,0x3E,0x00,0x3E,0x22,0x3E,0x00,0x20,0x00,0x3E,0x22,0x3E,0x00,0x00,0x00,0x24,0x2A,0x12,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x3E,0x2A,0x14,0x00,0x3E,0x20,0x3E,0x00,0x3E,0x0A,0x02,0x00,0x3E,0x0A,0x02,0x00,0x3E,0x2A,0x22,0x00,0x3E,0x12,0x2C,0x00,0x00,0x00,0x3E,0x12,0x2C,0x00,0x3E,0x2A,0x22,0x00,0x2E,0x2A,0x3A,0x00,0x3E,0x2A,0x22,0x00,0x02,0x3E,0x02,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBE,0xA2,0xBE,0x80,0xBE,0xA2,0xBE,0x80,0xA0,0x80,0xBE,0xA2,0xBE,0x80,0x80,0x80,0xA4,0xAA,0x92,0x80,0x80,0x80,0xFF,
0xFF,0x80,0x80,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xBF,0x9E,0x80,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x80,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xA0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xBE,0x92,0xBE,0x80,0xFF,
0xFF,0x01,0x01,0xC1,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x4F,0x48,0x4E,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4E,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x4E,0x4E,0xCE,0x8E,0x0E,0x0E,0xF8,
0xFF,0x00,0x00,0xFF,0x00,0x3E,0x22,0x22,0x00,0x3E,0x00,0x3E,0x12,0x2C,0x00,0x3E,0x22,0x22,0x00,0x3E,0x20,0x3E,0x00,0x3E,0x00,0x02,0x3E,0x02,0x00,0x00,0x00,0x3E,0x22,0x1C,0x00,0x3E,0x00,0x2E,0x2A,0x3A,0x00,0x3E,0x22,0x22,0x00,0x3E,0x22,0x3E,0x00,0x3E,0x04,0x08,0x3E,0x00,0x3E,0x04,0x08,0x3E,0x00,0x3E,0x2A,0x22,0x00,0x3E,0x22,0x22,0x00,0x02,0x3E,0x02,0x00,0x3E,0x2A,0x22,0x00,0x3E,0x22,0x1C,0x00,0xFF,0xFF,0x00,0x00,0xFF,
0xFF,0x00,0x00,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xF9,0xF9,0xF9,0x39,0xF9,0x39,0xF9,0x39,0xB9,0xB9,0xF9,0x39,0xB9,0xB9,0xF9,0xF9,0xF9,0x01,0x01,0x01,0xF9,0x09,0x09,0xC9,0x89,0x09,0xC9,0x09,0xC9,0x49,0xC9,0x09,0x09,0xF9,0x01,0x01,0xFF,0xFF,0x00,0x00,0xFF,
0xFF,0x00,0x00,0xFF,0x00,0x00,0x1F,0x15,0x11,0x00,0x1F,0x02,0x04,0x1F,0x00,0x1F,0x09,0x1F,0x00,0x1F,0x15,0x0A,0x00,0x1F,0x10,0x10,0x00,0x1F,0x15,0x11,0x00,0x00,0x01,0x15,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3A,0x3A,0x38,0x3F,0x38,0x3A,0x3B,0x3F,0x3A,0x3A,0x38,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x3F,0x20,0x20,0x27,0x20,0x21,0x27,0x20,0x27,0x24,0x27,0x20,0x20,0x3F,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,
0xFF,0x90,0x90,0x91,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x90,0x90,0xFF,
0xFF,0x80,0xBE,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xBE,0x9C,0x80,0x80,0xFF,0x80,0x80,0x88,0x88,0xAA,0x9C,0x88,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xA0,0x80,0x80,0x80,0x80,0x80,0x80,0xBE,0x92,0xBE,0x80,0x80,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xA6,0x96,0x88,0xB4,0xB2,0x80,0xFF,
};
const PROGMEM byte numbers[]={
0xF8,0xFC,0xFE,0xFF,0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0xFF,0xFE,0xFC,0xF8,
0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0x1F,0x3F,0x7F,0xFF,0xF8,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0xFF,0x7F,0x3F,0x1F,
0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0x78,0x7C,0x7E,0x7F,0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0xFF,0xFE,0xFC,0xF8,
0xC0,0xE0,0xF0,0xF8,0xF8,0x78,0x78,0x78,0x78,0x78,0x78,0x7C,0x7F,0x3F,0x1F,0x0F,
0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,
0x78,0x7C,0x7E,0x7F,0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0xFF,0xFE,0xFC,0xF8,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x7E,0xFF,0xFF,0xE7,0xC3,
0x1E,0x3E,0x7E,0xFE,0xF8,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0xFF,0x7F,0x3F,0x1F,
0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,
0x00,0xC0,0xF0,0xFC,0xFF,0x3F,0x0F,0x03,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,
0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0xFF,0xFE,0xFC,0xF8,
0x1E,0x3E,0x7E,0xFE,0xF8,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0xFF,0x7F,0x3F,0x1F,
0xF8,0xFC,0xFE,0xFF,0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0x3F,0x3E,0x3C,0x38,
0xFF,0xFF,0xFF,0xFF,0x3C,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x3E,0xFE,0xFC,0xF8,0xF0,
0x1F,0x3F,0x7F,0xFF,0xF8,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0xFF,0x7F,0x3F,0x1F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0xCF,0xFF,0xFF,0xFF,0x3F,0x0F,
0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xFF,0x3F,0x0F,0x03,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0xF8,0xFC,0xFE,0xFF,0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0xFF,0xFE,0xFC,0xF8,
0xC3,0xE7,0xFF,0xFF,0x7E,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x7E,0xFF,0xFF,0xE7,0xC3,
0x1F,0x3F,0x7F,0xFF,0xF8,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0xFF,0x7F,0x3F,0x1F,
0xF8,0xFC,0xFE,0xFF,0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0xFF,0xFE,0xFC,0xF8,
0x0F,0x1F,0x3F,0x7F,0x7C,0x78,0x78,0x78,0x78,0x78,0x78,0x3C,0xFF,0xFF,0xFF,0xFF,
0x1C,0x3C,0x7C,0xFC,0xF8,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0xFF,0x7F,0x3F,0x1F,
};
const PROGMEM byte smallNumbers[]={
0x3E,0x22,0x3E,0x00, 0x00,0x04,0x3E,0x00, 0x3A,0x2A,0x2E,0x00, 0x2A,0x2A,0x3E,0x00, 0x0E,0x08,0x3E,0x00,
0x2E,0x2A,0x3A,0x00, 0x3E,0x2A,0x3A,0x00, 0x02,0x02,0x3E,0x00, 0x3E,0x2A,0x3E,0x00, 0x2E,0x2A,0x3E,0x00,
0x41,0x5D,0x41,0x7F, 0x7F,0x7B,0x41,0x7F, 0x45,0x55,0x51,0x7F, 0x55,0x55,0x41,0x7F, 0x71,0x77,0x41,0x7F,
0x51,0x55,0x45,0x7F, 0x41,0x55,0x45,0x7F, 0x7D,0x7D,0x41,0x7F, 0x41,0x55,0x41,0x7F, 0x51,0x55,0x41,0x7F,
};
const PROGMEM byte lines[]={
0x7F,0x7F,0x51,0x55,0x45,0x7F,0x41,0x55,0x5D,0x7F,0x7D,0x41,0x7D,0x7F,0x7F,0x7F,0x41,0x5D,0x5D,0x7F,0x41,0x5F,0x41,0x7F,0x41,0x6D,0x53,0x7F,0x41,0x6D,0x53,0x7F,0x41,0x55,0x5D,0x7F,0x41,0x7B,0x77,0x41,0x7F,0x7D,0x41,0x7D,0x7F,0x6B,0x7F,0x7F,0x7F,0x7F,0x7F,
0x7F,0x7F,0x41,0x55,0x6B,0x7F,0x41,0x5F,0x41,0x7F,0x41,0x75,0x7D,0x7F,0x41,0x75,0x7D,0x7F,0x41,0x55,0x5D,0x7F,0x41,0x6D,0x53,0x7F,0x7F,0x7F,0x41,0x6F,0x71,0x7F,0x41,0x6D,0x41,0x7F,0x41,0x5F,0x5F,0x7F,0x41,0x5F,0x41,0x7F,0x41,0x55,0x5D,0x7F,0x6B,0x7F,0x7F,
0x7F,0x7F,0x41,0x55,0x6B,0x7F,0x41,0x5F,0x41,0x7F,0x41,0x75,0x7D,0x7F,0x41,0x75,0x7D,0x7F,0x41,0x55,0x5D,0x7F,0x41,0x6D,0x53,0x7F,0x7F,0x7F,0x7D,0x41,0x7D,0x7F,0x41,0x7F,0x41,0x7B,0x77,0x7B,0x41,0x7F,0x41,0x55,0x5D,0x7F,0x6B,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,
0x7F,0x7F,0x41,0x55,0x6B,0x7F,0x41,0x5F,0x41,0x7F,0x41,0x75,0x7D,0x7F,0x41,0x75,0x7D,0x7F,0x41,0x55,0x5D,0x7F,0x41,0x6D,0x53,0x7F,0x7F,0x7F,0x41,0x6D,0x53,0x7F,0x41,0x55,0x5D,0x7F,0x51,0x55,0x45,0x7F,0x41,0x55,0x5D,0x7F,0x7D,0x41,0x7D,0x7F,0x6B,0x7F,0x7F,
};
const PROGMEM byte no[]={
0xF9,0x09,0x09,0xC9,0x09,0xC9,0x09,0xC9,0x49,0x49,0x09,0xC9,0x49,0x49,0x09,0x09,0xF9,0x01,0x01,0x01,0xF9,0xF9,0xF9,0x39,0x79,0xF9,0x39,0xF9,0x39,0xB9,0x39,0xF9,0xF9,0xF9,
0x3F,0x20,0x20,0x25,0x25,0x27,0x20,0x27,0x25,0x24,0x20,0x25,0x25,0x27,0x20,0x20,0x3F,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x38,0x3F,0x3E,0x38,0x3F,0x38,0x3B,0x38,0x3F,0x3F,0x3F,
};
#include <PCD8544.h>
#include <avr/pgmspace.h>
#include <EEPROM.h>
#define LCD_COMMAND 0
#define LCD_DATA 1
#define PIN_RESET 7 //Pin 4 on LCD
#define PIN_SCE 6 //Pin 3 on LCD
#define PIN_DC 5 //Pin 5 on LCD
#define PIN_SDIN 4 //Pin 6 on LCD
#define PIN_SCLK 3 //Pin 7 on LCD
#define encoder1 2
#define encoder2 8
#define encoder3 9
#define hold 2000
#define AVinvalidate 100
#define Savetimebase 3000
#define battupdate 1000
// The dimensions of the LCD (in pixels)...
static const byte LCD_WIDTH = 84;
static const byte LCD_HEIGHT = 48;
static PCD8544 lcd;
int c;
int mode=2; //due to switch after start and e2 edge
int line=1;
volatile int encoder = 0;
boolean scr=true,inv=true,invg=true;//main edges
boolean bar=true;
boolean eoa1,eob1;
boolean e1=true,e2=true,e3=false,e4=true,e5=false,e6=true,e7=true,e8=true,e9=true,e10=true,e11=false;
// e1 - set time to switch to settings
// e2 - time less than settings to switch scr1 and scr2
// e3 - switch scr1 and scr2
// e4 - push encoder in settings
// e5 - prevent mod after scr3
// e6 - restart graph
// e7 - buffer start/continue
// e8 - start reset buffer time
// e9 - clear buffer display
// e10 - confirm yes/no
// e11 - save timebase
boolean mod,output=false;
unsigned long time,before1,before2,before3,before4,before5,before6,before7,before8,before9;
// before1 - long press to settings and back
// before2 - actual amperage invalidate
// before3 - graph add invalidate
// before4 - buffer time
// before5 - 1ms for buffer increase
// before6 - time to reset buffer
// before7 - time difference to add to buffer
// before8 - save timebase
// before9 - battery update
int values[5];
int graph[80];
int actual;
int avg[100],avgc=0;
int buf=0;
int prevmode=1;
int yesno=0;
int filter=100;
float act[100];
int cfilter=0;
void setup() {
lcd.begin(LCD_WIDTH, LCD_HEIGHT);
LCDWrite(LCD_COMMAND, 0x21); //Tell LCD that extended commands follow
LCDWrite(LCD_COMMAND, 0xAA); //Set LCD Vop (Contrast): Try 0xB1(good @ 3.3V) or 0xBF if your display is too dark
LCDWrite(LCD_COMMAND, 0x04); //Set Temp coefficent
LCDWrite(LCD_COMMAND, 0x15); //LCD bias mode 1:48: Try 0x13 or 0x14
LCDWrite(LCD_COMMAND, 0x20); //We must send 0x20 before modifying the display control mode
LCDWrite(LCD_COMMAND, 0x0C); //Set display control, 0x0C normal mode. 0x0D for inverse
pinMode(PIN_DC,OUTPUT);
pinMode(encoder1, INPUT_PULLUP);
pinMode(encoder2, INPUT_PULLUP);
pinMode(encoder3, INPUT_PULLUP);
attachInterrupt(0, doEncoderA, RISING);
//attachInterrupt(1, doEncoderB, RISING);
analogReference(DEFAULT);
values[0]=100;
values[1]=10;
values[2]=100;
values[3]=10;
values[4]=200;
values[5]=1;
LoadSettings();
encoder=values[4];
before9=20000;//draw battery after start
Serial.begin(115200);
}
void loop() {
before7=time;
time=millis();
boolean eb=!digitalRead(encoder3);
actual=abs(analogRead(A0)-515);
// actual=0;//only for debug
actual=map(actual,0,400,0,300);
act[cfilter]=actual;
actual=0;for(int i=0;i<filter;i++) { actual+=act[i];} actual=actual/filter;
cfilter++;if(cfilter>=filter) cfilter=0;
if(actual<0) actual=400;
if(!output ) actual=0;
if(!eb) { e1=true;e3=false;e6=true;}
if( eb) { e2=true;e10=true;}
if(mode==1)
{
if(scr) { screen(1);scr=false;
drawSmallNumber(45,5,values[0]/100,false);drawSmallNumber(49,5,values[0]%100/10,false);drawSmallNumber(55,5,values[0]%10,false);
drawSmallNumber(68,5,values[1]/10 ,false);drawSmallNumber(72,5,values[1]%10,false);
}
if(inv) {
inv=false;before2=time;
drawBigNumber(5 ,actual/100);
drawBigNumber(23,actual%100/10);
drawBigNumber(47,actual%10);
if(buf>0) drawBuffer();
Serial.println(actual);
}
if(time-before2>=AVinvalidate) inv=true;
}
if(mode==4)
{
if(scr) { screen(4);scr=false;encoder=1;
drawSmallNumber(45,5,values[0]/100,false);drawSmallNumber(49,5,values[0]%100/10,false);drawSmallNumber(55,5,values[0]%10,false);
drawSmallNumber(68,5,values[1]/10 ,false);drawSmallNumber(72,5,values[1]%10,false);
}
if(inv) {
inv=false;
if(encoder<0) encoder=0;if(encoder>3) encoder=3;
if(encoder<2)yesno=0;else yesno=1;
if(yesno==0) {
for(int i=0;i<34;i++) {
gotoXY(43+i,2);LCDWrite(LCD_DATA,pgm_read_byte_near(screens+1723+i));
gotoXY(43+i,3);LCDWrite(LCD_DATA,pgm_read_byte_near(screens+3*504+3*84+43+i));}
}
if(yesno==1) {
for(int i=0;i<34;i++) {
gotoXY(43+i,2);LCDWrite(LCD_DATA,pgm_read_byte_near(no+i));
gotoXY(43+i,3);LCDWrite(LCD_DATA,pgm_read_byte_near(no+34+i));}
}
}
if(!eb && e10 && (prevmode==2 || prevmode==1)) { if(yesno==0) { output=true;buf=0;}else{ output=false;} mode=1;scr=true;inv=true;e3=true;e10=false;}
if(!eb && e10 && prevmode==3) { prevmode=1;e10=false;}
}
if(mode==2)
{
if(encoder<20)encoder=20;if(encoder>999)encoder=999;values[4]=encoder;
if(scr) { screen(2);scr=false;
drawSmallNumber(41,5,values[0]/100,false);drawSmallNumber(45,5,values[0]%100/10,false);drawSmallNumber(51,5,values[0]%10,false);
}
if(inv) {
inv=false;before2=time;
avg[avgc]=actual;avgc++;
drawSmallNumber(2,5,values[4]/100,false);drawSmallNumber(6,5,values[4]%100/10,false);drawSmallNumber(10,5,values[4]%10,false);drawSmallNumber(14,5,0,false);
drawSmallNumber(64,5,actual/100,false);drawSmallNumber(68,5,actual%100/10,false);drawSmallNumber(74,5,actual%10,false);
if(buf>0) drawBuffer();
}
if(invg) {
invg=false;before3=time;
digitalWrite(12,true);
for(int i=0;i<79;i++) { graph[i]=graph[i+1];drawColumn(2+i,graph[i]);}
int g=0;for(int i=0;i<avgc;i++) { g+=avg[i];};g=int(g/avgc);avgc=0;
graph[79]=int(33*float(g)/float(values[0]));drawColumn(81,graph[79]);
digitalWrite(12,false);
}
if(time-before2>=AVinvalidate) { inv=true;}
if(time-before8>=Savetimebase && e11) { e11=false;SaveSettings();}
}
if(mode==3)
{
if(!eb && !e4) { e4=true;if(e5)mod=!mod;e5=true;inv=true;if(!mod) encoder=line*3;else encoder=values[line-1];}
if( eb && e4) { e4=false;}
if(scr) { screen(3);scr=false;encoder=3;mod=false;
drawSmallNumber(61,1,values[0]/100,mod);drawSmallNumber(65,1,values[0]%100/10,mod);drawSmallNumber(71,1,values[0]%10,mod);
drawSmallNumber(65,2,values[1]/10 ,mod);drawSmallNumber(69,2,values[1]%10,mod);
drawSmallNumber(61,3,values[2]/100,mod);drawSmallNumber(65,3,values[2]%100/10,mod);drawSmallNumber(71,3,values[2]%10,mod);
drawSmallNumber(61,4,values[3]/100,mod);drawSmallNumber(65,4,values[3]%100/10,mod);drawSmallNumber(71,4,values[3]%10,mod);
}
if(inv) {
inv=false;before2=time;
if(!mod) { if(encoder<3)encoder=3;if(encoder>12)encoder=12; line=encoder/3;}
if( mod && line==1) { if(encoder<1)encoder=1;if(encoder>300)encoder=300;values[0]=encoder;}
if( mod && line==2) { if(encoder<0)encoder=0;if(encoder>20 )encoder=20; values[1]=encoder;}
if( mod && line==3) { if(encoder<0)encoder=0;if(encoder>999)encoder=999;values[2]=encoder;}
if( mod && line==4) { if(encoder<0)encoder=0;if(encoder>999)encoder=999;values[3]=encoder;}
if(line==1) drawLine(1,!mod,mod);else drawLine(1,false,mod);
if(line==2) drawLine(2,!mod,mod);else drawLine(2,false,mod);
if(line==3) drawLine(3,!mod,mod);else drawLine(3,false,mod);
if(line==4) drawLine(4,!mod,mod);else drawLine(4,false,mod);
if(line==1) { drawSmallNumber(61,1,values[0]/100,mod);drawSmallNumber(65,1,values[0]%100/10,mod);drawSmallNumber(71,1,values[0]%10,mod);}
if(line==2) { drawSmallNumber(65,2,values[1]/10 ,mod);drawSmallNumber(69,2,values[1]%10,mod);}
if(line==3) { drawSmallNumber(61,3,values[2]/100,mod);drawSmallNumber(65,3,values[2]%100/10,mod);drawSmallNumber(71,3,values[2]%10,mod);}
if(line==4) { drawSmallNumber(61,4,values[3]/100,mod);drawSmallNumber(65,4,values[3]%100/10,mod);drawSmallNumber(71,4,values[3]%10,mod);}
drawSmallNumber(63,5,actual/100,false);drawSmallNumber(67,5,actual%100/10,false);drawSmallNumber(73,5,actual%10,false);
if(buf>0) drawBuffer();
}
if(time-before2>=AVinvalidate) inv=true;
}
if( eb && e1) { e1=false;before1=time;}
if(!eb && time-before1< hold && e2) {
e2=false;
if(mode==1 && !e3) { mode=2;scr=true;inv=true;e3=true;encoder=values[4];for(int i=0;i<80;i++) { graph[i]=0;}}
if(mode==2 && !e3) { if(output) { mode=1;}else{ prevmode=2;mode=4;} e10=false;scr=true;inv=true;e3=true;}
}
if( eb && time-before1>=hold && !e3) {
if(mode==1) { mode=3;scr=true;inv=true;e3=true;line=1;e5=false;encoder=1;}
if(mode==2 && e6) { inv=true;e6=false;bar=!bar;SaveSettings();}
if(mode==3 && !e3) { if(output) { mode=1;} else{ mode=4;prevmode=3;} scr=true;inv=true;e3=true;mod=false;SaveSettings();}
}
if(time-before3>=values[4]*10 && output) { invg=true;}
if(time-before9>=battupdate) { before9=time;drawBattery();}
if(actual>=values[0] && actual<int(float(values[0])+(float(values[0])*float(values[1])/100.0))) {
e8=true;e9=true;
if(e7) { e7=false;before4=time;}
if(time-before5>=1) { buf+=time-before7;before5=time;}
}
if(actual<values[0]) { e7=true;if(e8) { e8=false;before6=time;}if(time-before6>=values[3]*100) { if(e9) { buf=0;drawBuffer();e9=false;}}}
if(buf>=values[2]*100 || actual>=int(float(values[0])+(float(values[0])*float(values[1])/100.0))) {
if(mode==1) { mode=4;prevmode=1;scr=true;inv=true;}
output=false;e10=false;
if(e9) { buf=0;drawBuffer();e9=false;}}
digitalWrite(13,output);
}
void LoadSettings()
{
for(int i=0;i<5;i++) { values[i]=EEPROMreadlong(i);}
if(EEPROMreadlong(5)==1) bar=true;else bar=false;
}
void SaveSettings()
{
for(int i=0;i<5;i++) { EEPROMwritelong(i,values[i]);}
if(bar) EEPROMwritelong(5,1);else EEPROMwritelong(5,0);
// digitalWrite(11,true);delay(100);digitalWrite(11,false);
}
void EEPROMwritelong(int address, long value)
{
byte four = (value & 0xFF);
byte three = ((value >> 8) & 0xFF);
byte two = ((value >> 16) & 0xFF);
byte one = ((value >> 24) & 0xFF);
EEPROM.write(4*address, four);
EEPROM.write(4*address + 1, three);
EEPROM.write(4*address + 2, two);
EEPROM.write(4*address + 3, one);
}
long EEPROMreadlong(long address)
{
long four = EEPROM.read(4*address);
long three = EEPROM.read(4*address + 1);
long two = EEPROM.read(4*address + 2);
long one = EEPROM.read(4*address + 3);
return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
}
void LCDWrite(byte data_or_command, byte data) {
digitalWrite(PIN_DC, data_or_command); //Tell the LCD that we are writing either to data or a command
//Send the data
digitalWrite(PIN_SCE, LOW);
shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data);
digitalWrite(PIN_SCE, HIGH);
}
void gotoXY(int x, int y) {
LCDWrite(0, 0x80 | x); // Column.
LCDWrite(0, 0x40 | y); // Row. ?
}
void doEncoderA(){
boolean cont=true;
boolean d1=digitalRead(encoder1);
boolean d2=digitalRead(encoder2);
if (d1) { if (d2) { if(cont) { encoder-=1;inv=true;cont=false;}} else { if(cont) { encoder+=1;inv=true;cont=false;}}}
if(mode==2) { before8=time;e11=true;}
}
//void doEncoderB(){
// boolean cont=true;
// boolean d1=digitalRead(encoder1);
// boolean d2=digitalRead(encoder2);
// if (d2) { if (d1) { if(cont) { encoder+=1;inv=true;cont=false;}} else { if(cont) { encoder-=1;inv=true;cont=false;}}}
//}
void screen(int scr) {
gotoXY(0,0);scr-=1;
for(int i=0;i<504;i++) { LCDWrite(LCD_DATA,pgm_read_byte_near(screens+i+(504*scr)));}
}
void drawBigNumber(int pos, int num)
{
for(int j=0;j<3;j++) { gotoXY(pos,j+1);
for(int i=0;i<16;i++) {
LCDWrite(LCD_DATA,pgm_read_byte_near(numbers+i+(j*16)+(48*num)));
}}
}
void drawSmallNumber(int posX,int posY,byte number,boolean inversion)
{
byte a;
gotoXY(posX,posY);
if(inversion==false) { for (int i=0;i<4;i++) { a=pgm_read_byte_near(smallNumbers+number*4+i );if(posY>3) a=a+128;LCDWrite(LCD_DATA,a);}}
if(inversion==true ) { for (int i=0;i<4;i++) { a=pgm_read_byte_near(smallNumbers+number*4+i+40);if(posY>3) a=a+128;LCDWrite(LCD_DATA,a);}}
}
void drawLine(byte number,boolean inversion,boolean edit)
{
gotoXY(2,number);number-=1;
for(int i=0;i<51;i++) { if(inversion) LCDWrite(LCD_DATA,pgm_read_byte_near(lines+number*51+i));
else LCDWrite(LCD_DATA,pgm_read_byte_near(screens+1094+number*84+i));}
if(edit) {
if(line==1 || line==3) { gotoXY(59,line);LCDWrite(LCD_DATA,127);LCDWrite(LCD_DATA,127);gotoXY(69,line);LCDWrite(LCD_DATA,95);LCDWrite(LCD_DATA,127);gotoXY(75,line);LCDWrite(LCD_DATA,127);LCDWrite(LCD_DATA,127);}
if(line==4) { gotoXY(59,line);LCDWrite(LCD_DATA,127);LCDWrite(LCD_DATA,127);gotoXY(69,line);LCDWrite(LCD_DATA,223);LCDWrite(LCD_DATA,255);gotoXY(75,line);LCDWrite(LCD_DATA,255);LCDWrite(LCD_DATA,255);}
if(line==1) { LCDWrite(LCD_DATA,B01000001);LCDWrite(LCD_DATA,B01101101);LCDWrite(LCD_DATA,B01000001);LCDWrite(LCD_DATA,127);LCDWrite(LCD_DATA,127);}
if(line==2) { gotoXY(63,line);LCDWrite(LCD_DATA,127);LCDWrite(LCD_DATA,127);gotoXY(73,line);LCDWrite(LCD_DATA,127);LCDWrite(LCD_DATA,127);LCDWrite(LCD_DATA,B01011001);LCDWrite(LCD_DATA,B01101001);LCDWrite(LCD_DATA,B01110111);LCDWrite(LCD_DATA,B01001011);LCDWrite(LCD_DATA,B01001101);LCDWrite(LCD_DATA,127);LCDWrite(LCD_DATA,127);}
if(line==3) { LCDWrite(LCD_DATA,B01011011);LCDWrite(LCD_DATA,B01010101);LCDWrite(LCD_DATA,B01101101);LCDWrite(LCD_DATA,127);LCDWrite(LCD_DATA,127);}
if(line==4) { LCDWrite(LCD_DATA,B11011011);LCDWrite(LCD_DATA,B11010101);LCDWrite(LCD_DATA,B11101101);LCDWrite(LCD_DATA,255);LCDWrite(LCD_DATA,255);}
}
else {
if(line==1 || line==3) { gotoXY(59,line);LCDWrite(LCD_DATA,0);LCDWrite(LCD_DATA,0);gotoXY(69,line);LCDWrite(LCD_DATA,32);LCDWrite(LCD_DATA,0);gotoXY(75,line);LCDWrite(LCD_DATA,0);LCDWrite(LCD_DATA,0);}
if(line==4) { gotoXY(59,line);LCDWrite(LCD_DATA,0);LCDWrite(LCD_DATA,0);gotoXY(69,line);LCDWrite(LCD_DATA,160);LCDWrite(LCD_DATA,128);gotoXY(75,line);LCDWrite(LCD_DATA,128);LCDWrite(LCD_DATA,128);}
if(line==1) { LCDWrite(LCD_DATA,B00111110);LCDWrite(LCD_DATA,B00010010);LCDWrite(LCD_DATA,B00111110);LCDWrite(LCD_DATA,0);LCDWrite(LCD_DATA,0);}
if(line==2) { gotoXY(63,line);LCDWrite(LCD_DATA,0);LCDWrite(LCD_DATA,0);gotoXY(73,line);LCDWrite(LCD_DATA,0);LCDWrite(LCD_DATA,0);LCDWrite(LCD_DATA,B00100110);LCDWrite(LCD_DATA,B00010110);LCDWrite(LCD_DATA,B00001000);LCDWrite(LCD_DATA,B00110100);LCDWrite(LCD_DATA,B00110010);LCDWrite(LCD_DATA,0);LCDWrite(LCD_DATA,0);}
if(line==3) { LCDWrite(LCD_DATA,B00100100);LCDWrite(LCD_DATA,B00101010);LCDWrite(LCD_DATA,B00010010);LCDWrite(LCD_DATA,0);LCDWrite(LCD_DATA,0);}
if(line==4) { LCDWrite(LCD_DATA,B10100100);LCDWrite(LCD_DATA,B10101010);LCDWrite(LCD_DATA,B10010010);LCDWrite(LCD_DATA,128);LCDWrite(LCD_DATA,128);}
}
}
void drawColumn(int pos,int height)
{
byte bin[33];
if( bar) { for(int i=0;i<33;i++) { if(i< height )bin[i]=1;else bin[i]=0;}}
if(!bar) { for(int i=0;i<33;i++) { if(i==height-1)bin[i]=1;else bin[i]=0;}}
gotoXY(pos,4);LCDWrite(LCD_DATA,128+32*bin[0]+16*bin[1]+8*bin[2]+4*bin[3]+2*bin[4]+bin[5]);
gotoXY(pos,3);LCDWrite(LCD_DATA,128*bin[6 ]+64*bin[7 ]+32*bin[8 ]+16*bin[9 ]+8*bin[10]+4*bin[11]+2*bin[12]+bin[13]);
gotoXY(pos,2);LCDWrite(LCD_DATA,128*bin[14]+64*bin[15]+32*bin[16]+16*bin[17]+8*bin[18]+4*bin[19]+2*bin[20]+bin[21]);
if(pos< 10) { gotoXY(pos,1);LCDWrite(LCD_DATA,128*bin[22]+64*bin[23]+32*bin[24]+16*bin[25]+8*bin[26]+4*bin[27]+pgm_read_byte_near(screens+588+pos));}
if(pos==10) { gotoXY(pos,1);LCDWrite(LCD_DATA,128*bin[22]+64*bin[23]+32*bin[24]+16*bin[25]+8*bin[26]+4*bin[27]+2*bin[28]+pgm_read_byte_near(screens+588+pos));}
if(pos> 10) { gotoXY(pos,1);LCDWrite(LCD_DATA,128*bin[22]+64*bin[23]+32*bin[24]+16*bin[25]+8*bin[26]+4*bin[27]+2*bin[28]+bin[29]);}
if(pos> 10) { gotoXY(pos,0);LCDWrite(LCD_DATA,128*bin[30]+64*bin[31]+32*bin[32]+pgm_read_byte_near(screens+504+pos)); }
}
void drawBuffer()
{
int a,dc;
byte bin[3];
if(mode==1) a=82;
if(mode==2) a=23;
if(mode==3) a=33;
int b=int(a*float(buf)/float(values[2]*100));
if(mode==1) { gotoXY(1 ,4);if(buf>0) { for(int i=0;i<b+1;i++) { dc=0;if(i==41 || i==42) dc=1;LCDWrite(LCD_DATA,240+dc);}}else { for(int i=0;i<a;i++) { dc=0;if(i==41 || i==42) dc=1;LCDWrite(LCD_DATA,144+dc);}}}
if(mode==3) { gotoXY(25,5);if(buf>0) { for(int i=0;i<b+1;i++) { LCDWrite(LCD_DATA,191);}}else { for(int i=0;i<a;i++) { LCDWrite(LCD_DATA,161);}}}
if(mode==2) {
gotoXY(51,0);
if(buf>0) {
for(int i=0;i<b+1;i++) {
if( bar) { for(int j=0;j<3;j++) { if(j+30< graph[49+i] )bin[j]=1;else bin[j]=0;}}
if(!bar) { for(int j=0;j<3;j++) { if(j+30==graph[49+i]-1)bin[j]=1;else bin[j]=0;}}
LCDWrite(LCD_DATA,128*bin[0]+64*bin[1]+32*bin[2]+11);
}}else {
for(int i=0;i<a;i++) {
if( bar) { for(int j=0;j<3;j++) { if(j+30< graph[49+i] )bin[j]=1;else bin[j]=0;}}
if(!bar) { for(int j=0;j<3;j++) { if(j+30==graph[49+i]-1)bin[j]=1;else bin[j]=0;}}
LCDWrite(LCD_DATA,128*bin[0]+64*bin[1]+32*bin[2]+8);
}
}
}
}
void drawBattery()
{
int bat=map(analogRead(A1),750,850,0,100);if(bat<0)bat=0;if(bat>100)bat=100;
// Serial.println(analogRead(A1));
int a;
if(mode==1 || mode==4) a=28;
if(mode==2) a=6;
if(mode==3) a=15;
int b=int(a*float(bat)/float(100));
if(mode==1 || mode==4)
{
gotoXY(3 ,5);
for(int i=0;i<b;i++) { LCDWrite(LCD_DATA,190);}
for(int i=b;i<a;i++) { LCDWrite(LCD_DATA,162);}
}
if(mode==2)
{
gotoXY(3 ,0);
for(int i=0;i<b;i++) { LCDWrite(LCD_DATA,234);}
for(int i=b;i<a;i++) { LCDWrite(LCD_DATA,42 );}
}
if(mode==3)
{
gotoXY(5 ,5);
for(int i=0;i<b;i++) { LCDWrite(LCD_DATA,191);}
for(int i=b;i<a;i++) { LCDWrite(LCD_DATA,161);}
}
}
0
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 0 Odpovedí
- 1109 Zobrazení
-
Posledný príspevok od používateľa ilya
-
- 5 Odpovedí
- 1565 Zobrazení
-
Posledný príspevok od používateľa anielikk
-
- 2 Odpovedí
- 2511 Zobrazení
-
Posledný príspevok od používateľa ondistef
-
- 3 Odpovedí
- 670 Zobrazení
-
Posledný príspevok od používateľa niktos
-
- 24 Odpovedí
- 3488 Zobrazení
-
Posledný príspevok od používateľa ondistef