Pages: [1] 2   Go Down
Author Topic: Panoramakop work in progress  (Read 3338 times)
0 Members and 1 Guest are viewing this topic.
belgium
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

hallo allemaal, via tweakers dan toch hier terecht gekomen. smiley

ben bezig met een leuk project.. tenminste dat vindt ik dan he? smiley-twist

hardware:
arduino uno
motorshield
canon focus en shutter shield.. (zelf gemaakt) foto's volgen nog wel

ben druk bezig met het programma, maar dat is toch een stuk lastiger dan ik dacht...
ik kan dan ook alle hulp gebruiken..
Logged

belgium
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
/*

Created by Robin Waslander.. ak hydro13 ak Zork_nl
e-mail r.waslander@gmail.com
25 April 2012
Project:PanCam v 0.2
Doel:Omzetten van camera positie's en aantal te nemen foto's op een willekeurige graden schaal en willekeurig aantal positie's
    vertaald naar het aantal te nemen stappen voor de horizontale stappen motor.
    Dit is een 'proof of concept' ik probeer alle stappen,functie's zo goed mogelijk te omschrijven zodat iedereen
    ze 'meteen' zou moeten snappen, dit is niet alleen voor mezelf makkelijk maar ook voor anderen die (net zo als ik)
    Net met de geweldige IDE van arduino beginnen.

 
 This code is in the public domain.
*/

char inData[20]; // Allocate some space for the string
char inChar=-1; // Where to store the character read
byte index = 0; // Index into array; where to store the character
#include <AFMotor.h>
//Motor port #1 M1 and M2 op MotorShield
//Motor port #2 M3 and M4 op MotorShield>> deze heb ik nog niet in gebruik.. komt later
AF_Stepper motor(200, 1); //stapper motor 1 heeft 200 stappen voor 1 rotatie (360 graden)  

int menu;
int TimeB = 500;               //Default timer voor het indrukken van de shutter en het maken van een foto
                                 //!!TODO dit moet een variable worden die via serieel binnen komt als commando TimeB#####
          

void setup() {
                
             pinMode(12, OUTPUT); //Focus
             pinMode(8, OUTPUT); //Shutter
             Serial.begin(9600);
             Serial.write(" Hy! PanCam ready\n"); // laat weten dat je er bent..
            Serial.write("type 'setup' voor instellingen \n"); // geef opties weer
            Serial.write("type 'prog1' om panorama opnamen te maken\n"); //om program1 te starten
              }

char Comp(char* This) { // de char* functie snap ik nog niks van.. ook geeft de arduino reference hier geen uitleg over!
                       while (Serial.available() > 0) {                             // Don't read unless you know there is data
                                                       if(index < 19){              // One less than the size of the array
                                                       inChar = Serial.read();      // Read a character
                                                       inData[index] = inChar;      // Store it
                                                       index++;                     // Increment where to write next
                                                       inData[index] = '\0';        // Null terminate the string
                                                                      }
                                                       }

                        if (strcmp(inData,This) == 0) { // wat gebeurd hier nou precies? ik heb geen idee??
                                                       for (int i=0;i<19;i++) {
                                                                               inData[i]=0;
                                                                              }
                                                       index=0;
                                                       return(0);
                                                       }
                         else { //en waarom een else functie als er verder niks mee gebeurd? deze kan toch gewoon weg? of kan ik hier bv mijn noodstop in kwijd??
                          
                               return(1);
                              }
                        }
void loop()
 {
       if (Comp("start")==0)
       {
          Serial.write("voor programma\n");  // voor nu staan alle comando's onder elkaar, maar het start commando moet straks alle programma onderdelen die opgegeven
        }                                    // zijn uitvoeren.. zoals bijvoorbeeld: step4,timeA,TimeB,null  
       if (Comp("stop")==0) // stop staat nu opzich zelf.. het heeft geen enkele mogelijkheid om een programma te onderbreken (bijvoorbeeld "start") weet nog niet hoe ik dit moet doen.
       {
           Serial.write("Motor 1 -> Offline\n");
       }
       if (Comp("setup")==0) // settings staat nu opzich zelf.. werkt nog niet. laat alleen de setup zien
                             // met waarden
                             // menu serial.read werkt niet
       {
        
           Serial.write("*********settings*********\n");
           Serial.write("1 TimeLaps:        00.00.00\n");
           Serial.write("2 TimeB:           500 msec\n");
           Serial.write("3 Panorama graden: 360\n");
           Serial.write("4 Shots:           4 \n");
           Serial.write("5 Motor1 pan speed:60 step/sec\n");
           Serial.write("6 Softstart motor: N/A \n");
           Serial.write("0 Exit\n");
           Serial.write("type nummer om aan te passen \n");
           Serial.write("\n");  
           menu = Serial.read();
           if(menu =='a') {Serial.println("deze functie is nog niet ingebruik\n" );}
           if(menu =='b') {Serial.println("TimeB:           500 msec\n");
                           Serial.println("input msec \n");          
                           TimeB = Serial.read();
                         }
          
           if(menu =='3') { }
           if(menu =='4') { }
           if(menu =='5') { }
           if(menu =='6') { }
           if(menu =='0') { }
 
 
 
 
 }
  

Logged

belgium
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

het paste niet in 1 bericht dus dan zomaar  smiley-roll-blue

Code:
       //de onder staande commando's werken in iedergeval prima!! haaaa leuk!
if (Comp("prog1")==0){
  Serial.write("test programma 1\n");
  motor.setSpeed(60);  // 60 rpm // set motorspeed voor rotatie
   int Shots = 4;                  // aantal Shotsitie's binnen graden
                                 //!!TODO dit moet een variable worden die via serieel binnen komt als commando Shots#
 
                         
   int Graden = 360;             // de graden dit kan bijvoorbeeld ook 180 graden zijn!
                                 //!!TODO dit moet een variable worden die via serieel binnen komt als commando grad###
                                 
   int Msteps = Graden;          // maak Msteps (motors-single-steps) gelijk aan waarde Graden.
   int Tsteps = 0;               //Totaal aantal steps gedaan..heb ik nodig om straks weer terug te kunnen.
   int Tgraden = Graden;         //voor het overzicht geeft totaal aantal graden weer.
   
   Graden = Graden / Shots;        //deel de graden door het aantal'Shots'
   Msteps = Msteps / Shots / 1.8;  //deel Msteps door Shots en de graden die de stappenmotor doet per single step
                                 //in mijn geval is dat 1.8 graden per stap.. en dus 360 graden is 200 stappen.
                                 //Dit kan nog veranderen als ik bijvoorbeeld met tandwielen ga werken!!   
   Tsteps = Msteps * Shots;        //Omdat 'Shots' straks* een variable word en ik steeds naar de zelfde begin graden(0 dus)
                                 //wil zal ik de totaal aantal single steps van de stappen-motor bij moeten houden
                                 //zoveel stappen moet ik straks ook weer terug als ik op NULL graden uit wil komen.
                                 
                                 //!!TODO.. laat arduino een opsomming (beschrijving) geven hoe de graden en Shotstitie's
                                 //zijn ingesteld.. via serieel en wacht op gebruiker input (Start of Stop) om door te gaan
                                 //is nu niet belangrijk maar als er straks een 600mm lens aan de camera hangt wel!, die krijg
                                 //je namelijk niet graag tegen je knarr onverwachts.. of erger nog onschuldige mensen op de
                                 //markt mee om de oren meppen!!
                                 //!!TODO.. Maak een noodstop functie die het ..ahum.. geweld.. altijd onmiddelijk stop!!
                                 //tweakers.... HEEEEEEELP.. :)
   
   
   for (int i = 1; i <= Shots; i=i+1){      // maak een teller aan die gelijk is aan het aantal Shots
                                          // en verhoog deze elke keer met 1 totdat het aantal Shots is bereikt.
     Serial.write("Shot:");            // schrijf naar serieel Shot 1,2,3 enz.
     Serial.println(i);                   // schrijft de waarde i.. dus 'Shots' naar serieel 1,2,3,4 enz..
     motor.step(Msteps, FORWARD, DOUBLE); // draai motor het aantal Msteps
     Serial.write("aantal graden:");      // schrijf aantal graden naar serieel
     Serial.println(Graden);
     Serial.write("aantal motor steps:"); // schrijf aantal steps naar serieel
     Serial.println(Msteps);
     
     Serial.write("maak nu een foto\n");
     
     digitalWrite(8, HIGH);               // schakel pen 8 in (Shutter.. maak foto)
     delay(TimeB);                        // wacht een halve sec dit moet variable worden met de 'TimeB' variable maar ik weet nog niet hoe!
     digitalWrite(8, LOW);                // schakel pen 8 uit (shutter release)
     Serial.write(" \n");                 // lege regel voor overzicht
 
 }                                        // einde teller 'for i =....'
     Serial.write("Totaal Motor steps:");
     Serial.println(Tsteps);
     Serial.write("Totaal aantal graden:");
     Serial.println(Tgraden);
     
     Serial.println("terug naar start positie"); // dit is het null commando ga terug naar 0 graden.
     motor.setSpeed(100);  // 100 rpm motor // full speed die hab!
     motor.step(Tsteps, BACKWARD, DOUBLE); //Gebruikt Tsteps om de gemaakte stappen terug te draaien
}                                          // Einde prog1 functie       

       
if (Comp("focus")==0)
       {
           Serial.write("scherpstellen\n");
           digitalWrite(12, HIGH);   // schakel pen 12 in
           delay(1000);              // wacht een sec.. geef de camera wat tijd op scherp te stellen
           digitalWrite(12, LOW);    // schakel pen 12 uit
           // onderstaande is voor mij zodat ik kan zien dat het uitgevoerd is en klaar.. als test zeg maar..
           delay(100);              // wacht een 10de seconde
           Serial.write("klaar met scherstellen\n");
       }
if (Comp("shutter")==0) // case voor het maken van een foto..
       {
           Serial.write("maak nu een foto\n");
           digitalWrite(8, HIGH);   // schakel pen 8 in
           delay(500);              // wacht een halve sec
           digitalWrite(8, LOW);    // schakel pen 8 uit
           // onderstaande is voor mij zodat ik kan zien dat het uitgevoerd is en klaar.. als test zeg maar..
           delay(100);              // wacht een 10de seconde
           Serial.write("foto is gemaakt\n");
       }
       // de loop heeft nog geen fout afhandeling, zodra er een comando binnen komt
       // wat de loop niet herkend.. is het gedaan met de loop en hangt het programma!
       //Serial.write("error\n");   //geen geldig commando ontvangen
 }
Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 68
Posts: 1926
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hydro
Welkom op het forum.
Je kan je programma best als een attachement bijvoegen (alhoewel dat misschien niet kan van je eerste post)
Als je hulp met je probleem wilt zal je wel moeten zeggen wat je probleem is.

Met vriendelijke groet.
Jantje
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

belgium
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

hallo jantje,

dat kan inderdaad nog niet (nog steeds niet trouwens)..
zodra dat kan zal ik het wel veranderen..  smiley-mr-green

Waar ik jullie hulp bij nodig heb is het volgende.
ik krijg het maar niet voorelkaar maar ik probeer mijn arduino zover te krijgen dat ik via serieel commando's en parameters kan sturen die de arduino dan toepast..

ik heb gister nacht maar uit frustratie deze sketch gemaakt.. die via menu's werkt om de parameters.
'timeb'  [is een timer in msec en dient als time-window om een foto te kunnen maken, met veel licht kan deze laag zijn. met HDR moet hij lang zijn.
'grad'    [het totaal aantal graden dat de pancam af moet leggen.
'shot'    [het aantal foto's dat genomen moet worden.

op deze manier werkt het wel , maar wat ik echt zou willen is dat ik timb zelf rechtreeks in kan geven zonder menu optie te kiezen met een vaste waarde.. ik bedoel: timeb10000 of timeb600 en dat hij de waarde dan meteen aanpast. hoe doe ik dat??
en niet alleen voor timeb, maar voor alle (toekomstige)parameters. Later zal ik bijvoorbeeld ook een timelaps timer willen maken 'timel' die in dagen,uren,min,sec werkt..

als jullie me kunnen helpen, dan heel graag... heb het gevoel dat ik rondjes loop en zie het licht niet. smiley-eek-blue
 



Code:
/*
Created by Robin Waslander.. ak hydro13 ak Zork_nl
e-mail r.waslander@gmail.com
26 April 2012

// menu and settings
//used 'zoomkat 8-6-10 serial I/O string test' as base.. for my menu

This code is in the public domain.
*/

String readString;
int timeb = 500; // set val en defauld waarde (1/2 sec)
int shot = 4;    // set val en defauld waarde (4 foto's)
int grad = 360;    // set val en defauld waarde (360 graden)
void setup() {
Serial.begin(9600); //open serial
Serial.println("type 'help' voor uitleg"); // laat weten dat serial up is en wat de gebruiker moet doen
readString="";  // maak voor de zekerheid de string leeg
}

void loop() {
 while (Serial.available()) {            //check dat er ook echt een serial verbinding is
 delay(10);                     // even wachten :)
   if (Serial.available() >0) { // als er ook echt een serial verbinding is.. ga door
 char c = Serial.read();
 readString += c;}
 }
    if (readString.length() >0) {}
    
if (readString=="help"){
        Serial.println("type 'shot' aantal foto's in te stellen");
        Serial.println("type 'timeb' msec in te stellen");
        Serial.println("type 'grad' aantal graden van L>R in te stellen");
        Serial.println("type 'setup' alle huidige instellingen te bekijken");
}  
if(readString=="timeb") {
          Serial.write("timeb is nu:");
          Serial.println(timeb);
          Serial.println("__________________________");
          Serial.println("type timeb1 voor 500msec");
          Serial.println("type timeb2 voor 1 sec");
          Serial.println("type timeb3 voor 3 sec");
          Serial.println("type timeb4 voor 5 sec");
        }        
if(readString=="timeb1") {timeb=500;Serial.write("timeb is nu:");Serial.println(timeb);}
if(readString=="timeb2") {timeb=1000;Serial.write("timeb is nu:");Serial.println(timeb);}        
if(readString=="timeb3") {timeb=3000;Serial.write("timeb is nu:");Serial.println(timeb);}        
if(readString=="timeb4") {timeb=5000;Serial.write("timeb is nu:");Serial.println(timeb);}        
        
if(readString=="shot") {
          Serial.write("het aantal shots is nu:");
          Serial.println(shot);
          Serial.println  ("__________________________");
          Serial.println  ("type shot1 voor 1 foto's");
          Serial.println  ("type shot2 voor 2 foto's");
          Serial.println  ("type shot3 voor 3 foto's");
          Serial.println  ("type shot4 voor 4 foto's");
          Serial.println  ("type shot5 voor 5 foto's");
          Serial.println  ("type shot6 voor 6 foto's");
          Serial.println  ("type shot7 voor 7 foto's");
          Serial.println  ("type shot8 voor 8 foto's");
          Serial.println  ("type shot9 voor 9 foto's");
          Serial.println("type shot10 voor 10 foto's");
        }        
if(readString=="shot1") { shot=1;Serial.write("shot is nu:");Serial.println(shot);}
if(readString=="shot2") { shot=2;Serial.write("shot is nu:");Serial.println(shot);}
if(readString=="shot3") { shot=3;Serial.write("shot is nu:");Serial.println(shot);}        
if(readString=="shot4") { shot=4;Serial.write("shot is nu:");Serial.println(shot);}        
if(readString=="shot5") { shot=5;Serial.write("shot is nu:");Serial.println(shot);}
if(readString=="shot6") { shot=6;Serial.write("shot is nu:");Serial.println(shot);}
if(readString=="shot7") { shot=7;Serial.write("shot is nu:");Serial.println(shot);}        
if(readString=="shot8") { shot=8;Serial.write("shot is nu:");Serial.println(shot);}        
if(readString=="shot9") { shot=9;Serial.write("shot is nu:");Serial.println(shot);}        
if(readString=="shot10"){shot=10;Serial.write("shot is nu:");Serial.println(shot);}        
        
if(readString=="grad") {
          Serial.write("de totaal aantal graden zijn nu:");
          Serial.println(grad);
          Serial.println("__________________________");
          Serial.println("type grad1 voor 90 graden");
          Serial.println("type grad2 voor 120 graden");
          Serial.println("type grad3 voor 160 graden");
          Serial.println("type grad4 voor 180 graden");
          Serial.println("type grad5 voor 270 graden");
          Serial.println("type grad6 voor 360 graden");
          }        
if(readString=="grad1") { shot=90;Serial.write("graden:");Serial.println(grad);}
if(readString=="grad2") {shot=120;Serial.write("graden:");Serial.println(grad);}
if(readString=="grad3") {shot=160;Serial.write("graden:");Serial.println(grad);}        
if(readString=="grad4") {shot=180;Serial.write("graden:");Serial.println(grad);}        
if(readString=="grad5") {shot=270;Serial.write("graden:");Serial.println(grad);}
if(readString=="grad6") {shot=360;Serial.write("graden:");Serial.println(grad);}

if(readString=="setup") {
  Serial.println(shot);
  Serial.println(timeb);
  Serial.println(grad);
  }
  readString=""; // maak de string leeg
 
 }
 
« Last Edit: April 27, 2012, 04:02:05 am by hydro13 » Logged

belgium
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

heb inmiddels de laatste code (menu en settings) in het pancam programma verwerkt..
zo is het tenminste bruikbaar... maar ja vindt het wel een paardemiddel smiley-mr-green
en kan nog steeds geen bestanden toevoegen???? smiley-cry
« Last Edit: April 27, 2012, 06:38:13 am by hydro13 » Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 68
Posts: 1926
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hydro
Ik heb hier net een blog over geschreven http://www.baeyens.it/#post10
Wil je die proeflezen?
Met vriendelijke groet
Jantje
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 224
Posts: 13921
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


heb je psketch herschreven tot een (mini)parser.

generiek is de input  "cmd param ;" al dan niet met spaties

voorbeeld commando's
shot10;
grad 34;
time 3000;

of alles op ene regel

shot  10  ;  grad 3456;  time 5000 ;  help ; koe ; shot abc; 

output van deze laatste

parsing: shot  10

shot: 10
parsing: grad 3456

grad: 3456
parsing: time 5000

time: 5000
parsing: help

type 'shot' aantal foto's in te stellen
type 'timeb' msec in te stellen
type 'grad' aantal graden van L>R in te stellen
type 'setup' alle huidige instellingen te bekijken
parsing: koe

parsing: shot abc



Code:
String readString;

int shot = 0;
int timeb = 0;
int grad = 360;

void setup()
{
  Serial.begin(9600);
  Serial.println("start ...");
  readString=""; 
}

void loop()
{
  if (Serial.available()>0)
  {
    delay(1);
    char c = Serial.read();
    if (c != ';')  // ; == command separator
    {
    readString += c;
    }
    else 
    {
      parseCommand();
      readString = "";
    }
  }

  if (shot>0)
  {
    Serial.print("shot: ");
    Serial.println(shot, DEC);
    shot = 0;
  }
  if (grad>0)
  { 
    Serial.print("grad: ");
    Serial.println(grad, DEC);
    grad = 0;
  }
  if (timeb>0)
  { 
    Serial.print("time: ");
    Serial.println(timeb, DEC);
    timeb = 0;
  }


void parseCommand()
{
  readString = readString.trim(); // remove spaces
  Serial.print("parsing: ");
  Serial.println(readString);
  Serial.println();
  if (readString.startsWith("help")) doHelp();
  else if(readString.startsWith("time")) doTime();
  else if (readString.startsWith("shot")) doShot();
  else if (readString.startsWith("grad")) doGrad();
}

void doHelp()
{
  Serial.println("type 'shot' aantal foto's in te stellen");
  Serial.println("type 'timeb' msec in te stellen");
  Serial.println("type 'grad' aantal graden van L>R in te stellen");
  Serial.println("type 'setup' alle huidige instellingen te bekijken");
}

void doTime()
{
  String t = readString.substring(4);
  timeb= t.toInt();
}

void doShot()
{
  String t = readString.substring(4);
  shot = t.toInt();
}

void doGrad()
{
  String t = readString.substring(4);
  grad = t.toInt();
}
Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 68
Posts: 1926
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Lol
Hebben we met 2 hetzelfde gedaan smiley-cool
Groeten uit België
Jantje
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 224
Posts: 13921
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

JIj hebt met een char [] gewerkt ipc String -> veel efficienter voor memory eh geheugen smiley-wink
nou ja, kan de vraagsteller in elk geval kiezen !
Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

belgium
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

rob?
krijg een error als ik je code compile..

parser_van_robtillaart.cpp: In function 'void parseCommand()':
parser_van_robtillaart:54: error: no match for 'operator=' in 'readString = readString.String::trim()'
D:\arduino-1.0\hardware\arduino\cores\arduino/WString.h:83: note: candidates are: String& String::operator=(const String&)
D:\arduino-1.0\hardware\arduino\cores\arduino/WString.h:84: note:                 String& String::operator=(const char*)

en de code van jan, krijg helemaal niks terug op de serial monitor wat ik ook intik.. >>

zal arduino eens opnieuw instal.. kijken of dat helpt...
 smiley-eek nope niks.
zelfde verhaal compile error op de regel..
     
readString = readString.trim(); // remove spaces

No match for 'operator=' in 'readString = readString.String::trim()'
 smiley-eek-blue   
« Last Edit: April 29, 2012, 05:30:39 am by hydro13 » Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 68
Posts: 1926
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hydro
Mij code gebruikt baud rate 115200.
Als die niet juist staat in je serial monitor zie je niks.
Met vriendelijke groet
Jantje
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 224
Posts: 13921
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
rob?
krijg een error als ik je code compile..

Tja, ik heb gemist dat je op 1.0 zit   [ik werk vooral op 0.22 omdat deze stabieler is imho]

de trim functie is veranderd, maar OK, omdat het zondag is: ...
Code:
String readString;

int shot = 0;
int timeb = 0;
int grad = 360;

void setup()
{
  Serial.begin(9600);
  Serial.println("start ...");
  readString=""; 
}

void loop()
{
  if (Serial.available()>0)
  {
    delay(1);
    char c = Serial.read();
    if (c != ';')  // ; == command separator
    {
    readString += c;
    }
    else 
    {
      parseCommand();
      readString = "";
    }
  }

  if (shot>0)
  {
    Serial.print("shot: ");
    Serial.println(shot, DEC);
    shot = 0;
  }
  if (grad>0)
  { 
    Serial.print("grad: ");
    Serial.println(grad, DEC);
    grad = 0;
  }
  if (timeb>0)
  { 
    Serial.print("time: ");
    Serial.println(timeb, DEC);
    timeb = 0;
  }


void parseCommand()
{
  readString.trim(); // remove spaces    <<<<<<<< changed this line
  Serial.print("parsing: ");
  Serial.println(readString);
  Serial.println();
  if (readString.startsWith("help")) doHelp();
  else if(readString.startsWith("time")) doTime();
  else if (readString.startsWith("shot")) doShot();
  else if (readString.startsWith("grad")) doGrad();
}

void doHelp()
{
  Serial.println("type 'shot' aantal foto's in te stellen");
  Serial.println("type 'timeb' msec in te stellen");
  Serial.println("type 'grad' aantal graden van L>R in te stellen");
  Serial.println("type 'setup' alle huidige instellingen te bekijken");
}

void doTime()
{
  String t = readString.substring(4);
  timeb= t.toInt();
}

void doShot()
{
  String t = readString.substring(4);
  shot = t.toInt();
}

void doGrad()
{
  String t = readString.substring(4);
  grad = t.toInt();
}
Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

belgium
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hydro
Ik heb hier net een blog over geschreven http://www.baeyens.it/#post10
Wil je die proeflezen?
Met vriendelijke groet
Jantje

jan leuk stukje hoor smiley
ja je verkijkt je als noop echt op het feit dat de arduino met loops werkt.. en niet wacht op input van de gebruiker..
dat is tenminste mijn grootste struikelblok.. en vindt de 'taal' int begin vrij lastig te snappen. de refernce van 1.0 is trouwens ook niet compleet. (offline, hier missen heel wat pagina's van het serial gebeuren. daar komt bij dat er in de refernce heel wat sample code mist... geen verwijt, maar makkelijk vindt ik het niet smiley

daar in tegen, gaat het met mijn sketch voor spoedig en dat is dan weer geheel te danken aan het geweldig forum en jullie hulp!!  big big thanks smiley
Logged

belgium
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

quote]

Tja, ik heb gemist dat je op 1.0 zit   [ik werk vooral op 0.22 omdat deze stabieler is imho]

de trim functie is veranderd, maar OK, omdat het zondag is: ...

[/quote]

smiley) haaa , heb meteen ff de 0.22 geprobeerd, maar zal op 1.0 verder gaan:)
zo straks ff snel zitten spelen met je code.. heerlijk helder dit!..
wel struikelde ik heel even op het feit dat je de string weer leeg maakte als je hem print..
maar dat heb ik er in middels uit gehaald..
Code:
if (shot>0)
  {
    Serial.print("shot: ");
    Serial.println(shot, DEC);
    shot = 0;
  }
vindt het geweldig dat je de parameters kan scheiden door ; te gebruiken..
maar dat heeft nu wel als gevolg dat je elk commando of parameter nu moet afsluiten met ';' bijvoorbeeld shot6; .. zonder de ;
gebeurd er niks en word de string ook niet leeg gemaakt..
kan dit nog anders? dus dat command help{ENTER} ook gewoon nog geldig is? is geen must maar maakt het wel netter.. smiley

Logged

Pages: [1] 2   Go Up
Jump to: