Hoe het beste programeren ond er de knie te krijgen

Hallo ,

Als modelbouwer zocht ik een probleem voor iets , iemand wees me op Arduino. Ik ben erg onder de indruk. Afgelopen week heb ik een 6-tal boeken doorgelezen, de meeste gaan over het basis programmeren van de arduino. De codes in een programma begrijp ik inmiddels redelijk , maar om zelf iets te schrijven vanaf nul ... ja hallo ... dat gaat nog ff niet lukken , maar dat is wel het doel.

Mijn vraag is , wat is de juiste manier om C++ , maar dan het relevante gedeelte voor Arduino onder de knie te krijgen?

Meteen een vraagje, ik ben een aantal keren het woord Boolean tegengekomen, ook in 3D tekenen kom ik het tegen , alhoewel ik weet wat het ongeveer zou moeten betekenen, zou ik graag willen weten wat de exacte betekenis is.

edit : ik heb de boeken "Programming Principles and Practice Using.C++" van Bjarne Stroustrup en "Ivor Horton's Beginning Visual C++ 2010" ... is dat een goede start , of ben ik helemaal verkeerd?

bedankt ,
Cor

hoi,

Ik kom bool vaak tegen bij het programmeren van plc´s .
Hier betekend het iets dat een 1 of een 0 kan in of uitgeven.
Dus een contact dat hoog of laag kan worden .
Nu weet ik niet of het identiek is aan wat je bij arduino kan ingeven.

groeten pieter

bool komt van boolean, een logische waarde die true of false kan zijn waarbij de waarde 0 false is en alles wat niet 0 is is true.

Pieter heeft gelijk, heel vaak worden 0 en 1 gebruikt, maar zoals boven gezegd andere waarden kunnen ook.

boolean expressies zie je terug in condities bv x<10

if (conditie) ....
while (conditie)...

je kunt een conditie aan een boolean var toekennen

bool b = (x<10);
if (b) ...

en er ook mee rekenen

bool b = b1 ^ b2; // ^= xor, & = and, | = or

Note: soms kom je de constructie tegen (in C)

bool b = !!(x);

dit is een dubbele not die ervoor zorgt dat de waarde van de boolean b zeker 1 is, als x de waarde true heeft (indien als boolean geinterpreteerd)

robtillaart:
bool b = !!(x);

dit is een dubbele not die ervoor zorgt dat de waarde van de boolean b zeker 1 is, als x de waarde true heeft (indien als boolean geinterpreteerd)

He die kende ik niet.
Jaren C++ gedaan en toch weer iets geleerd dat aan een beginner uitgelegd wordt.
Met vriendelijke groet.
Jantje

@Cor
terugkomend op je titel vraag,

ik heb zelf Arduino leren programmeren door de eerste paar weken alle voorbeelden op de tutorial pagina na te bouwen die ik kon met de elektronica die ik had. Doen dus, fouten maken, voltmeter kopen, lezen, nog meer fouten maken, grenzen opzoeken bv de snelheid van analogread() bepalen, lezen, soldeerbout kopen, nog meer sensoren en breadboards bestellen, LCD opblazen, forum afstropen, I2C leren, fouten maken, lezen, LED opblazen, interrupts, etc . En na een paar weken ga je heel voorzichtig een eerste antwoord posten omdat je iets terug kunt doen naar het forum. EN dan weer bouwen en lezen en bloemen kopen voor de vrouw :wink:

Kortom, lezen is zilver, maar bouwen is goud!

@Jantje

bool b = !!(x);
...
He die kende ik niet.

voor meer zie ook - http://www.amazon.de/Hackers-Delight-Henry-S-Warren/dp/0321842685/ -
ik heb 1st edition al een paar jaar op grijphoogte staan, ben wel benieuwd naar de aanvullingen van 2nd edition

en deze - Bit Twiddling Hacks - (wat goedkoper)

Ik heb inmiddels al een heleboel boeken over Arduino en "dingen" maken doorgelezen, nog niets zelfs gemaakt. Ik hoop dat de Arduino Uno en starterspakket komende week binnenkomt.
Het bouwen van de hardware en "copy-paste" van code , daar zie ik niet tegenop , de meeste code die ik in de boeken tot nu toe heb gelezen is me redelijk duidelijk en ik snap wat het doe.

Maar om vanaf 0 iets zelfs te gaan schrijven , ik heb het gevoel dat deze boeken me daarmee niet veel op weg helpen.

Ik heb nu een beginnetje gemaakt met het boek "Programming Principles and Practice Using.C++" van Bjarne Stroustrup". Ik hoop dat het te doen is met zelf studie zonder voorkennis van programmeren. Het doel is om zelf iets te kunnen programmeren , zonder copy-paste te gebruiken :slight_smile:

Gelukkig heb ik op zich tijd om er een studie bij te pakken... eens kijken wat het gaat geven de komende maanden.

Cor

Maar om vanaf 0 iets zelfs te gaan schrijven , ik heb het gevoel dat deze boeken me daarmee niet veel op weg helpen.

Waar jij op doelt is analysis & design / ontwerpen.

Pen en papier (whiteboard!) is belangrijkste gereedschap, teken de sensoren en de hardware die je denkt nodig te hebben.

  • Teken de connecties. Gebruik kleurstiften om bv =5V lijntjes rood en GND zwart te maken. I2C heeft weer eigen kleuren
    // stiften 5 eur bij de hema, kun je vandaag nog halen, met een schrijfblok zodat je al je schetsen makkelijk bewaard.

Hetzelfde kun je doen voor software. makkelijkste in het begin in top down

  • beschrijf op hoofdlijnen je programma
setup:
initialiseer seriele poort
initialiseer poorten voor sensoren, leds en ventilator
initaliseer sensoren

loop:
lees temperatuur 
lees humidity
bereken dauwpunt
als dauwpunt > temperatuur dan zet ventilator aan
als dauwpunt < temperaturr zet ventilator uit

uit deze tekst destileer je je hulp functies

float t = getTemperature();
float h = getHumidity();
float dew = calcDewPoint(t, h);

duik in de functies op een gelijke manier

getTemperature:
1) lees analoge poort
2) reken om vaar volts
3) zoek op in tabel volts naar temeratuur
4) return de waarde

OP dit moment krijg je het gevoel dat kan ik wel coderen. Dan moet je dat doen.

En als je dan de functie getTemperature() geschreven hebt maak je een testsketch om de functie te testen

void setup()
{
  serial.begin(115200);
}
void loop()
{
    float t = getTemperature();
    Serial.println(t,1); // 1 decimal 
    delay(100); // optional;
}

de dewpoint functionheeft een zwaardere test nodig

void testDewPoint()
{
  for (int i=0; i<10; i++)
  {
    float d = calcDewPoint(temp[i], hum[i]);  // you need to prepare a test table with values from a reference source
    if (abs(d - dew[i]) > 0.1) 
    {
      Serial.print(d);
      Serial.print("<>");
      Serial.print(dew[i]);
      Serial.println();
    }
  }
}

Dit is best veel werk dat testen, maar je zorgt hiermee dat je de bouwblokken van je programma tot op zeker nivo vertrouwd.

Voor complexere programmas:

Het leuke van documenteren is dat je over een paar maanden een schrijfblok vol hebt over hoe je hebt leren ontwerpen en zo.
sofar 2 cents