Ik zou heel graag een servo aansturen op graden aan de hand van een serial monitor of bluetooth module.
Ik zou dit graag kunnen door er een getal aan te koppelen, bijvoorbeeld a = 90 graden b = 40 graden etc
Ik heb hier al een stuk code, het probleem is dat ik maar 1 keer een getal kan ingeven en hij dan beweegt.
Als ik nog een getal ingeef om de servo te doen draaien werkt het niet meer.
Kan iemand mij helpen?
Alvast bedankt
if (Serial.available() > 0)
{
char data = Serial.read(); // reading the data received from the bluetooth module
switch (data)
{
case 'a': myservo.write(90);
delay(50);
case 'b': myservo.write(40);
delay(50);
TechGraphix:
Misschien als je aan het einde van de actie (na switch(data) dus), data weer leeg maakt? (data=""; )
Aangezien data alleen gevuld wordt als er seriele data beschikbaar is, is dat geen oplossing. Verder is data een karakter en niet een array van karakters.
thieutje:
...
Uitprinten wat de Arduino ontvangt kan misschien wat licht schijnen op het probleem.
En de cases in switch missen een break.Dus als je 'a' zend wordt eerst case 'a' uitgevoerd en vervolgens case 'b'. Misschien is dat de bedoeling maar ik betwijfel dat.
Case 'b' wordt alleen uitgevoerd als die case ook waar is.
Maar dan moet de voorwaarde dus wel getest worden.
Het voordeel van de break, is dat alle navolgende voorwaarden binnen die case... niet meer gecontroleerd hoeven te worden wanneer er al aan een eerdere voorwaarde voldaan is.
Dat kan je dus kostbare tijd schelen, en door een slimme volgorde van die cases kun je dus behoorlijk tijd besparen.
Daarmee bedoel ik dat wanneer je verwacht dat z vaker voorkomt dan a, en je eerst op die z controleert, je daarna niet het hele alfabet hoeft te controleren.
En dat gaat echt wat uitmaken wanneer je code tijdkritisch word.
In jouw code word wel 2 keer een delay van 50 milliseconden uitgevoerd, want die zijn allebei niet afhankelijk van enige voorwaarde.
En delay is een nog veel grotere verspilling van kostbare tijd dan een groot aantal cases die getest moeten worden.
Zoals sterretje je al adviseert: kijk eens goed wat je terug krijgt uit de serial monitor.
Ik heb een donkerbruin vermoeden dat dat iets anders is als wat je eigenlijk verwacht had.