Jan

Jan

Mijn Arduino code werkt niet. Hoe komt dat nou?

Over mijPosted by Jan Fri, April 27, 2012 20:22:39
Arduino is een prachtig stukje speelgoed. Als je als noob met de Arduino begint zie je al snel heel wat mogelijkheden. En ja die zijn er echt wel. Maar als je dan begint met je eigen projectje te coderen/solderen; lukt het meestal niet zo goed. Hoe komt dat nou? Vraag je je dan af.

Ja hoe komt dat nou? (zucht de ervaren Arduinoer)smiley

Laat mij een poging doen om daar een zinnige uitleg over neer te pennen.

Wat de meeste noobs (en zelf heel wat ervaren Arduinoers) niet beseffen is hoe goed het Arduino team er in geslaagd is om iets dat heel moeilijk is, makkelijk te maken (of is het "laten blijken").

En daardoor komt het. smiley.........

Ja, echt waar.............smiley

......... Daar ben je niet veel mee, he?

Laten we eerst even duidelijk maken hoe moeilijk het wel niet is om te doen wat je met je Arduino wil doen, maar dan zonder Arduino.

1) Je neemt een PIC (Programmable Integrated Cirquit).
2) Je neemt een PIC programmer (hiermee programmeer je een PIC)
3) Neem een hoop elektronische componenten waaronder een 555 (zie andere post) een USB poort, een crystal, een voedings stabilisator.
4) Lees en begrijp van al die componenten de datasheets
5) Ontwikkel en print een PCB waar je al deze componenten kan op plaatsen en verbinden.
6) Schrijf een bootloader (of gebruik een bestaande voor je PIC).
7) Schrijf een hele hoop libraries.
8) En nu heb je iets wat op de Arduino lijkt.
9) Dus nu neem je de elektronische/mechanische/elektrische componenten die je nodig hebt voor je project.
10) Lees van al deze componenten de datasheets.
11) Maak een PCB die je kan verbinden met je eerste PCB
12) Schrijf code voor je project

En het werkt niet....... Hoe komt dat nou?

Ja hoe komt dat nou? (zucht de ervaren Arduinoer)smiley

Arduino heeft dit heel wat makkelijker gemaakt. Maar natuurlijk blijven er nog wat voorschriften over. Vergelijk het met je vriend(inne)tje smiley. Je ziet hem/haar graag, je kan er leuke dingen mee doen, maar sommige zaken moet je mee opletten. Zoals bijvoorbeeld andere vriend(inne)tjes smiley.

Laten we even een veel voorkomend probleem van noobs als voorbeeld geven.

De noob denkt “Ik neem een arduino, Ik sluit daar een motor/led/camera op aan en ook men PC. Dan kan ik commando’s naar men PC sturen en van men PC naar de motor/led/camera. En dan kan ik ..................”

En dan begint de noob code te schrijven voor de Arduino die commando’s als “Zet de flits aan” en “trek een foto” en “Draai de camera [XX] graden [horizontaal/verticaal]” moet ontvangen en die ............ niet werkt.

Hoe komt dat nou?

Ja zucht de ervaren Arduinoersmiley; dat komt omdat je code schrijft in C*. C is een taal die gemaakt is om nauw met processors te kunnen samenwerken. Processors werken goed met gehele getallen maar niet met strings. Je zegt dus niet tegen de processor “Zet de flits aan” maar digitalwrite(2,HIGH); En HIGH is eigenlijk 1.

Zo zou je “Draai de camera [XX] graden [horizontaal/vertikaal]” kunnen vertalen in

If (Horizontal)
{
digitalwrite(3;CurHorizontalValue+XX); //Zeg de servo op pin 3 die horizontaal beweegt dat hij XX moet draaien
}
Else
{
digitalwrite(4;CurVerticalValue+XX); //Zeg de servo op pin 4 die verticaal beweegt dat hij XX moet draaien
}

Maar hoe kom je nu van “Draai de camera 20 graden verticaal” naar

Horizontal = false;
XX = 20?

Dat kan je doen. Maar dat is niet zo makkelijk. Het is heel wat makkelijker als je het als volgt zegt:

H1
D20

H1 betekend dan horizontaal is true

D20 betekend dan : draai 20 graden.

Dit lukt zolang je voor elk commando 1 uniek character kan verzinnen.

Met deze methode kan je een spatie gebruiken om de commando’s te onderscheiden. En dan wordt “H0 D30 F1 P3” “30 graden verticaal draaien en 3 foto’s trekken met flits”

onderaan vind je de code

Veel plezier ermee

Jantje

Arduino programmeer je eigenlijk in Wiring. Maar in grote lijnen in dat C/C++. C en C++ zijn 2 talen die nauw verwant zijn. De meeste code die je de eerste weken zal schrijven zal in C zijn. Behalve als je String gebruikt.


/*
read command from Serial
Language: Wiring/Arduino

This program reads an ASCII character directly followed by a space from the serial port and converts it in a variable.

The circuit:
No circuit needed (only seria port communication

Created 27 April 2012
by Jan Baeyens

This example code is in the public domain.
*/

boolean Flash = false; //Do you want to use the flash when taking photo's
boolean Horizontal = true; //Do you want to turn Diagonal or Horizontal
int DegreesToTurn = 0; // How many degrees do you want to turn
int NmberOfPhotosToTake = 0; // How Many photo's do you want to take
char IncommingCharacters[10]; //This is a local buffer. You should not send messages with more than 9 characters
int ReceivedCharacters=-1; // Contains the number of characters in IncommingCharacters

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

void loop()
{
if (Serial.available() > 0) //Something arrived so do something
{
IncommingCharacters[++ReceivedCharacters] = Serial.read(); // get incoming byte:
// Serial.print("received ");
// Serial.println(IncommingCharacters[ReceivedCharacters]);
if ((IncommingCharacters[ReceivedCharacters] == ' ')
| (IncommingCharacters[ReceivedCharacters] == '\n')
| (IncommingCharacters[ReceivedCharacters] == '\r'))
{
// Serial.println("Command end\n");
if (ReceivedCharacters > 0)
{
switch (toUpperCase((IncommingCharacters[0]))) // IncommingCharacters[0] means the first received character.
{ //note that the characters after case need to be single quotes
case 'F': Flash= atoi( IncommingCharacters+1); break;// IncommingCharacters+1 means the string without the first character
case 'H': Horizontal= atoi( IncommingCharacters+1); break;
case 'D':DegreesToTurn= atoi( IncommingCharacters+1); break;
case 'P':NmberOfPhotosToTake= atoi( IncommingCharacters+1); break;
break;
default:
Serial.print("Non recognized character received: ");
Serial.println( IncommingCharacters);
Serial.print("Use F H D P followed by a value and space\n");
Serial.print("For instance H45\n\n");
break;
}
Serial.print("New Values");
Serial.print("\nFlash = ");
Serial.print(Flash);
Serial.print("\nHorizontal = ");
Serial.print(Horizontal);
Serial.print("\nDegreesToTurn = ");
Serial.print(DegreesToTurn);
Serial.print("\nNmberOfPhotosToTake = ");
Serial.println(NmberOfPhotosToTake);
}
ReceivedCharacters = -1; // reset the pointer
memset(IncommingCharacters,0,10); //reset the memory
}
}
}

Arduino plugin

Over mijPosted by Jan Sat, November 05, 2011 23:55:55
Er zijn zo van die gelukkige dagen in men leven. Zo van die dagen dat je iets vindt waardoor je eindelijk kan doen wat je daarvoor wel wou doen maar onmogelijk leek.Een paar jaar geleden had ik zo een dag. Zoekend op het David forum voor 3D scanning informatie las ik een artikeltje over Arduino. Arduino heeft mij toen gelukkig gemaakt. Om uit te leggen waarom dat zo was moet ik je iets meer over mezelf vertellen. Ikzelf ken wel wat van elektronica maar het wat gevorderde werk moet ik aan mij laten voorbijgaan. Dit schrijf ik allemaal toe aan de 555 timer IC. Een IC (Integrated circuit) is een zwart doosje met veel pootjes op de borden die in elektronica apparatuur zit. Zo een IC is op zich al een heel complexe elektronische schakeling. Noem het elektronica voor luie mensen of SMART gebruik van kennis en ervaring. Feit is; er zijn heel veel IC's. Teveel voor mij. Maar een 555 IC staat op bijna elke kaart. Zo een IC wordt gebruikt om een gewone stroom die lekker van positief naar negatief stroomt te veranderen in pulsjes. Door die pulsjes gaat alles zich anders gedragen. Bijna als een computer. Een beetje te moeilijk voor mij. Elektronica leek dus onmogelijk wegens pulsen en teveel IC's. En dan is daar Arduino.Arduino is een kaartje met een PIC op. Tja hoor ik je zeggen; ik heb zoveel kaartjes met een foto op. Neen neen PIC ...... niet picture. PIC staat voor Programmable Integrated circuit. Een hele mond vol dus maar je kan het ook stellen als een programmeerbare IC. Dus geen IC met een heel specifiek doel maar een programmeerbare die je kan laten doen wat je wilt smiley. Als die PIC doet wat jij wilt; dan de elektronica er rond ook. De elektronica rond zo een PIC kan heel eenvoudig zijn. Met een 20 tal schakelingen kom je al heel ver. 20 schakelingen dat kan ik wel aan smiley. PIC's vind je al lang op de markt dus daar is eigenlijk niks nieuws aan. Denk maar aan het uploaden van nieuwe software op je IPhone of IRouter. Allemaal voorbeelden van nieuwe programma's voor PIC's.Dus zo een PIC kan je programmeren en is elektronica. Van Programmeren heb ik wel kaas gegeten dus komt de electronica weer in mijn bereik.Maar hoe krijg je nu een programma op zo een PIC? Vroeger kwam daar elektronica of dure software aan te pas. En hoe stuur je zo een PIC aan? Ja daar komt een 555 bij te pas.smileyVroegersmiley. Want nu is er Arduino. Arduino is een kaartje met een PIC op met alles erbij om de PIC te kunnen programmeren en te gebruiken. Arduino maakt het mogelijk om op je PC een programma te schrijven en te downloaden via de USB naar de PIC. Alle pootjes van de PIC zijn dan weer beschikbaar zodat je makkelijk een sensor of motortje kunt aanschakelen.Ja de dag dat ik Arduino leerde kennen was één van de vele gelukkige dagen in men leven. Vandaag schrijf ik dit artikeltje omdat er een vervolgje is. Vandaag publiceerde ik men eerste eclipse plugin om een Arduino te programmeren. Je kan de plugin installeren via install new software in eclipse met de url http://www.baeyens.it/eclipse/update site/. Meer daarover kan je in het engels lezen op http://eclipse.baeyens.it En nu kan ik eindelijk verder genieten van men tuinsmileyJan

Welkom op m'n site

Over mijPosted by Jan Wed, January 20, 2010 19:36:18
Dag lezer.
Je bent nu op de site van Jan Baeyens maar wie is dat nu die "Jan" (jaja met een hoofdlettersmiley).
Als je jezelf ooit al eens hebt proberen omschrijven dan weet je dat het niet makkelijk is. Iedereen heeft vele kanten en niet elke kant wil je overal evenveel belichtensmiley. Wel, dat geldt voor mij ook.
Laat ik beginnen met de kant "feiten". Ik ben een veertiger die gescheiden is. Ik heb aan men huwelijk behalve een financiele kater ook een prachtige dochter overgehouden. Voor de dames: Sorry voor U maar ik heb ook een leuke vriendin (Ik hou van jou shatjesmiley).
Verder werk ik al heel wat jaren met computers en hou ik het graag simpel.
Ik heb een interesseveld dat heel wat breder is dan wat je van een gemiddelde nerd zou verwachten.
Ik hou van dansen, humor, met de handen werken, technologie en rustig in de zetel zitten.
Ik ben de man met de kilt smiley
Wees welkom en lees verder of laat van je horen.
Jan