Arduino -ketju (kysymykset/keskustelu)

Ja neljällä merkillä nopeus siltävaralta että äänivalli murtuu? :D
 
Projekti etenee, näyttö saapui eilen Taiwanista. Väsäsin pikaisesti GPS kellon ja kaikki toimii moitteetta.
Kunhan kotelo ja jumpperipiuhat saapuvat niin voi kasata laitteen lopullisesti. Virransyötön taidan laittaa suoraan johdolla ulos kotelosta ja siihen kiinni virtalähde.
 
Löytyisköhän vinkkejä seuraavaan probleemaan arduino tietäjiltä vai onnistuukohan jollain valmiilla ratkaisulla helpommin:

Auton kierroslukumittari haluaa jännitettä 0-12V jonka perusteella tietää kierrokset, mutta moottorin ja vaihdelaatikon vaihdon myötä uudempiin saatava signaali tulee välillä 0-5V, puhe tasavirrasta. Olisiko jotain keinoa skaalata tuo 0-5 volttia arduinolla tuolle 0-12v välille vai olisikohan joku helpompikin ratkaisu olemassa. Harrastajakaveri vaan kyseli niin ajattelin, että tältä foorumilta voisi löytyä vinkkiä. Autossahan on se n.12v jännite saatavilla, eli onnistuisiko jonkunlainen PWM toteutus jännitteen kontrolloimiseksi esimerkiksi. 0-5V signaali on analoginen eli vain jännitettä.
 
Löytyisköhän vinkkejä seuraavaan probleemaan arduino tietäjiltä vai onnistuukohan jollain valmiilla ratkaisulla helpommin:

Auton kierroslukumittari haluaa jännitettä 0-12V jonka perusteella tietää kierrokset, mutta moottorin ja vaihdelaatikon vaihdon myötä uudempiin saatava signaali tulee välillä 0-5V, puhe tasavirrasta. Olisiko jotain keinoa skaalata tuo 0-5 volttia arduinolla tuolle 0-12v välille vai olisikohan joku helpompikin ratkaisu olemassa. Harrastajakaveri vaan kyseli niin ajattelin, että tältä foorumilta voisi löytyä vinkkiä. Autossahan on se n.12v jännite saatavilla, eli onnistuisiko jonkunlainen PWM toteutus jännitteen kontrolloimiseksi esimerkiksi. 0-5V signaali on analoginen eli vain jännitettä.

Jos haluaa tarkan niin arduinon perään DAC ja sen perään jännitteenmuunnin esimerkiksi sopivalla operaatiovahvistimella jos DAC ei suoraan pysty 12V lähtöön.
Saattaa olla että pwm- toteutuksella saa myös melkein 0-5V jonkä jälkeen pitää kuitenkin suodattaa ja vahvistaa.
 
Jos haluaa tarkan niin arduinon perään DAC ja sen perään jännitteenmuunnin esimerkiksi sopivalla operaatiovahvistimella jos DAC ei suoraan pysty 12V lähtöön.
Saattaa olla että pwm- toteutuksella saa myös melkein 0-5V jonkä jälkeen pitää kuitenkin suodattaa ja vahvistaa.
Tarkoitus on siis 0-5v referenssillä tuottaa 0-12v
 
Tarkoitus on siis 0-5v referenssillä tuottaa 0-12v

Pahus, liian pikaisesti luettu ja vastattu.
Arduino kannattaa unohtaa ja tehdä vain se vahvistin.

Onnistuu operaatiovahvistimella/parilla mutta jos pitää antaa ulos tasan 0v niin pitää olla hyvä rail-to-rail malli tai tehdä pieni negatiivinen käyttöjännite. Periaatteessa sama yläpäässä, syöttö pitäisi olla vähän isompi kuin lähtö.

Nyt olen vain puhelimen päässä niin tähän hätään ei saa parempaa vastausta
 
Onko joku mahdollisesti käyttänyt arduinolla magneettiteippiä lukevaa sensoria?

Esim. Tuollaista.
Magnetic sensor LS100

Tarkoitus olisi jos saisi itse tehtyä tuollaiseen koodin. 0.1mm tarvitsisi tarkkuuden.

Saakohan rotary encoderin koodia sovellettua?
 
Viimeksi muokattu:
Onko joku mahdollisesti käyttänyt arduinolla magneettiteippiä lukevaa sensoria?

Esim. Tuollaista.
Magnetic sensor LS100

Tarkoitus olisi jos saisi itse tehtyä tuollaiseen koodin. 0.1mm tarvitsisi tarkkuuden.

Saakohan rotary encoderin koodia sovellettua?

Luulisi onnistuvan ainakin pienellä laitolla. Tuosta kun tulee siniä ulos, rotary enkooderista pulssia, eli kaipaat hystereesiä. Toteuttaa voit softalla tai sitten hw:lla (opari / schmitt trigger).

Edit: enpäs ajatellut ihan loppuun. Jos tarvitaan amplitudia tuntea, niin sitten asia erikseen. Kävi alkuun mielessä, että taajuutta / pulssien määrää lasketaan vain.
 
Viimeksi muokattu:
Liitin eilen yhden LIKA:n magneettianturin kiinni arduinoon.

Anturiin menee 6 johtoa:
-
+
Sin-
Sin+
Cos-
Cos+

Nuo kun laittaa kiinni ja lukee analogreadillä, niin saadaan 339-341 arvoiksi. Volteiksi muutettuna 1.65-1.67. tuosta kun vetää magneettia ohitte, niin nuo arvot nousee ja laskee. Eli ei muuta kuin yrittämään koodia kirjoittaa.

Seuraavaksi täytyisi koittaa tuota magneettinauhaa pitkin ja hieman logata noita arvoja mitä tulee.
 
Eli nyt taas hieman täysin noviisina opiskellut arduino projektia joka tulisi liittää moottoripyörään. Kysymys, kuinka toteuttaa virran saanti arduinolle, onko ok ottaa suoraan moottoripyörän akusta 12v joka pyörän käytössähän voi nousta sinne 13-14v asti? Servomoottorini käsittääkseni on sellainen jolle tuo sopii, nyt se toimii 9v paristolla arduino sai virran usb portista.
Laitan vielä kuvan kytkennöistä jolla sain systeemin pelittämään.
http://imgur.com/ms3H8Ja
 
Servot kestää yleensä max 5-7.4v jos tuollaisista harraste servoista puhutaan mikä kuvassakin on ei voi siis liittää suoraan 12v eikö suoraan 9volttiinkaan. Servo vaatii luultavasti oman regunsa tai dc-dc muuntimensa että saa riittävästi virtaa riippuen toki servon mallista.

Arduinolle laittaisin jonkun kunnollisen regun esim 7805 ja siihen vielä jonkinlaista suodatusta mahd. konkkien muodossa.
 
Servot kestää yleensä max 5-7.4v jos tuollaisista harraste servoista puhutaan mikä kuvassakin on ei voi siis liittää suoraan 12v eikö suoraan 9volttiinkaan. Servo vaatii luultavasti oman regunsa tai dc-dc muuntimensa että saa riittävästi virtaa riippuen toki servon mallista.

Arduinolle laittaisin jonkun kunnollisen regun esim 7805 ja siihen vielä jonkinlaista suodatusta mahd. konkkien muodossa.
Joo tosiaan ei ole sekään 12v kun selvitin, kysessä RDS3115 moottori.
 
Joo tosiaan ei ole sekään 12v kun selvitin, kysessä RDS3115 moottori.

Servon speksin mukaan max 1.3A @5V ja 1.5A @7.2V.
Kysymys kuuluukin kuinka rajoilla aiot käyttää väännön puolesta?
Jos tarkoitus on liikuttaa vain viisaria mittarissa niin melkein mikä tahansa regu riittää. Ja jos tarvitaan voimaa niin laita dc-dc hakkuri vähintään 2A lähdöllä.

Sitten pitää vielä selvittää hyväksyykö servo signaalin eri jännitteellä, normaali arduino antaa vain 5V eli voi olla varmempi syöttää servoakin sillä.

Todennäköisesti servo ja arduino voi olla suoraan saman dc-dc muuntimen syöttämänä ilman pahoja häiriöitä. Muuntimesta riippuen joudut todennäköisesti lisäämään molemmille puolille kunnon kondensaattorit ja ehkä etupuolelle enemmänkin suodatusta.
Autot ja pyörät antavat yleensä aika sotkuista sähköä...
 
Löytyykö Arduino IDE:ssä muitakin toimivia kuin nämä siellä olevilla kirjastoilla?--> attiny, atmega, esp32, esp8266, stm32, msp430

Virallisessa näköisessä listassa ei näy noita esp vermeitä--> List of Arduino boards and compatible systems - Wikipedia

Mietin vain noita pieninpiä ja halvimpia..muistaakseni ATtiny13A oli juuri tälläinen.

Ainakin esp8266 pitäisi löytyä, muistaakseni piti lisätä ideen url ja sitten löytyy.

Tinyt on sen verran pieniä että kannattaa unohtaa arduino- frame ja tehdä suoraan C:llä, muuten ei riitä muisti paljon vilkkua pidemmälle

Visual studio ja visual micro on hyvä yhdistelmä jos haluaa paremman iden ja arduino framen.
Atmel studio ilman framea itse tehden
 
Ainakin esp8266 pitäisi löytyä, muistaakseni piti lisätä ideen url ja sitten löytyy.

Tinyt on sen verran pieniä että kannattaa unohtaa arduino- frame ja tehdä suoraan C:llä, muuten ei riitä muisti paljon vilkkua pidemmälle

Visual studio ja visual micro on hyvä yhdistelmä jos haluaa paremman iden ja arduino framen.
Atmel studio ilman framea itse tehden

Jaa no ei sitten ole tullut mitään uutta. Katselin vain, että olisi jotain kiinalaisia prossuja, mutta ne ei sitten kait --> Embedded Processors & Controllers Online Ordering | LCSC
Arduino Ide vaan tavallaan helposti lähestyttävämpi ja netti täynnä ohjeitakin.
 
Jaa no ei sitten ole tullut mitään uutta. Katselin vain, että olisi jotain kiinalaisia prossuja, mutta ne ei sitten kait --> Embedded Processors & Controllers Online Ordering | LCSC
Arduino Ide vaan tavallaan helposti lähestyttävämpi ja netti täynnä ohjeitakin.

Jos en väärin muista niin ainakin stm:lle oli ihan oma kehitysympäristö.

Sitten kun olet käyttänyt hetken sellaista joka pitää projektin tiedostot hanskassa, täydentää muuttujia ja antaa pomppia määrityksiin katsomaan miten se olikaan tehty et ehkä halua palata arduino ideen... vähän vastaava ero kuin kirjoittaisi kirjaa notepadilla eikä wordillä ;)
Suosittelen jos aikoo tehdä vähänkin enemmän, säästää hermoja ja aikaa.

Kaikkiin löytyy nykyään ohjeita, ainoa mitä olisin joskus tarvinnut mutta ei löytynyt kuin arduino idelle oli crash reporter tai siihen suuntaan
 
Jos en väärin muista niin ainakin stm:lle oli ihan oma kehitysympäristö.

Sitten kun olet käyttänyt hetken sellaista joka pitää projektin tiedostot hanskassa, täydentää muuttujia ja antaa pomppia määrityksiin katsomaan miten se olikaan tehty et ehkä halua palata arduino ideen... vähän vastaava ero kuin kirjoittaisi kirjaa notepadilla eikä wordillä ;)
Suosittelen jos aikoo tehdä vähänkin enemmän, säästää hermoja ja aikaa.

Kaikkiin löytyy nykyään ohjeita, ainoa mitä olisin joskus tarvinnut mutta ei löytynyt kuin arduino idelle oli crash reporter tai siihen suuntaan

Onhan niille kaikille omat kehitysympäristönsä. Taisi stm32:lle olla vaan demo se, että sai ledin vilkkumaan Arduino IDE:ssäkin. Stm8:lle ei ollut.


Hirveästi ei näillä pienillä esim. attiny13A lastuilla pääse oikein mitään tekemään, kun esimerkkejä niukasti. Vaikuttaisi siltä, että etenkin esp32:lle on ne huikeimmat projektit niin kuin nyt esim. esp32-cam eli saa tehtyä vakoilukameran. Onhan se toki valmis viritelmä, mutta kameroineen jonkun 7 euroa vain. Tehoissakin esp32 parhain ja hintakaan ei paha.
Kuinka helposti arduino ide koodin pystyisi kääntämään vempainten alkuperäiselle kehitysympäristölle? Esim. tämä--> ESP32-CAM Video Streaming and Face Recognition with Arduino IDE | Random Nerd Tutorials

Paitsi ei haisua edes mikä näiden esp8266 & esp32 alkuperäinen kehitysympäristö on. Jos se niitä ihmeellisiä AT + komentoja niin ei kiitos. ESP32 - Wikipedia Espressif IoT Development Framework – official Espressif development framework for ESP32 <-- kertaakaan en ole kokeillut. Olisko tuo .NET nanoFramework tutumpi?
 
Olinpas hajamielinen. On tullut jonkinlainen lähes klooni atmega328P:stä nimellä LGT8F328P. Tuli tuollainen 20 jalkainen postitse valmiina laudassa kiinni alle dollarilla --> US $0.86 |1PCS LGT8F328P SSOP20 MiniEVB Alternative Arduino Pro Mini ATMeag328P Good Quality and Cheap Price-in Integrated Circuits from Electronic Components & Supplies on Aliexpress.com | Alibaba Group

Logicgreen - ElectroDragon

Kloonissa sisäinen kello tarkempi kuin alkuperäisessä, mutta sitten laudassa ei ole ollenkaan ulkoista kidettä. Säästäneet vähän kustannuksissa. Se vaan, että tuossa laudan lastussa ei ole mitään merkintöjä, että pelkästään musta. Ei ole tullut vielä kokeiltua.
 
Onhan niille kaikille omat kehitysympäristönsä. Taisi stm32:lle olla vaan demo se, että sai ledin vilkkumaan Arduino IDE:ssäkin. Stm8:lle ei ollut.

Hirveästi ei näillä pienillä esim. attiny13A lastuilla pääse oikein mitään tekemään, kun esimerkkejä niukasti. Vaikuttaisi siltä, että etenkin esp32:lle on ne huikeimmat projektit niin kuin nyt esim. esp32-cam eli saa tehtyä vakoilukameran. Onhan se toki valmis viritelmä, mutta kameroineen jonkun 7 euroa vain. Tehoissakin esp32 parhain ja hintakaan ei paha.
Kuinka helposti arduino ide koodin pystyisi kääntämään vempainten alkuperäiselle kehitysympäristölle? Esim. tämä--> ESP32-CAM Video Streaming and Face Recognition with Arduino IDE | Random Nerd Tutorials

Paitsi ei haisua edes mikä näiden esp8266 & esp32 alkuperäinen kehitysympäristö on. Jos se niitä ihmeellisiä AT + komentoja niin ei kiitos. ESP32 - Wikipedia Espressif IoT Development Framework – official Espressif development framework for ESP32 <-- kertaakaan en ole kokeillut. Olisko tuo .NET nanoFramework tutumpi?

Tottakai esplle on hienompia projekteja kun tehoa ja muistia on reilusti enemmän kuin yleisissä pienissä avr- lastuissa.

Esp oma kehitysympäristö on joku valmistajan low-level kirjasto ja oikea kääntäjä, voi olla vähän haasteellisempi aloittaa siltä pohjalta.

Tinyt vaatii datalehden lukemista ja tietysti mielellään muutkin palikat kun haluaa tehdä enemmän kuin esimerkit.

Osa koodeista kääntyy helposti ja osa ei. Täytyy muistaa että arduino frame ottaa esimerkiksi avr kanssa itselleen timer0:n ajastuksia yms varten. Ja digi-ion taustalla päätellään portteja yms...
Käyttäjälle hyvää se että perusjutut toimii koodissa samalla tavalla piiristä riippumatta. Miinuksena tulee koko ja hitaus.
 
Jaahas, oma Arduino Nano GPS nopeusmittari tuli toistaiseksi valmiiksi. Aloin pitkästä aikaa tänään tätä edistämään. Tein koteloon näytölle reiän, ideana että näyttö tulee kiinni kuumaliimalla sisäpuolelta ja ulkopuolelta tiivistys silikonilla. Vaihdoin virransyötön ulkoiseksi näytölle, Arduino Nanolle ja GPS moduulille. Muokkasin koodia hieman, että näyttää nopeuden kun nopeus on yli 10 kmh ja sen alle näyttää kellonajan.
Näiden jälkeen otin laitoksen pöydälle kokeillakseni että vieläkö se toimii. No eipä toiminut kun tuuppasin 12 volttia 5 voltin linjaan vahingossa! Unohtui 12 voltista 5 volttiin muuntajapalikka välistä :facepalm: Hauskasti olin jo testannut ennen koodimuutoksia palikan kanssa että laitos toimii.
Onneksi nuo osat eivät montaa euroa kustanna mutta jonkin verran ottaa päähän.
 
Vinkkejä arvon tekkiläisiltä ottaisin mielelläni vastaan. Onko microchipin pic-sarjassa mitään tällaista suht "vakiintunutta" mikrokontrolleria samaan tapaan kuin tämä atmega328? Joku mihin löytäisi helposti ohjeita, muukin kuin datalehti siis? Joku millä saisi mukavan ponnahduslaudan piccien maailmaan?
 
Piceistä käsitystä, että voivat olla halvimpia ja voivat toimia todella pienellä jännitteellä. Paitsi niiden ohjelmointi taisi vaatia melko kalliin ohjelmointialustan ja se koodikin vaikea selkoista eli ei mitään helppoa atmega328 väylää käsittääkseni..
 
Ohjelmoinnissahan voi tuollaista pickit 2/3/4:a käyttää ja hinta näyttää olevan kympin luokkaa. Tosiaan hieman jopa kaipailisin tuollaista alustaa mihin ei olisi kaikkia maailman mahdollisia kirjastoja jo joku tehnyt valmiiksi, vaan joutuisi hieman käyttää aikaa itse ohjelmoinninkin opiskeluun.
 
Ohjelmoinnissahan voi tuollaista pickit 2/3/4:a käyttää ja hinta näyttää olevan kympin luokkaa. Tosiaan hieman jopa kaipailisin tuollaista alustaa mihin ei olisi kaikkia maailman mahdollisia kirjastoja jo joku tehnyt valmiiksi, vaan joutuisi hieman käyttää aikaa itse ohjelmoinninkin opiskeluun.

Eihän mikään pakota käyttämään atmelin kirjastoja tai arduino- alustaa avr- maailmassakaan.
Datalehti käteen ja atmel studio niin voi lähteä vaikka asmilla. Tai käyttää avr-gcc peruskirjastoa ettei ihan kaikkea tarvitse kirjoittaa alusta.
Eihän se piiri rajaa sitä miten lähtee tekemään paitsi jos piirille ei edes ole tehty mitään valmista.
 
Itsellä vakio picci pidemmän aikaa ollut pic18f46k80. Tarpeeksi muistia ja nopeuttakin riittää. Vaativammassa päässä taasen esmes DSpic33ep512mc204 Ohjelmointilaitteena pickit3,joka kustantaa vajaan kympin.
 
Hei

Olen uusi foorumilla ja haen täältä tukea uuteen harrastukseeni arduinon parissa.
Sen verran taustaa, että jäykemmän sähkön puoli on aikalailla tuttua kauraa, mutta tässä viimeiset kuukaudet yrittänyt päästä sisälle elektroniikan ja eritoten arduino maailmaan..

Olen tilannut kaikki aiheeseen liittyvät tavarat klooneina ebaysta ja tehnyt jo joitakin onnistuneita rakennelmia.

Nyt sain käsiini LCD näytön 1602A valmistaja on QAPASS.

Epäilen että se on viallinen, mutta kun toistakaan näyttöä ei ole tässä testattavaksi niin en ole tästä varma.

Olen alkanut rakentaa kytkentää koekytkentälevylle ja maan/GND olen yhdistänyt näytön pinneihin VSS,RW ja K
+5V menee pinneille VDD ja (vastuksen läpi) A.lle

Ongelma tulee kontrastin säätöpinnin (V0) kanssa.
-V0 pinnin ja maan väliltä löytyy mitatessa 5v jännite, onko tämä normaalia?
-Jos asennan kytkentäkaavion mukaan säätöpotentiometrin ohjaamaan kontrastia, niin ääriasentoon kääntäminen saa arduinon kyykkäämään kun jännite putoaa nolliin.

Sama ilmiö tapahtuu, kun kytken V0 pinnin suoraan kytkentälangalla maahan (GND), tällä kytkennällä pitäisi kontrastin olla maksimilla.

Olisiko jonkun esim mahdollista mitata löytyykö normikytkennällä V0 pinnistä tuo 5V jännite?

Kiitoksia jo etukäteen!
 
Hei

Olen uusi foorumilla ja haen täältä tukea uuteen harrastukseeni arduinon parissa.
Sen verran taustaa, että jäykemmän sähkön puoli on aikalailla tuttua kauraa, mutta tässä viimeiset kuukaudet yrittänyt päästä sisälle elektroniikan ja eritoten arduino maailmaan..

Olen tilannut kaikki aiheeseen liittyvät tavarat klooneina ebaysta ja tehnyt jo joitakin onnistuneita rakennelmia.

Nyt sain käsiini LCD näytön 1602A valmistaja on QAPASS.

Epäilen että se on viallinen, mutta kun toistakaan näyttöä ei ole tässä testattavaksi niin en ole tästä varma.

Olen alkanut rakentaa kytkentää koekytkentälevylle ja maan/GND olen yhdistänyt näytön pinneihin VSS,RW ja K
+5V menee pinneille VDD ja (vastuksen läpi) A.lle

Ongelma tulee kontrastin säätöpinnin (V0) kanssa.
-V0 pinnin ja maan väliltä löytyy mitatessa 5v jännite, onko tämä normaalia?
-Jos asennan kytkentäkaavion mukaan säätöpotentiometrin ohjaamaan kontrastia, niin ääriasentoon kääntäminen saa arduinon kyykkäämään kun jännite putoaa nolliin.

Sama ilmiö tapahtuu, kun kytken V0 pinnin suoraan kytkentälangalla maahan (GND), tällä kytkennällä pitäisi kontrastin olla maksimilla.

Olisiko jonkun esim mahdollista mitata löytyykö normikytkennällä V0 pinnistä tuo 5V jännite?

Kiitoksia jo etukäteen!
Mulla on sama näyttö ja 5V löytyy tuosta mistä sullakin.
 
Viimeksi muokattu:
Tässä on eräs oma tekemä helvetin sekava kaavio, mutta näkee ainakin millä kytkennällä mun näyttö toimii.

Projektikaavio.png
 
Olisi vaihteeksi taas kysyttävää io-techin viisailta. Olen miettinyt, että duunissa olisi todella kätevä sellainen järjestelmä, jolla voisi seurata inventaarion tilannetta. Näin ympäripyöreästi meillä on töissä käytössä suht iso hylly mihin ihmiset tuovat laatikoita, jotka meidän on tarkoitus täyttää. Kyseessä on tällainen ns. loputon kierre eli: tyhjä laatikko tulee hyllyyn, tee romppeet ja täytä laatikko, vie täysi laatikko ja odota että tyhjä laatikko tulee takaisin samaan hyllyyn samaan kohtaan". Laatikot ovat kooltaan ihan heittämällä jotain 40cmx60cm.

Työpisteelläni yhden henkilön tehtävä on sellainen, että hänen tekemät tavarat (ei aina aivan samanlaiset) menevät jokaiseen laatikkoon ja siinä mielessä olisi todella kätevää, että pystyisi hieman seuraamaan tilannetta, että mihin kaikkiin laatikoihin on jo vienyt tarvittavat tavarat ja mihin vielä pitäisi viedä siis muutenkin kuin, että aina kävelee kyseiselle hyllylle ja painaa mieleensä mihin kaikkiin laatikoihin on vienyt jo tavarat.

Itse olen miettinyt, että jos olisi joku suht iso kosketusnäyttö sillä työpisteellä (työpiste A) mistä romppeet kulkevat jokaiseen lootaan ja siihen näyttöön voisi aina merkitä painamalla, että jahas tuohon laatikkoon olen jo vienyt tarvittavat romut. Ja kun kyseinen laatikko lähtee hyllystä niin merkintä poistuisi työpiste A:n näytöltä.

Itse hylly on sen kokoinen, että siihen mahtuu noin 6x3 (mahdollisesti enemmän myöhemmin) riviä erilaisia laatikoita ja jokaisen laatikon kohdalle parhaimmillaan (pahimmillaan) kaksi laatikkoa päällekkäin. Millä tavalla te toteuttaisitte tällaisen järjestelmän? Itse mietin suht noviisina arduinomiehenä, että käyttäisi arduino megaa ja jollain ultrasonic sensoreilla + if-elsen avulla seuraisi että onko sensorin antama lukema suurempi kuin tietty lukema ja sen perusteella nollaus. Vinkkejä kiitos :happy:
 
Ehkä joku rfid tagaus tai QR-koodi, joka luetaan automaattisesti kun osa viedään laatikkoon. Ja laatikon hakija voisi vilauttaa omaa tagiaan jolloin laatikko nollautuisi, eli merkataan noudetuksi. Silloin voisi pitää kirjaa kuka tuonut ja kuka hakenut, jos osille on omat koodinsa niin voisi kirjata mitä on tehty ja kuka on tehnyt. Voisi tehdä osatoimituksia ja kone ilmottaisi milloin koko tilaus on kasassa, ja ilmoittaa jotta nouto mahdollinen
 
Kiitos nopeasta ja hyvästä vastauksesta. Meillä on duunissa käytössä jo, miten sen nyt kauniisti sanoisi "alkeellinen" tapa seurata tuota mitä kukin on tehnyt. Unohtui mainita, että tuo työpiste mistä kulkeutuu roinaa jokaiseen laatikkoon sijaitsee hieman kauempana tuosta hyllystä ja jotenkin siis data olisi hyvä saada lähetettyä sinne langattomasti. Varmaan tuollainen nrf24l01+ moduuli voisi hoitaa sitä virkaa ihan etäisyydenkin puolesta (wifi on poissuljettu vaihtoehto IMO koska omilla taidoilla en uskalla edes lähteä sörkkimään tietoturvankin takia).

Tuo rfid oli hyvä vinkki, mutta voiko tuolla ton systeemin toteuttaa jotenkin helposti/järkevästi kun laatikoita on kuitenkin aika monta? Jokaiselle laatikolle ei varmaan viitsi aivan omaa lukijaa ruveta hankkimaan ja jos tuohon rakentaan jonkinlaisen lcd valikkosysteemin kaikkineen niin taitaa tulla jo se perusasia vastaan, että nykyinen alkeellinen systeemi on yksinkertaisesti helpompi ja vähemmän aikaa vievä kun lootan voi vain heittää paikalleen ja that's it. Ja kyllä jokaisella laatikolla on omat koodit. Mä lähdin tätä ideaa vain pyörittelemään sen vuoksi, että meille uusille ja tuleville uusille työntekijöille kyseisssä firmassa nykyinen systeemi on aika "haasteellinen", mutta vanhoille monta vuotta talossa olleillehan tuo on aivan peruskauraa kun muistaa ulkoa jo laatikoiden koodit ja, että missä on mitäkin jne.

Tuli tässä sekin mieleen, että olisi kai sekin yksi vaihtoehto, että kiinnittäisi jokaisen laatikon taakse rajakytkimet/limit switchit ja tilan muutoksesta lähtee data sinne työpisteelle, että laatikko tuli tai lähti.
 
Jos laatikko tavallaan pysyy aina saman, voi siinä kyljessä olla rfid tai vaikkapa vain viivakoodi. Jos tarkoitus vain seurata laatikkoa, ei sinällään sisältöä. Yksi lukija johon vilautetaan koodia kuten kaupan itsepalvelukassalla. Kuulostaa että vanhat tyypit eivät halua muutosta, eli sitten pitäisi jotenkin saada homma toimimaan että liike tulee aina kuitenkin luetuksi.

Mekaaninen kytkin tarkoittaisi jokaiselle laatikkopaikalle omaa kytkintä, johdotusta ja paikan tulisi olla sellainen että laatikko menee siihen vain yhdellä tapaa, tai rajakytkimen oltava luokkaa tanssimatto. Tanssimatolla tarkoitan vaikka kahta alumiinifoliota joiden välissä on jokin palautuva vaahto, silloin on sama mikä kohta "tanssimatosta" ottaa kontaktia. Päällekkäin ladottavia laatikoita tuo kytkin ei osaisi osaisi laskea montako siinä on.
 
@SShadow Kiitos näin parin kuukauden viiveellä :x3:. Unohtui kiittää aiemmin... Tuo projekti onkin jo kuopattu, kun tuolle ei enää duunissa tapahtuneiden muutoksien myötä ole tarvetta. Ihan hyvä etten ehtinyt aloittamaan/hommaamaan tuohon mitään rompetta kun olisi jäänyt tarpeettomaksi.

Olisi seuraavakin projekti ihan työn alla ja nyt on pakko kysellä vinkkejä täältä, kun ei tunnu pääsevän tässä yhtään eteenpäin. Ihan ensiksi sanon sen verran, että en todellakaan ole mikään haka ohjelmoinnin/arduinojen kanssa, eli en varmasti tiedä liikaa, joten kaikki vinkit, palaute ja runtukin on tervetullutta. Pitkään on kiehtonut tämä osa elektroniikka-maailmasta, mutta ongelmana ollut mielenkiintoisen projektin löytyminen itselle, että pääsee kunnolla opettelemaan. Nyt kun sen viimein keksin niin päätin tietenkin hypätä sitten suoraan altaan syvään päähän :eek:.

Hieman näiden tyylistä laitetta siis suunnittelun alla, mutta toivon että tässä matkan varrella kun tätä työstää ja oppii uutta, niin olisi mahdollista leikata tuollaisen videoissa käytetyn ohuen johdon lisäksi, paksumpaa monesta (max. viidestä(5)) tuollaisesta yhteenkiedotusta ohkaisesta koostuvaa johtoa ja mieluusti myös kutistesukkaa. Johtoja ei tarvitsisi kuoria vaan pelkkä katkaisu riittäisi omaan tarpeeseen.




Tätä alla olevaa videota olen käyttänyt pääsääntöisesti apuna kun olen perehtynyt encoderin ja valikon rakenteen toimintaan. Omien muokkauksieni kanssa tosin.


Eli tuollaista johto+kutistesukkaleikkuria päätin ruveta työstämään. Tuli hommattua jos jonkinnäköistä rompetta jo tätä laitetta varten eli perääntyminen ei ole enää mahdollista ilman rahallisia tappioita. Ramps 1.4 oletin passaavan tähän hommaan, pari nema 17 moottoria, leikkuuteriä, Geeetechin 12V/5A virtalähde jne. Kotelointia varten löytyy 3d-tulostin ja pientä ei-muovista suunnitelmaa on koko laitteen kotelointiinkin, mutta ne sitten aikanaan jos sinne asti pääsee.

Ajattelin ja olenkin lähtenyt nyt aluksi liikkeelle siitä, että "suunnittelen" lcd-valikon jossa olisi edes jonkinlaista toiminnallisuutta. Ja suunnittelulla tietenkin tarkoitan sitä, että googletan toisten ihmisten projekteja ja yritän apinoida koodia omaan käyttötarkoitukseen.

IMG_20200215_144030.jpgIMG_20200215_144053.jpgIMG_20200215_144114.jpgIMG_20200215_160306.jpgIMG_20200215_160309.jpg

Tällä hetkellä valikko toimii mielestäni "riittävän hyvin" ainakin näin protoiluvaiheessa, eli navigointi encoderin avulla toimii ja napin painallus toimii myös. Itselle ei nyt aukene se, että miten saisin tuon toimimaan niin, että valikon rakenne olisi kutakuinkin tämä: Päävalikko -> Johto -> Eri johto vaihtoehdot -> Esim 5/4/3/2/1 wire valittu -> Valitse leikattavan pätkän pituus -> Montako kappaletta. Eli valikkoon pitäisi saada "syvyyttä", mutta itse en kyllä hiffaa että miten se menisi. Toki asiaan ei varmaan auta jatkuva suunnittelukaljojen lipitys :whistling:.

Hävettää laittaa tämäkin saatanan räpellys, mutta pakko se varmaan on. Kaikki vinkit ovat tervetulleita.

C++:
#include <SPI.h>
#include <Wire.h>
#include <SD.h>
#include <U8g2lib.h>

//Kaikki reprap full graphic smart controlleriin liittyvä
#define ENC_DAT         31
#define ENC_CLK         33
#define ENC_NAPPI       35
#define SD_DETECT_PIN   49
#define SDSS            53
#define BUZZER_PIN      37
#define STOP_PIN        41


int laskuri = 0;
int laskuriAiemmin = 0;
int sivu = 1;
int Ready = 1;
int alimenu = 0;
int tila_Aiemmin;
int tila;
int enc_CLK;
int enc_DATA;
int painettu = 0;

U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* SCK=*/ 23 /* A4 */ , /* MOSI=*/ 17 /* A2 */, /* CS=*/ 16 /* A3 */, /* reset=*/ U8X8_PIN_NONE);

void setup() {
  Serial.begin(9600);
  u8g2.begin();
  pinMode (ENC_DAT, INPUT_PULLUP);
  pinMode (ENC_CLK, INPUT_PULLUP);
  pinMode (ENC_NAPPI, INPUT_PULLUP);
  // Luetaan datapinnin tila ensimmäisen kerran
  tila_Aiemmin = digitalRead(ENC_DAT);


  u8g2.firstPage();
  do {
    //all graphics commands have to appear within the loop body.
    u8g2.setFont(u8g2_font_helvR14_tf);
    u8g2.drawStr(10, 20, "Johtoleikkuri");
    u8g2.drawStr(10, 50, "Versio: 0.3");
  } while ( u8g2.nextPage() );
}

void loop() {
  enkooderi();
  //Serial.print(laskuri); //Seurannut tällä encoderin toimintaa

  //Valikot alkavat tästä
  if ((laskuriAiemmin > laskuri) || (laskuriAiemmin < laskuri) || painettu) {
    Ready = 1;

    //Päävalikko. Valikon ensimmäinen sivu
    if (alimenu == 0) {
      if (0 <= laskuri && laskuri < 5) {
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.drawUTF8(25, 15, "Päävalikko");
          u8g2.setFont(u8g2_font_unifont_t_symbols);
          u8g2.drawGlyph(0, 40, 0x21d2); //Tällä tehdään lcd-valikossa näkyvä nuoli
          u8g2.drawStr(25, 40, "Johto");
          u8g2.drawStr(25, 60, "Kutiste");
        } while ( u8g2.nextPage() );
        sivu = 1;
      }

      if (5 <= laskuri && laskuri < 10) {
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.drawUTF8(25, 15, "Päävalikko");
          u8g2.setFont(u8g2_font_unifont_t_symbols);
          u8g2.drawGlyph(0, 60, 0x21d2); //Tällä tehdään lcd-valikossa näkyvä nuoli
          u8g2.drawStr(25, 40, "Johto");
          u8g2.drawStr(25, 60, "Kutiste");
        } while ( u8g2.nextPage() );
        sivu = 2;
      }
    }//Päävalikko loppuu.


    //Päävalikosta seuraava. Tarkoituksena saada tämä johtojen kohdalle.
    if (alimenu == 1)
    {
      if (0 <= laskuri && laskuri < 5)
      {
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.setFont(u8g2_font_unifont_t_symbols);
          u8g2.drawGlyph(0, 15, 0x21d2); //Tällä tehdään lcd-valikossa näkyvä nuoli
          u8g2.drawStr(25, 15, "5 wire");
          u8g2.drawStr(25, 40, "4 wire");
        } while ( u8g2.nextPage() );
        sivu = 1;
      }

      if (5 < laskuri && laskuri < 10)
      {
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.setFont(u8g2_font_unifont_t_symbols);
          u8g2.drawGlyph(0, 40, 0x21d2); //Tällä tehdään lcd-valikossa näkyvä nuoli
          u8g2.drawStr(25, 15, "5 wire");
          u8g2.drawStr(25, 40, "4 wire");
        } while ( u8g2.nextPage() );
        sivu = 2;
      }
    }//Johtovalikko loppuu tähän

    //Päävalikosta seuraava. Kutistesukan kohdalle.
    if (alimenu == 2)
    {
      if (0 <= laskuri && laskuri < 5)
      {
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.setFont(u8g2_font_unifont_t_symbols);
          u8g2.drawGlyph(0, 15, 0x21d2); //Tällä tehdään lcd-valikossa näkyvä nuoli
          u8g2.drawStr(25, 15, "Paksu kutiste");
          u8g2.drawStr(25, 40, "Ohut kutiste");
        } while ( u8g2.nextPage() );
        sivu = 1;
      }

      if (5 < laskuri && laskuri < 10)
      {
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.setFont(u8g2_font_unifont_t_symbols);
          u8g2.drawGlyph(0, 40, 0x21d2); //Tällä tehdään lcd-valikossa näkyvä nuoli
          u8g2.drawStr(25, 15, "Paksumpi kutiste");
          u8g2.drawStr(25, 40, "Ohkaisempi kutiste");
        } while ( u8g2.nextPage() );
        sivu = 2;
      }
    }//Kutistesukkien valikko loppuu tähän
  }//Tähän loppuu valikot

  laskuriAiemmin = laskuri; //Tallennetaan viimeisin laskurin tila



  //Havaitaan encoderin napin painallus
  if (digitalRead(ENC_NAPPI) == LOW)
  {
    if (alimenu == 1)
    {
      if (sivu == 1)
      {
        alimenu = 0;
        laskuri = 1;
        painettu = 0;
        Ready = 0;
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.drawStr(10, 15, "Montako 5 wire");
        } while ( u8g2.nextPage() );
        delay(2000);
      }

      if (sivu == 2)
      {
        alimenu = 0;
        laskuri = 0;
        painettu = 0;
        Ready = 0;
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.drawStr(25, 15, "Montako 4 wire");
        } while ( u8g2.nextPage() );
        delay(2000);
      }
    }


    if (alimenu == 2)
    {
      if (sivu == 1)
      {
        alimenu = 0;
        laskuri = 1;
        painettu = 0;
        Ready = 0;
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.drawStr(10, 15, "Montako paksua");
        } while ( u8g2.nextPage() );
        delay(2000);
      }

      if (sivu == 2)
      {
        alimenu = 0;
        laskuri = 0;
        painettu = 0;
        Ready = 0;
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.drawStr(25, 15, "Montako ohutta");
        } while ( u8g2.nextPage() );
        delay(2000);
      }
    }


    if (alimenu == 0 && Ready == 1)
    {
      if (sivu == 1)
      {
        alimenu = 1;
        laskuri = 0;
        painettu = 1;
      }

      if (sivu == 2)
      {
        alimenu = 2;
        laskuri = 0;
        painettu = 1;
      }
    }//
  }

  //Minimi- ja maksimiarvot laskurille.
  if (laskuri > 20)
  {
    laskuri = 20;
  }
  if (laskuri < 0)
  {
    laskuri = 0;
  }
}


void enkooderi() {
  tila = digitalRead(ENC_DAT);

  //Onko tila muuttunut setupin jälkeen
  if (tila != tila_Aiemmin) {
    //Myötäpäivään
    if (digitalRead(ENC_CLK) != tila) {
      laskuri++;
    } else {
      laskuri--;
    }
  }
  tila_Aiemmin = tila; // Tallennetaan viimeisin tila
}
 
Löytyykö suosituksia current shunt amplifierille? Tarkoitus käyttää Arduino Nanon ja pienen oled näytön kanssa.

Parhain/helpoin/järkevin valinta mitä itse löysin olisi tämä:
Tai enemmän tarkkuutta sisältävä B-versio:

Datasheet:

Shunttina tarkoitus käyttää 100A/75mV mallia, jännite tulee olemaan noin 11-14v ja virrat siellä 0-60A.

Tarkoitus olisi laskea virrankulutus mAh:na ja saada se näytettyä tuolla Oled näytöllä. Ei pitäisi olla varsinkaan tolla INA219 (i2C) vehkeellä vaikeaa kun sen pitäisi tarjota suoraan jännite, virta ja watit ulos tuolta väylästä. Toki ei tarvisi kun tuon virran ja jännitteen.

Onnistuuko kohtuu tarkka mittaaminen ilman RTC piiriä vai vaatiiko sen että "kello" on tarpeeksi tarkka että saadaan oikea mAh kulutus?

Tarkkaa speksiä mAh tarkkuudelle en nyt osaa antaa, mutta jos nyt oltaisiin vaikka 20Ah käytön jälkeen siellä 100-400mAh tarkkuudessa.

Kaikki info ja tieto otetaan mielellään vastaan.
 
Löytyykö suosituksia current shunt amplifierille? Tarkoitus käyttää Arduino Nanon ja pienen oled näytön kanssa.

Parhain/helpoin/järkevin valinta mitä itse löysin olisi tämä:
Tai enemmän tarkkuutta sisältävä B-versio:

Datasheet:

Shunttina tarkoitus käyttää 100A/75mV mallia, jännite tulee olemaan noin 11-14v ja virrat siellä 0-60A.

Tarkoitus olisi laskea virrankulutus mAh:na ja saada se näytettyä tuolla Oled näytöllä. Ei pitäisi olla varsinkaan tolla INA219 (i2C) vehkeellä vaikeaa kun sen pitäisi tarjota suoraan jännite, virta ja watit ulos tuolta väylästä. Toki ei tarvisi kun tuon virran ja jännitteen.

Onnistuuko kohtuu tarkka mittaaminen ilman RTC piiriä vai vaatiiko sen että "kello" on tarpeeksi tarkka että saadaan oikea mAh kulutus?

Tarkkaa speksiä mAh tarkkuudelle en nyt osaa antaa, mutta jos nyt oltaisiin vaikka 20Ah käytön jälkeen siellä 100-400mAh tarkkuudessa.

Kaikki info ja tieto otetaan mielellään vastaan.

Tarkkaan mittaamiseen pitäisi oikeastaan olla piiri joka laskee itse, olikohan nuo nimellä coulomb counter.

Sanoisin että voi hyvin mitata ilman rtctä.
Arduinon kanssa pitää tietysti olla tarkkana ajastusten kanssa.

Kuinka tiheään olit ajatellut mitata? Kerran sekunnissa vai tiheämmin?
Jos tiheämmin niin sitten ehkä kannattaa luopua arduinokirjastoista ja tehdä itse sellainen timer0 isr jossa ei tehdä turhia vaan mitataan.
Loopissa ei kannata mitata mutta siellä voi päivittää näyttöä kunhan sen aikana interruptit on edelleen päällä. Riippuu tietysti siitä miten näytölle kirjoitetaan.
 
@SShadow Kiitos näin parin kuukauden viiveellä :x3:. Unohtui kiittää aiemmin... Tuo projekti onkin jo kuopattu, kun tuolle ei enää duunissa tapahtuneiden muutoksien myötä ole tarvetta. Ihan hyvä etten ehtinyt aloittamaan/hommaamaan tuohon mitään rompetta kun olisi jäänyt tarpeettomaksi.

Olisi seuraavakin projekti ihan työn alla ja nyt on pakko kysellä vinkkejä täältä, kun ei tunnu pääsevän tässä yhtään eteenpäin. Ihan ensiksi sanon sen verran, että en todellakaan ole mikään haka ohjelmoinnin/arduinojen kanssa, eli en varmasti tiedä liikaa, joten kaikki vinkit, palaute ja runtukin on tervetullutta. Pitkään on kiehtonut tämä osa elektroniikka-maailmasta, mutta ongelmana ollut mielenkiintoisen projektin löytyminen itselle, että pääsee kunnolla opettelemaan. Nyt kun sen viimein keksin niin päätin tietenkin hypätä sitten suoraan altaan syvään päähän :eek:.

Hieman näiden tyylistä laitetta siis suunnittelun alla, mutta toivon että tässä matkan varrella kun tätä työstää ja oppii uutta, niin olisi mahdollista leikata tuollaisen videoissa käytetyn ohuen johdon lisäksi, paksumpaa monesta (max. viidestä(5)) tuollaisesta yhteenkiedotusta ohkaisesta koostuvaa johtoa ja mieluusti myös kutistesukkaa. Johtoja ei tarvitsisi kuoria vaan pelkkä katkaisu riittäisi omaan tarpeeseen.




Tätä alla olevaa videota olen käyttänyt pääsääntöisesti apuna kun olen perehtynyt encoderin ja valikon rakenteen toimintaan. Omien muokkauksieni kanssa tosin.


Eli tuollaista johto+kutistesukkaleikkuria päätin ruveta työstämään. Tuli hommattua jos jonkinnäköistä rompetta jo tätä laitetta varten eli perääntyminen ei ole enää mahdollista ilman rahallisia tappioita. Ramps 1.4 oletin passaavan tähän hommaan, pari nema 17 moottoria, leikkuuteriä, Geeetechin 12V/5A virtalähde jne. Kotelointia varten löytyy 3d-tulostin ja pientä ei-muovista suunnitelmaa on koko laitteen kotelointiinkin, mutta ne sitten aikanaan jos sinne asti pääsee.

Ajattelin ja olenkin lähtenyt nyt aluksi liikkeelle siitä, että "suunnittelen" lcd-valikon jossa olisi edes jonkinlaista toiminnallisuutta. Ja suunnittelulla tietenkin tarkoitan sitä, että googletan toisten ihmisten projekteja ja yritän apinoida koodia omaan käyttötarkoitukseen.

IMG_20200215_144030.jpgIMG_20200215_144053.jpgIMG_20200215_144114.jpgIMG_20200215_160306.jpgIMG_20200215_160309.jpg

Tällä hetkellä valikko toimii mielestäni "riittävän hyvin" ainakin näin protoiluvaiheessa, eli navigointi encoderin avulla toimii ja napin painallus toimii myös. Itselle ei nyt aukene se, että miten saisin tuon toimimaan niin, että valikon rakenne olisi kutakuinkin tämä: Päävalikko -> Johto -> Eri johto vaihtoehdot -> Esim 5/4/3/2/1 wire valittu -> Valitse leikattavan pätkän pituus -> Montako kappaletta. Eli valikkoon pitäisi saada "syvyyttä", mutta itse en kyllä hiffaa että miten se menisi. Toki asiaan ei varmaan auta jatkuva suunnittelukaljojen lipitys :whistling:.

Hävettää laittaa tämäkin saatanan räpellys, mutta pakko se varmaan on. Kaikki vinkit ovat tervetulleita.

C++:
#include <SPI.h>
#include <Wire.h>
#include <SD.h>
#include <U8g2lib.h>

//Kaikki reprap full graphic smart controlleriin liittyvä
#define ENC_DAT         31
#define ENC_CLK         33
#define ENC_NAPPI       35
#define SD_DETECT_PIN   49
#define SDSS            53
#define BUZZER_PIN      37
#define STOP_PIN        41


int laskuri = 0;
int laskuriAiemmin = 0;
int sivu = 1;
int Ready = 1;
int alimenu = 0;
int tila_Aiemmin;
int tila;
int enc_CLK;
int enc_DATA;
int painettu = 0;

U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* SCK=*/ 23 /* A4 */ , /* MOSI=*/ 17 /* A2 */, /* CS=*/ 16 /* A3 */, /* reset=*/ U8X8_PIN_NONE);

void setup() {
  Serial.begin(9600);
  u8g2.begin();
  pinMode (ENC_DAT, INPUT_PULLUP);
  pinMode (ENC_CLK, INPUT_PULLUP);
  pinMode (ENC_NAPPI, INPUT_PULLUP);
  // Luetaan datapinnin tila ensimmäisen kerran
  tila_Aiemmin = digitalRead(ENC_DAT);


  u8g2.firstPage();
  do {
    //all graphics commands have to appear within the loop body.
    u8g2.setFont(u8g2_font_helvR14_tf);
    u8g2.drawStr(10, 20, "Johtoleikkuri");
    u8g2.drawStr(10, 50, "Versio: 0.3");
  } while ( u8g2.nextPage() );
}

void loop() {
  enkooderi();
  //Serial.print(laskuri); //Seurannut tällä encoderin toimintaa

  //Valikot alkavat tästä
  if ((laskuriAiemmin > laskuri) || (laskuriAiemmin < laskuri) || painettu) {
    Ready = 1;

    //Päävalikko. Valikon ensimmäinen sivu
    if (alimenu == 0) {
      if (0 <= laskuri && laskuri < 5) {
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.drawUTF8(25, 15, "Päävalikko");
          u8g2.setFont(u8g2_font_unifont_t_symbols);
          u8g2.drawGlyph(0, 40, 0x21d2); //Tällä tehdään lcd-valikossa näkyvä nuoli
          u8g2.drawStr(25, 40, "Johto");
          u8g2.drawStr(25, 60, "Kutiste");
        } while ( u8g2.nextPage() );
        sivu = 1;
      }

      if (5 <= laskuri && laskuri < 10) {
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.drawUTF8(25, 15, "Päävalikko");
          u8g2.setFont(u8g2_font_unifont_t_symbols);
          u8g2.drawGlyph(0, 60, 0x21d2); //Tällä tehdään lcd-valikossa näkyvä nuoli
          u8g2.drawStr(25, 40, "Johto");
          u8g2.drawStr(25, 60, "Kutiste");
        } while ( u8g2.nextPage() );
        sivu = 2;
      }
    }//Päävalikko loppuu.


    //Päävalikosta seuraava. Tarkoituksena saada tämä johtojen kohdalle.
    if (alimenu == 1)
    {
      if (0 <= laskuri && laskuri < 5)
      {
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.setFont(u8g2_font_unifont_t_symbols);
          u8g2.drawGlyph(0, 15, 0x21d2); //Tällä tehdään lcd-valikossa näkyvä nuoli
          u8g2.drawStr(25, 15, "5 wire");
          u8g2.drawStr(25, 40, "4 wire");
        } while ( u8g2.nextPage() );
        sivu = 1;
      }

      if (5 < laskuri && laskuri < 10)
      {
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.setFont(u8g2_font_unifont_t_symbols);
          u8g2.drawGlyph(0, 40, 0x21d2); //Tällä tehdään lcd-valikossa näkyvä nuoli
          u8g2.drawStr(25, 15, "5 wire");
          u8g2.drawStr(25, 40, "4 wire");
        } while ( u8g2.nextPage() );
        sivu = 2;
      }
    }//Johtovalikko loppuu tähän

    //Päävalikosta seuraava. Kutistesukan kohdalle.
    if (alimenu == 2)
    {
      if (0 <= laskuri && laskuri < 5)
      {
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.setFont(u8g2_font_unifont_t_symbols);
          u8g2.drawGlyph(0, 15, 0x21d2); //Tällä tehdään lcd-valikossa näkyvä nuoli
          u8g2.drawStr(25, 15, "Paksu kutiste");
          u8g2.drawStr(25, 40, "Ohut kutiste");
        } while ( u8g2.nextPage() );
        sivu = 1;
      }

      if (5 < laskuri && laskuri < 10)
      {
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.setFont(u8g2_font_unifont_t_symbols);
          u8g2.drawGlyph(0, 40, 0x21d2); //Tällä tehdään lcd-valikossa näkyvä nuoli
          u8g2.drawStr(25, 15, "Paksumpi kutiste");
          u8g2.drawStr(25, 40, "Ohkaisempi kutiste");
        } while ( u8g2.nextPage() );
        sivu = 2;
      }
    }//Kutistesukkien valikko loppuu tähän
  }//Tähän loppuu valikot

  laskuriAiemmin = laskuri; //Tallennetaan viimeisin laskurin tila



  //Havaitaan encoderin napin painallus
  if (digitalRead(ENC_NAPPI) == LOW)
  {
    if (alimenu == 1)
    {
      if (sivu == 1)
      {
        alimenu = 0;
        laskuri = 1;
        painettu = 0;
        Ready = 0;
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.drawStr(10, 15, "Montako 5 wire");
        } while ( u8g2.nextPage() );
        delay(2000);
      }

      if (sivu == 2)
      {
        alimenu = 0;
        laskuri = 0;
        painettu = 0;
        Ready = 0;
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.drawStr(25, 15, "Montako 4 wire");
        } while ( u8g2.nextPage() );
        delay(2000);
      }
    }


    if (alimenu == 2)
    {
      if (sivu == 1)
      {
        alimenu = 0;
        laskuri = 1;
        painettu = 0;
        Ready = 0;
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.drawStr(10, 15, "Montako paksua");
        } while ( u8g2.nextPage() );
        delay(2000);
      }

      if (sivu == 2)
      {
        alimenu = 0;
        laskuri = 0;
        painettu = 0;
        Ready = 0;
        u8g2.clear();
        u8g2.firstPage();
        do {
          u8g2.drawStr(25, 15, "Montako ohutta");
        } while ( u8g2.nextPage() );
        delay(2000);
      }
    }


    if (alimenu == 0 && Ready == 1)
    {
      if (sivu == 1)
      {
        alimenu = 1;
        laskuri = 0;
        painettu = 1;
      }

      if (sivu == 2)
      {
        alimenu = 2;
        laskuri = 0;
        painettu = 1;
      }
    }//
  }

  //Minimi- ja maksimiarvot laskurille.
  if (laskuri > 20)
  {
    laskuri = 20;
  }
  if (laskuri < 0)
  {
    laskuri = 0;
  }
}


void enkooderi() {
  tila = digitalRead(ENC_DAT);

  //Onko tila muuttunut setupin jälkeen
  if (tila != tila_Aiemmin) {
    //Myötäpäivään
    if (digitalRead(ENC_CLK) != tila) {
      laskuri++;
    } else {
      laskuri--;
    }
  }
  tila_Aiemmin = tila; // Tallennetaan viimeisin tila
}


Joko valikkokoodi on edennyt?

Yksi helpohko tapa on antaa jokaiselle näytölle oma numero ja loopissa vain switch-case jossa näytetään oikea ruutu.
Tämän lisäksi tietyssä näytössä ollessa eteen/taakse/jonnekin vaikuttaa siihen mikä on seuraava ruutu johon mennään.
Navigoinnin voi hoitaa vaikka tauluko(i)lla josta löytyy nykyisen numerolla esim seuraava/edellinen jolloin switch-caset vähenee koodissa.
 
Joko valikkokoodi on edennyt?

Yksi helpohko tapa on antaa jokaiselle näytölle oma numero ja loopissa vain switch-case jossa näytetään oikea ruutu.
Tämän lisäksi tietyssä näytössä ollessa eteen/taakse/jonnekin vaikuttaa siihen mikä on seuraava ruutu johon mennään.
Navigoinnin voi hoitaa vaikka tauluko(i)lla josta löytyy nykyisen numerolla esim seuraava/edellinen jolloin switch-caset vähenee koodissa.

Ei ole edennyt ei. Helpottaakseni omaa elämää taidan heivata tuon rampsin mukana tulleen näytön enkoodereineen hevon kuuseen ja suosiolla hankin tilalle nextionin kosketusnäytön. Siihen ainakin näyttäisi löytyvän softaa millä valikon saisi rakennettua.
 
^ Nyt on stm32 blue pill käytössä, pari nappulaa ja i2c lcd-näyttö. Yritän näillä toteuttaa tuon ylempänä esittämäni idean... Jos jotakuta sattuu kiinnostamaan :rofl:
 
^ Nyt on stm32 blue pill käytössä, pari nappulaa ja i2c lcd-näyttö. Yritän näillä toteuttaa tuon ylempänä esittämäni idean... Jos jotakuta sattuu kiinnostamaan :rofl:

Päivittele ihmeessä miten projekti lähtee etenemään. Meinasitko napeilla siis ohjata valikkoa tällä kertaa?
 
Päivittele ihmeessä miten projekti lähtee etenemään. Meinasitko napeilla siis ohjata valikkoa tällä kertaa?
Joo ajattelin nyt ainakin aluksi käyttää nappeja valikossa liikkumiseen ja ohjaukseen, koska vaihtui tuo rampsin 128x64 lcd tuollaiseen 16x2 lcd-näyttöön. Tuossa rampsin näytössä on encoderi mukana. Otan mielelläni matskua ja tietoa vastaan jos joku osaa näyttää suuntaa hyvän valikkorakenteen toteutukseen.
 
Osaisko joku täällä vinkata miten saada Lolin Wemos Mini D1 Pro:n wifi toimimaan, kun käytössä on tällainen sketchi:

/*
* Contains code from:
* ESP8266 Remote Controlled Sockets | Random Nerd Tutorials
* bruhautomation.io
* Arduino - Sweep
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
* for the specific language governing permissions and limitations under the License.
*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <Servo.h>
#define WLAN_SSID "YOUR WIFI SSID" //change to your Wifi SSID
#define WLAN_PASS "YOUR WIFI PASSWORD" //change to your Wifi Password
MDNSResponder mdns;
ESP8266WebServer server(80);
int servoPin = 0; //Servo on GPIO0 or NODEMCU pin D3
const int buttonPin = 12; //manual button on GPIO12 or NODEMCU pin D6
int buttonState = 0;
int direction = 0;
int setting = 0; //Startup with blinds closed
int position = 90;
Servo servoA;
String webPage = "";
void setup(void) {
WiFi.mode(WIFI_STA);
webPage += "<h1>ESP8266 Web Server</h1><p>Blinds<br>";
webPage += "<a href=\"0\"><button>0</button></a><br>";
webPage += "<a href=\"10\"><button>10</button></a><br>";
webPage += "<a href=\"20\"><button>20</button></a><br>";
webPage += "<a href=\"30\"><button>30</button></a><br>";
webPage += "<a href=\"40\"><button>40</button></a><br>";
webPage += "<a href=\"50\"><button>50</button></a><br>";
webPage += "<a href=\"60\"><button>60</button></a><br>";
webPage += "<a href=\"70\"><button>70</button></a><br>";
webPage += "<a href=\"80\"><button>80</button></a><br>";
webPage += "<a href=\"90\"><button>90</button></a><br>";
webPage += "<a href=\"100\"><button>100</button></a><br>";
delay(1000);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
delay(500);
Serial.println("Blind Startup Sequence");
delay(500);
Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);
WiFi.begin(WLAN_SSID, WLAN_PASS);
// Set a static IP (optional)
//IPAddress ip(10,0,1,50);
//IPAddress gateway(10,0,1,1);
//IPAddress subnet(255, 255, 255, 0);
//WiFi.config(ip, gateway, subnet);
// End of set a static IP (optional)
delay(500);
int i = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
ESP.wdtFeed();
if (i > 40) // Try 40 times to connect to Wifi
Serial.print("Restarting Wifi"); ESP.reset(); // Reset Wifi stack if more than 40 trys
i++;
WiFi.begin(WLAN_SSID, WLAN_PASS);
// Set a static IP retry (optional)
//IPAddress ip(10,0,1,50);
//IPAddress gateway(10,0,1,1);
//IPAddress subnet(255, 255, 255, 0);
//WiFi.config(ip, gateway, subnet);
// End of set a static IP retry (optional)
}
Serial.println();
Serial.println("WiFi connected");
Serial.println("IP address: "); Serial.println(WiFi.localIP());
if (mdns.begin("esp8266", WiFi.localIP())) {
Serial.println("MDNS responder started");
}
server.on("/", []() { server.send(200, "text/html", webPage); });
server.on("/100", []() { server.send(200, "text/html", webPage); setting = 180; });
server.on("/99", []() { server.send(200, "text/html", webPage); setting = 180; });
server.on("/98", []() { server.send(200, "text/html", webPage); setting = 180; });
server.on("/97", []() { server.send(200, "text/html", webPage); setting = 171; });
server.on("/96", []() { server.send(200, "text/html", webPage); setting = 171; });
server.on("/95", []() { server.send(200, "text/html", webPage); setting = 171; });
server.on("/94", []() { server.send(200, "text/html", webPage); setting = 171; });
server.on("/93", []() { server.send(200, "text/html", webPage); setting = 171; });
server.on("/92", []() { server.send(200, "text/html", webPage); setting = 162; });
server.on("/91", []() { server.send(200, "text/html", webPage); setting = 162; });
server.on("/90", []() { server.send(200, "text/html", webPage); setting = 162; });
server.on("/89", []() { server.send(200, "text/html", webPage); setting = 162; });
server.on("/88", []() { server.send(200, "text/html", webPage); setting = 162; });
server.on("/87", []() { server.send(200, "text/html", webPage); setting = 153; });
server.on("/86", []() { server.send(200, "text/html", webPage); setting = 153; });
server.on("/85", []() { server.send(200, "text/html", webPage); setting = 153; });
server.on("/84", []() { server.send(200, "text/html", webPage); setting = 153; });
server.on("/83", []() { server.send(200, "text/html", webPage); setting = 153; });
server.on("/82", []() { server.send(200, "text/html", webPage); setting = 144; });
server.on("/81", []() { server.send(200, "text/html", webPage); setting = 144; });
server.on("/80", []() { server.send(200, "text/html", webPage); setting = 144; });
server.on("/79", []() { server.send(200, "text/html", webPage); setting = 144; });
server.on("/78", []() { server.send(200, "text/html", webPage); setting = 144; });
server.on("/77", []() { server.send(200, "text/html", webPage); setting = 135; });
server.on("/76", []() { server.send(200, "text/html", webPage); setting = 135; });
server.on("/75", []() { server.send(200, "text/html", webPage); setting = 135; });
server.on("/74", []() { server.send(200, "text/html", webPage); setting = 135; });
server.on("/73", []() { server.send(200, "text/html", webPage); setting = 135; });
server.on("/72", []() { server.send(200, "text/html", webPage); setting = 126; });
server.on("/71", []() { server.send(200, "text/html", webPage); setting = 126; });
server.on("/70", []() { server.send(200, "text/html", webPage); setting = 126; });
server.on("/69", []() { server.send(200, "text/html", webPage); setting = 126; });
server.on("/68", []() { server.send(200, "text/html", webPage); setting = 126; });
server.on("/67", []() { server.send(200, "text/html", webPage); setting = 117; });
server.on("/66", []() { server.send(200, "text/html", webPage); setting = 117; });
server.on("/65", []() { server.send(200, "text/html", webPage); setting = 117; });
server.on("/64", []() { server.send(200, "text/html", webPage); setting = 117; });
server.on("/63", []() { server.send(200, "text/html", webPage); setting = 117; });
server.on("/62", []() { server.send(200, "text/html", webPage); setting = 108; });
server.on("/61", []() { server.send(200, "text/html", webPage); setting = 108; });
server.on("/60", []() { server.send(200, "text/html", webPage); setting = 108; });
server.on("/59", []() { server.send(200, "text/html", webPage); setting = 108; });
server.on("/58", []() { server.send(200, "text/html", webPage); setting = 108; });
server.on("/57", []() { server.send(200, "text/html", webPage); setting = 99; });
server.on("/56", []() { server.send(200, "text/html", webPage); setting = 99; });
server.on("/55", []() { server.send(200, "text/html", webPage); setting = 99; });
server.on("/54", []() { server.send(200, "text/html", webPage); setting = 99; });
server.on("/53", []() { server.send(200, "text/html", webPage); setting = 99; });
server.on("/52", []() { server.send(200, "text/html", webPage); setting = 90; });
server.on("/51", []() { server.send(200, "text/html", webPage); setting = 90; });
server.on("/50", []() { server.send(200, "text/html", webPage); setting = 90; });
server.on("/49", []() { server.send(200, "text/html", webPage); setting = 90; });
server.on("/48", []() { server.send(200, "text/html", webPage); setting = 90; });
server.on("/47", []() { server.send(200, "text/html", webPage); setting = 81; });
server.on("/46", []() { server.send(200, "text/html", webPage); setting = 81; });
server.on("/45", []() { server.send(200, "text/html", webPage); setting = 81; });
server.on("/44", []() { server.send(200, "text/html", webPage); setting = 81; });
server.on("/43", []() { server.send(200, "text/html", webPage); setting = 81; });
server.on("/42", []() { server.send(200, "text/html", webPage); setting = 72; });
server.on("/41", []() { server.send(200, "text/html", webPage); setting = 72; });
server.on("/40", []() { server.send(200, "text/html", webPage); setting = 72; });
server.on("/39", []() { server.send(200, "text/html", webPage); setting = 72; });
server.on("/38", []() { server.send(200, "text/html", webPage); setting = 72; });
server.on("/37", []() { server.send(200, "text/html", webPage); setting = 63; });
server.on("/36", []() { server.send(200, "text/html", webPage); setting = 63; });
server.on("/35", []() { server.send(200, "text/html", webPage); setting = 63; });
server.on("/34", []() { server.send(200, "text/html", webPage); setting = 63; });
server.on("/33", []() { server.send(200, "text/html", webPage); setting = 63; });
server.on("/32", []() { server.send(200, "text/html", webPage); setting = 54; });
server.on("/31", []() { server.send(200, "text/html", webPage); setting = 54; });
server.on("/30", []() { server.send(200, "text/html", webPage); setting = 54; });
server.on("/29", []() { server.send(200, "text/html", webPage); setting = 54; });
server.on("/28", []() { server.send(200, "text/html", webPage); setting = 54; });
server.on("/27", []() { server.send(200, "text/html", webPage); setting = 45; });
server.on("/26", []() { server.send(200, "text/html", webPage); setting = 45; });
server.on("/25", []() { server.send(200, "text/html", webPage); setting = 45; });
server.on("/24", []() { server.send(200, "text/html", webPage); setting = 45; });
server.on("/23", []() { server.send(200, "text/html", webPage); setting = 45; });
server.on("/22", []() { server.send(200, "text/html", webPage); setting = 36; });
server.on("/21", []() { server.send(200, "text/html", webPage); setting = 36; });
server.on("/20", []() { server.send(200, "text/html", webPage); setting = 36; });
server.on("/19", []() { server.send(200, "text/html", webPage); setting = 36; });
server.on("/18", []() { server.send(200, "text/html", webPage); setting = 36; });
server.on("/17", []() { server.send(200, "text/html", webPage); setting = 27; });
server.on("/16", []() { server.send(200, "text/html", webPage); setting = 27; });
server.on("/15", []() { server.send(200, "text/html", webPage); setting = 27; });
server.on("/14", []() { server.send(200, "text/html", webPage); setting = 27; });
server.on("/13", []() { server.send(200, "text/html", webPage); setting = 27; });
server.on("/12", []() { server.send(200, "text/html", webPage); setting = 18; });
server.on("/11", []() { server.send(200, "text/html", webPage); setting = 18; });
server.on("/10", []() { server.send(200, "text/html", webPage); setting = 18; });
server.on("/9", []() { server.send(200, "text/html", webPage); setting = 18; });
server.on("/8", []() { server.send(200, "text/html", webPage); setting = 18; });
server.on("/7", []() { server.send(200, "text/html", webPage); setting = 9; });
server.on("/6", []() { server.send(200, "text/html", webPage); setting = 9; });
server.on("/5", []() { server.send(200, "text/html", webPage); setting = 9; });
server.on("/4", []() { server.send(200, "text/html", webPage); setting = 9; });
server.on("/3", []() { server.send(200, "text/html", webPage); setting = 9; });
server.on("/2", []() { server.send(200, "text/html", webPage); setting = 0; });
server.on("/1", []() { server.send(200, "text/html", webPage); setting = 0; });
server.on("/0", []() { server.send(200, "text/html", webPage); setting = 0; });
server.begin();
Serial.println("HTTP server started");
}
void loop() {
buttonState = digitalRead(buttonPin);
if(buttonState == LOW && setting <= 180 && direction == 0){
setting++;
delay(0);
if(setting == 180){
direction = 1;
}
}
if(buttonState == LOW && setting >= 0 && direction == 1){
setting--;
delay(0);
if(setting == 0){
direction = 0;
}
}
if(position < setting){
servoA.attach(servoPin);
servoA.write(position++);
delay(5);
Serial.print("Setting: ");
Serial.println(setting);
Serial.print("Position: ");
Serial.println(position);
}
if(position > setting){
servoA.attach(servoPin);
servoA.write(position--);
delay(5);
Serial.print("Setting: ");
Serial.println(setting);
Serial.print("Position: ");
Serial.println(position);
}
if(position == setting){
servoA.detach();
}
server.handleClient();
}

Jostain syystä tätä sketchia käyttäen yrittää yhdistää wifiin, mutta jää looppaamaan uudelleen ja uudelleen eikä ikinä yhdistä. Kokeilin toista sketciä, missä kortti yhdistetään pelkästään wifiin eikä tehdä mitään muuta, ja tämä toimii. Tästä päätellen ylös pastatussa sketchissä on joku ongelma wifiin liittyen.
Kun olen aloittelija, niin en pääse kuollaksenikaan ymmärrykseen, että mitä pitäisi tehdä tai mistä edes pitäisi lähteä liikkeelle.
Olen sketchiin vaihtanut oman SSID:n ja salasanan hipsujen sisällä. Mitään muuta en ole tehnyt. Osaisiko joku vinkata mistä tässä edes tulisi selvitystyö aloittaa?
 
Pikavilkaisulla ja testaamatta sanoisin että riviltä 76 alkaen (copy-pasten jälkeen spoilerista) puuttuu if- lauseen aaltosulkeet.

Koodi:
if (i > 40) // Try 40 times to connect to Wifi
Serial.print("Restarting Wifi"); ESP.reset(); // Reset Wifi stack if more than 40 trys

pitäisi varmaan olla
Koodi:
if (i > 40) { // Try 40 times to connect to Wifi
    Serial.print("Restarting Wifi");
    ESP.reset(); // Reset Wifi stack if more than 40 trys
}

Ilman sulkeita 40. yritys tulostaa vain "Restarting wifi" ja ESP.reset(); tehdään joka kierroksella.
 
Kiitos vinkistä. Kävin kokeilemassa tuon vaikutusta, compile menee nätisti nytkin läpi, mutta jumittaa edelleenkin. Tosin nyt mielestäni pykälää pidemmällä.
Alunperin monitorin mukaan tämä jäi kohtaan:

Connecting to Wlani Blind Startup Sequence
sitten mystisiä merkkejä (ei selkokielistä kunnes uudelleen rivi
Connecting to Wlani Blind Startup Sequence

Nyt muutoksen jälkeen tämä looppaa "Restarting wif (erikoismerkit) kohdassa seuraavasti:


............Restarting Wifb⸮⸮8⸮⸮D`)Blind Startup Sequence

Connecting toWlani
..........................................Restarting Wif)1⸮)⸮@⸮9Blind Startup Sequence

Connecting to Wlani
..........................................Restarting Wif⸮%⸮⸮R⸮@⸮9Blind Startup Sequence

Connecting to Wlani

Tuolla on varmaan paljon nyt muutakin mikä mättää. Ja sketchin piti mahdollistaa kaihtiminen kääntäminen, mutta törmäsin jo ihan alkeellisen luokan wifi-ongelmaan.
 
Tekisin ehkä suoriltaan oman funktion wifiin yhdistämiselle, jos sitä main loopissakin sattuu tarvitsemaan. Toki saman voi leipoa setuppiinkin suoraan.

Tyyliin:
C++:
bool initWIFI() {
    WiFi.mode(WIFI_STA);
    Serial.print("Connecting to ");
    Serial.println(WLAN_SSID);
    WiFi.begin(WLAN_SSID, WLAN_PASS);

    unsigned long startmillis = millis();
    while (millis() - startmillis <= 10000) {
        if (WiFi.status() == WL_CONNECTED) {
            Serial.println("WIFI Connected.")
            return true;
        }
        delay(500);
        Serial.print(".");
        ESP.wdtFeed();
    }
    Serial.println("Connection failed.");;
    return false;
}

Ongelmana tuossa alkuperäisessä taitaa olla se että 0,5 sek yhdistämisen jälkeen kysellään statusta. Jos ei ole yhdistänyt yhdistetään uudelleen ja sama rumba jatkuu. Yhdistämiseen ja statuksen päivityymiseen saattaa kuitenkin mennä kauemmin.

Edit. Tuo ylläoleva toki yritää yhdistämistä vain kerran ja odottelee 10 sek josko se onnistui. En näe varsinaisesti syytä miksei onnistuisi jos verkko on kunnossa, mutta sen voi tietenkin lisätä jonkin loopin sisään jos tarpeelliselta vaikuttaa.
 
Ainakin omat esp:t tippuu välillä verkosta ja jos aikoo pitää niitä jatkuvasti päällä jokin reconnect- logiikka on syytä toteuttaa. Minulla on 2 jatkuvasti ulkona ja reconnecteja tulee jonkin verran.

Ne oudot merkit sarjaporttiin tulee siitä että käynnistyksessä esp:n firmware tulostaa porttiin jotain eri nopeudella kuin sitä käytetään. Omissa se on aina ollut 57600.
 
Mun mielestä tossa ongelmallisessa sketchissa on jotain pykälää kummempaa pakko olla, kun tällä alla olevalla sketchilla wifiin yhdistäminen onnistuu suoraan ja heti:

#include <ESP8266WiFi.h>

void setup()
{
Serial.begin(115200);
Serial.println();

WiFi.begin("network-name", "pass-to-network");

Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();

Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
}

void loop() {}

jos nimenomaan tällä korvaisi tuon ongelmallisen wifi-kohdan kokonaan. En vain ymmärrä kun tuolla on parikin kohtaa missä mainitaan näitä wifiin liittyviä kirjastoja ja niihin liittyviä askareita. Askareista tulee paskareita kun alan lähmimään. :)
 

Statistiikka

Viestiketjuista
258 248
Viestejä
4 490 997
Jäsenet
74 171
Uusin jäsen
äänihaitta

Hinta.fi

Back
Ylös Bottom