tijdschakelaar

Arduino specifieke Software
Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: tijdschakelaar

Berichtdoor wim2584 » 22 Okt 2016, 19:30

met de nieuwe IDE 16.12, alles ok ;)

ik zal eea aan een display hangen (LCD of Oled) en proberen werkend te maken.

code zal ik ook goed bestuderen, voordat ik zo ver ben met programmeren zal ik er nog veel tijd in moeten steken.

maar stukken code zijn ook goed bruikbaar in andere projecten..

groet Wim

Advertisement

Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: tijdschakelaar

Berichtdoor wim2584 » 24 Okt 2016, 20:30

de code werkt prima met serial.print maar ik wil er (natuurlijk) een display op hebben,

Het standaard LCD 16x2 valt een een beetje af, maar 2 regels en te weinig characters, ben voor een Oled 0.96 "display gegaan.

maar toch nog toe gebruikte ik deze (van Ebay afkomstige Oleds) met:



/* test Oled programma Wim 23-10-2016
*/

#include <Wire.h>
#include <U8glib.h>

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // I2C protocol


void setup()
{
u8g.setFont(u8g_font_unifont);
u8g.setColorIndex(1); // Instructs the display to draw with a pixel on.
//u8g.setRot90(); // when needed rotate
}
void loop() {

{
u8g.firstPage();
do {
u8g.setPrintPos(16, 10); //Set x,y location for print function
u8g.print("Test hallo");

u8g.setPrintPos(20, 30); //Set x,y location for print function
u8g.print("Test wim");
} while
( u8g.nextPage() );
}

delay (1000);

}

dit werkt goed, maaar deze in jou code?

dan heb ik problemen met showeverthing(); en (heb eea geprobeerd) :

Serial.print(F( "Accu ")); // dit wordt goed getoond
Serial.print( i == 0 ? "A" : "B"); // dit geeft a/b/a/b/a/b/ steeds wisselend met iedere run code, waarom wel "vast in serial print?
Serial.print(F( " : ")); // dit gaat ook goed


volgens mij geeft :

sprintf( buffer, " %d days, %02d:%02d:%02d", days, hours, minutes, seconds);
Serial.print( buffer);

de eerder gedeclareerde tij in days en h:m: s

maar hoe is dat aan het Oled display vertel ? (eea geprobeerd maar krijg 0 days 00:0:00 op display , Zonder wijziging...

wat doe je precies met:

sprintf (en werkt dit ook bij een display?

groet WIM

Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: tijdschakelaar

Berichtdoor wim2584 » 24 Okt 2016, 21:02

nog geprobeerd met:
{
u8g.firstPage();
do {
if (digitalRead (2) >= 1)
{
u8g.setPrintPos(16, 10); //Set x,y location for print function
u8g.print("LADEN");
}
} while
( u8g.nextPage() );
}

dit werkt en zou ik voor alle variabele kunnen maken

Maar dan ben ik outputs aan het lezen, dit word echter ontrade door Koepel en nicovanduin hoe kan ik het beter doen ???

Display is een: Oled 0,96" 128 x 64 monochroom I2C (de library's : #include <Wire.h> en #include <U8glib.h> werken goed , maar zijn erg gecompliceerd :| )

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: tijdschakelaar

Berichtdoor Koepel » 24 Okt 2016, 21:57

Je kunt gerust een output lezen, als je dat liever doet.
Met een software pet op, is het zo dat de sketch al weet wat of de uitgang HIGH of LOW is, omdat de sketch die zelf heeft gezet.

Begin met een voorbeeld van de U8glib die tekst op het scherm zet.
Hou dat gescheiden van de rest. Bijvoorbeeld door het afbeelden van de tekst in de functie 'draw()' te stoppen.
Code: Alles selecteren
u8g.firstPage(); 
  do {
    draw();
} while( u8g.nextPage() );


De sprintf() bouwt de tekst in een buffer, dus die buffer kun je naar het display sturen in plaats van naar de seriële monitor.
Maar je hoeft sprintf() niet te gebruiken.

Welke library gebruik je ? U8glib of U8g2 ? En hoe heb je die geinstalleerd ? Via de Library Manager ?

Een 16x2 LCD display kan volgens mij ook. Je kunt er een paar zelfgemaakte tekens aan toevoegen, en korte tekst.

Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: tijdschakelaar

Berichtdoor wim2584 » 24 Okt 2016, 22:22

Ik gebruik u8glib en instal via llibrary.
Weer eea bijgeleerd, zit nog wel met de verstreken tijd dit kan ik nl. Niet van de output lezen ..,moet het toch zoiets als jij di et met serial print?

Ik zal morgen er nog verder naar kijken niet te moeilijk voor het slapen.... straks j an ik er niet van slapen

Jij nog bedankt voor je (Eindeloos geduld met zo een leek als ik met programmeren. ..)

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: tijdschakelaar

Berichtdoor Koepel » 24 Okt 2016, 22:58

Ik zit te kijken naar U8g2. Dit zijn de verschillen : https://github.com/olikraus/u8g2/wiki/u8gvsu8g2
Hier introduceert olikraus de U8g2 : https://forum.arduino.cc/index.php?topic=409966.0
De do-loop voor een scherm update die de U8glib nodig heeft om het ramgebruik te beperken is niet meer nodig. Maar het lijkt er op dat er meer geheugen nodig is: "Requires some memory in the microcontroller to render the display". Het is echter wel eenvoudiger in gebruik.

Een LCD display is eenvoudiger. De U8glib of U8g2 is echt een stap ingewikkelder.

Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: tijdschakelaar

Berichtdoor wim2584 » 29 Okt 2016, 21:21

Wie wil me verder op weg helpen?

heb nu geprobeerd met een Oled en U8glib en U8g2 library, krijg diverse informatie op scherm, maar tot op heden niet goed , ook het gebruik van Delay en de library ? geeft veel vertraging waardoor het lang duurt voordat op een input gereageerd wordt?

ben toen overgegaan naar een LCD, (16x2 en evt 16x4) beide I2C maar ook hier loop ik vast, met name het wisselen van accu A en B en dan daarbij de juiste info geven ( bv Accu: A Charging 0 days 00:00:00, en dan wissel naar Accu B ) lukt mij niet ,

nu heb ik weinig programmeer kennis, en het specifieke gebruik van bv. een Oled maakt het allemaal niet gemakkelijk.....

"KOEPEL" heeft mij uitstekend geholpen met de code (pag 3) , maar gebruikt voor mij ook hele moeilijk te begrijpen dingen (twee timers in 1 code, showeverything, enz).

ik heb al meerdere projecten afgerond ook met LCD en Oled , maar dit lijkt (nu nog) toch te moeilijk , de timer leek zo eenvoudig

Groet Wim

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: tijdschakelaar

Berichtdoor nicoverduin » 29 Okt 2016, 21:58

Dit is typisch een geval van eerst doen en dan denken. Je had (en kan nog steeds) eerst een concept diagram kunnen maken van de verschillende bouwstenen die je nodig hebt. Koepel geeft daar al een hele goede aanzet toe door de problematiek uit elkaar te trekken:
- Een blok wat elke seconde moet plaats vinden
- een blok die alle knoppen even afloopt
- een blok die alle informatie op het scherm toont.
En 95% (vermoedelijk) van de tijd doet die processor eigenlijk niets. Niks mis mee. Alleen die dingen doen wanneer je ze moet doen.
En het mooie is dat als je naar het uiteindelijke plaatje kijkt kun je die blokken individueel ontwikkelen en testen zonder afbreuk te doen.
Maar er horen nog meer blokken in het concept diagram. Je hebt laders die moeten iets doen, hoelang, wat zet ze aan. Door dit soort dingen vooraf voor te bereiden en aan de community kenbaar te maken begrijpt iedereen waar je naartoe wilt. En is er nog een regel code geschreven.
Een beetje efficiënte loop draait 10000x per seconde dus snel genoeg om alles te doen zonder waarneembare vertraging.
Maar je moet het probleem eerst uit elkaar trekken zodat je het zelf ook nog kan volgen.
Eerst denken en dan doen....
En doe ermee wat je wilt.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: tijdschakelaar

Berichtdoor wim2584 » 29 Okt 2016, 22:22

Je hebt natuurlijk gelijk Nico,

maar eea is snel begonnen, door de (zeer gewaardeerde hulp) van Koepel, ben ik uiteindelijk heel ergens anders terecht gekomen, eigenlijk heel goed, want ik denk dat dit de manier is iets verder met programmeren te komen.
de Code van koepel doet eigenlijk precies wat ik wil, maar er ontbreekt de bling-bling.., het is toch wel handig / leuk als je kan volgen wat er gebeurd op een display.
in de serial monitor werkt het ook goed, maar deze info op een display zetten (en dat is mijn hulp vraag) , geeft problemen, door het nl. verkeerd aan te pakken breng ik ontoelaatbare delays in de code waardoor het eea slecht reageerd.

in de gangbare literatuur vind ik heel veel (waarschijnlijk veel te veel) info om het 0.96 " Oled de juiste info te laten geven, maar doordat de code 2 timers heeft lukt het niet deze separaat weer te geven.

met het LCD display gaat het allemaal een stuk makkelijker maar ook daar het probleem van 2 timer (en dus dubbele informatie) , op 1 display.

het in blokken zetten (wat ik wel gedaan heb in klad), help mij nu nog niet de juiste info bij de juiste loop.

void ShowEverything()
{
Serial.println(F( "----------------------------------"));

for( int i=0; i<2; i++)
{
Serial.print(F( "Accu "));
Serial.print( i == 0 ? "A" : "B");
Serial.print(F( " : "));

if( battery_state[i] == WAIT)
Serial.print( "Waiting ");
else if( battery_state[i] == CHARGE)
Serial.print( "Charging");
else
Serial.print( "Error");

// Show the counter in days,hh:mm:ss
int days = (int) (battery_count[i] / (24UL * 60UL * 60UL));
int hours = (int) ((battery_count[i] / (60UL * 60UL)) % 24UL);
int minutes = (int) ((battery_count[i] / (60UL)) % 60UL);
int seconds = (int) (battery_count[i] % 60UL);

// A sprintf with formatting is easer
char buffer[40];
sprintf( buffer, " %d days, %02d:%02d:%02d", days, hours, minutes, seconds);
Serial.print( buffer);

Serial.println();
}

groet Wim

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: tijdschakelaar

Berichtdoor Koepel » 29 Okt 2016, 23:09

En die functie had ik nu juist gemaakt om structuur van de code schoon te houden :?
Dus een functie die iedere seconde de status weergeeft, en los staat van de rest.
Over die functie schreef ik al "...daar heb ik zomaar wat aangerommeld", en als ik zomaar wat aan zit te rommelen, nou nou :twisted:

Kun je een tekening maken van hoe het LCD display er uit zal zien. Dus 16x2 blokjes en wat waar komt te staan. Zet het maar op papier of computer en laat het zien. Je kunt ook nog een paar eigen tekens definiëren.
Een OLED display vind ik ook veel mooier. Maar als iets niet werkt, dan kun je beter op iets terug vallen dat eenvoudiger is.

Vervolgens de code zelf, dat is de informatie bij elkaar vergaren en aanpassen zodat het netjes op het display staat. Daar helpen we je natuurlijk bij.

VorigeVolgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: abibitehoaqic en 22 gasten