Go Down

Topic: Mehrere Variablen an Arduino schicken (Read 16069 times) previous topic - next topic

mazell

Hallo :) Heute ist mein Arduino endlich gekommen "juhu".

Ich wollte ein kleines Programm in C# schreiben, mit dem ich die LED ein und ausschalten kann, und die delay zeiten regeln kann.

Ein/Aus funktioniert wunderbar. Ich schicke mit serialPort1.write(signal) eine 1 oder eine 0 um die LED anzusteuern.

So jetzt zum Problem. Ich möchte jetzt noch zusätzlich eine zweite variable an den mc schicken, in der ich die delay zeiten für den LED status übermittle.

Code: [Select]


val = Serial.read();     

  if (val > '0' && val <= '9' ) {
   val = val - '0';         
   for(int i=0; i<val; i++) {
    Serial.println("blink!");
    digitalWrite(ledPin,HIGH);
    delay(zeit);                         wie kriege ich die zahl aus dem string (val) in die variable zeit?
    digitalWrite(ledPin, LOW);
    delay(zeit);
   }
   //Serial.println();
}
}


Dankeeeeeeee

stundenblume

Hi,

wenn Du nur eine einzige Zahl sendest sähe das einfachste Programm so aus:
Code: [Select]

if (Serial.available()>0){
warte = 100 * Serial.read();
}
digitalWrite(ledPin,HIGH);
delay(warte);
digitalWrite(ledPin, LOW);
delay(warte);


mazell

Und wenn ich zusätzlich sagen möchte wie oft meine led blinken soll?

mazell

Hat keiner eine Idee ? :(

Ich möchte nur ein An oder Aus und die "delay" Zeit von 0 - 2000 an Arduino schicken.

LG

funkheld

#4
Feb 15, 2011, 03:58 pm Last Edit: Feb 15, 2011, 04:01 pm by funkheld Reason: 1
für delay nimmt man keine variablen siehe hier :

http://www.mikrocontroller.net/topic/208639#new


hmmm..., ich stelle fest, mit der arduino-proggerei wird wild gegen die winavr-c-regeln verstossen.
es gbt noch andere brandnester in den fertigen routinen, die ein flächenbrand hinsichtlich des speicherverbrauches verursachen.

gruss

stundenblume

Quote
für delay nimmt man keine variablen

Kannst Du das bitte genauer erklären. Ich habe keine Begründung gefunden.

Quote
Hat keiner eine Idee

Doch. Du musst dann halt z.B. folgende Zeichenkette schicken $$1,2000** Danach die ankommenden Bytes nach einem $$ durchsuchen, alles in einen String schreiben, bis ** kommt. Nun den String zerlegen. Das erste Zeichen steht für ein oder aus, ab dem dritten Zeichen kommt dann die restliche Variable.

Das ist natürlich quick and dirty und geht noch viel schöner. Eine Einfache Sache wäre noch das delay auf 0-9 oder ein vielfaches zu beschränken. Dann könntest Du folgende Zeichen senden. S1 oder S0 für ein oder aus. D1 oder D5 für 0,1 Sekunde oder 0,5 Sekunden. Dann brauchst Du nur nach den Zeichen S oder D suchen und das nächste Zeichen enthält dann deine gewünschte Info.

Vorgehensweise einigermaßen klar geworden?


Gruß

Sebastian

udoklein

Meine erste Idee ist IMMER erst einmal im Playground oder bei den Beispielen nachschauen. Erst dann wenn sich da nichts findet macht man sowas selber.

Schaut Euch doch mal http://www.arduino.cc/playground/Code/Messenger an.

Udo
Check out my experiments http://blog.blinkenlight.net

webmeister

Quote
Meine erste Idee ist IMMER erst einmal im Playground oder bei den Beispielen nachschauen

Eine beliebte Methode ist (leider) auch direkt im Forum fragen. Nachlesen kann man ja später  ;) ;)

funkheld

#8
Feb 15, 2011, 09:42 pm Last Edit: Feb 15, 2011, 09:49 pm by funkheld Reason: 1
hmmm..., da ist doch ein schönes beispiel drin , wie man einen festen wert in der delay hat, wie es gefordert wird und dann eben eine variable in der for-schleife , die sehr klein im binär-code gehalten wird :

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Warteschleifen_.28delay.h.29

ein ausszug für unsere pusteblume zitat :
Die Bibliotheksfunktionen funktionieren allerdings nur dann korrekt, wenn sie mit zur Übersetzungszeit (beim Compilieren) bekannten konstanten Werten aufgerufen werden....

Code: [Select]

void long_delay(uint16_t ms)
{
   for(; ms>0; ms--) _delay_ms(1);
}


mazell

Sorry aber ich habe schon das ganze Internet durchforstet und finde kein passendes Beispiel. Aus deinen Links werde ich leider nicht schlauer und glaube dass die nicht mit dieser Problematik zu tun haben :/

Ich weiß wie ich das Problem lösen könnte, nur bräuchte ich ein Beispiel wie ich einen String zerlegen könnte.

Wie kann ich den folgenden String in ein Array zerlegen:
signal = "123456789"

array[0] = 1
array[1] = 2
etc.

Das würd mein Problem lösen

Danke

funkheld

#10
Feb 15, 2011, 09:58 pm Last Edit: Feb 15, 2011, 09:59 pm by funkheld Reason: 1
http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F

versuch mal damit...und les dir die ganze seite mal durch, da findest du sehr interessante stringfunktionen... :)

manometer... :)

mazell

Ich weiß wie es in C und anderen Sprachen geht, ich will es aber in meinem arduino scatch machen. da will ich den string den ich seriell empfangen habe zerlegen

funkheld

sieh mal in der hilfe zu serial : Serial_Available.html

byte für byte empfangen in einem array und dann auswerten..., sag mal was ist da so schwierig?

udoklein

Bei der Messenger Library ist ein Beispiel dabei. Auch im Playground, ganz unten.
Check out my experiments http://blog.blinkenlight.net


Go Up