Arduino

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Vainamo V.

    hallo,
    habe folgendes problem:
    ich habe einen code in arduino geschrieben, das mit visual basic "gesteuert" wird.
    also ich habe eine LED und per Button klick soll sie eingeschaltet werden und auch wieder ausgeschalten werden..
    ja alles sollte soweit gehen..
    der code ist richtig geschrieben also zeigt mir keine fehlermeldungen an, und wird auch von der platine übernommen da eine kleine LED auf der platine aufleuchtet wenn man daten überträgt..
    so jz hab ich folgendes problem:
    drück ich auf den button, blinkt eine led also die direkt am board oben ist so dass man sieht das es arbeitet.. schaltet jedoch nicht die led ein und aus..
    wenn ich jz direkt im arduino programm den code schreib, das die led gleich aufleuchtet, geht es ohne probleme..
    Bilder
    • screen1.png

      29,09 kB, 500×680, 253 mal angesehen
    • screen2.png

      171,12 kB, 1.920×1.040, 202 mal angesehen
    • 20160105_223319.jpg

      3,28 MB, 2.988×5.312, 203 mal angesehen

    C-Quellcode

    1. void setup(){
    2. pinMode(13,OUTPUT);
    3. Serial.begin(9600);
    4. }
    5. void loop(){
    6. int val;
    7. if (Serial.available()) {}
    8. delay(100);
    9. while (Serial.available() > 0) {}
    10. val=Serial.read();
    11. if(val== '1') { digitalWrite(13,HIGH); }
    12. else if (val== '0') {digitalWrite(13,LOW);
    13. }
    14. }

    C-Quellcode

    1. while (Serial.available() > 0) {}

    Wie @Thunderbolt schon geschrieben hat (und ich mich jetzt nicht grob vertue) liegt es an Zeile 12.
    Deine Schleife läuft solange wie Bytes zum auslesen <<verfügbar>> sind.
    Sprich, die Schleife <<lässt dich nur durch>>, wenn KEINE Bytes verfügbar sind.
    Das Programm kommt also nur dann bis zur Zeile 13, in der du die Bytes ausliest, wenn keine Bytes verfügbar sind.

    Ich schätze mal du hast einfach nur die klammern falsch gesetzt, und wolltest solange Bytes auslesen, wie welche verfügbar sind (so wie im Beispiel von arduino.cc nur mit While statt If)?

    C-Quellcode

    1. if (Serial.available() > 0) {
    2. // read the incoming byte:
    3. incomingByte = Serial.read();
    4. // say what you got:
    5. Serial.print("I received: ");
    6. Serial.println(incomingByte, DEC);
    7. }
    Ich kenne mich damit jetzt nicht übermäßig aus, aber ich habe das schonmal so gesehen: Wieso im FormLoad als allererstes SerialPort.Close()?

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

    Anluin schrieb:

    Deine Schleife läuft solange wie Bytes zum auslesen <<verfügbar>> sind.

    Das ist nicht mal das Problem. Das Problem ist, dass er in seiner Schleife gar nichts stehen hat. Das gleiche auch bei der If-Abfrage. Siehe die jeweiligen Klammernpaare am Ende:

    C-Quellcode

    1. void setup() {
    2. pinMode(13,OUTPUT);
    3. Serial.begin(9600);
    4. }
    5. void loop(){
    6. int val;
    7. if (Serial.available()) {} //Wird nichts
    8. delay(100);
    9. while (Serial.available() > 0) {} //Wird auch nichts
    10. val = Serial.read();
    11. if(val == '1') {
    12. digitalWrite(13, HIGH);
    13. }
    14. else if (val == '0') {
    15. digitalWrite(13, LOW);
    16. }
    17. }


    So wäre es besser @Jakob1805:

    C-Quellcode

    1. void setup() {
    2. pinMode(13,OUTPUT);
    3. Serial.begin(9600);
    4. }
    5. void loop(){
    6. int val;
    7. if (Serial.available()) {
    8. delay(100);
    9. while (Serial.available() > 0) {
    10. val = Serial.read();
    11. if(val == '1') {
    12. digitalWrite(13, HIGH);
    13. }
    14. else if (val == '0') {
    15. digitalWrite(13, LOW);
    16. }
    17. }
    18. }
    19. }


    Grüße
    Väinämö