- Labornetzteil AliExpress         
Ergebnis 1 bis 9 von 9

Thema: [Arduino Uno] - Multitasking und Serielle Befehle

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied Avatar von neo3000
    Registriert seit
    17.11.2006
    Ort
    linz
    Alter
    35
    Beiträge
    37

    Beitrag [Arduino Uno] - Multitasking und Serielle Befehle

    Hallo,
    Kurz eine Beschreibung meines Projektes:

    Ich möchte eigene Steuerbefehle per COM an den Arduino senden welche dieser auswertet und weiter verarbeitet, was soweit auch schon ganz gut funktioniert.
    zb: Befehl 1003 senden
    Adruino Empfang >> Pin9 auf HIGH setzen

    Einen PWM wert sende ich indem ich zb.: 3235 sende und am Arduino 3235 - 3000 rechne das.
    So erhalte ich den Wert 235 für dem PWM1 Ausgang.
    PWM2 = 4000 usw.
    Wenn ich die Befehle auch schön nach einander Sende werden diese auch ohne Problem verarbeiten.
    Sende ich nun (timer abhänging) zb.: alle 2 sec dass der PWM1 auf 180 und dann wieder auf 0 gehen soll und will gleichzeitig noch mehere LEDs steuern und Daten vom Arduino an den PC senden bekomme ich immer wieder verschide aussetzer zb.: vom Servo an PWM1.

    Kurz geasgt ich benötige Multitaskting am Arduino.!!

    Mein derzeitiger Code (CODE WURDE DURCH HINWEISE VON BENUTZER "lokirobotics" ANGEPASST, thx.)
    Code:
    const int pwmPin = 9;
    const int ledPin = 8;
    byte pwmWert;
    int incomingData;  
    char data[4];
    int i;
    
    //Setup-Routine
    void setup(){
      Serial.begin(9600);  
      pinMode(ledPin,OUTPUT);
      pinMode(pwmPin,OUTPUT);
    }
    
    //Hauptprogramm-Routine
    void loop(){ 
      //Abwarten bis data[] vier Stellen hat
      do{
        if (Serial.available()){data[i++] = Serial.read();}    
      }
      while(i<4);
      incomingData = atoi(data); // "data[]" in Integer umwandeln und in "incomingData" speichern
      
      Daten_auswerten(); //Interger "incomingData" auswerten
      PWM_setzen(); //PWM Wert auf Pin 9 ausgeben
      Eingaenge_abrufen(); //Alle Ausgänge und Eingänge abrufen  
      
      i = 0;
    }
    
    void PWM_setzen(){analogWrite(pwmPin, pwmWert);}
    
    void Daten_auswerten(){
        if (incomingData == 1002){digitalWrite(ledPin, HIGH);} //Befehl "1002" um LED einzuschalten
        if (incomingData == 1003){digitalWrite(ledPin, LOW);}  //Befehl "1003" um LED einzuschalten
        if (incomingData >= 3000){pwmWert = byte(incomingData - 3000);} //Befehl "3000" um PWM zu senden (bsp: 3245 - 3000 = 245) 3000 ist nur zur Unterscheidung
    }
    
    void Eingaenge_abrufen(){
      //Daten aller Analogeingänge abrufen
      for(int i = 0;i < 6;i++){
        Serial.print(analogRead(i));
        Serial.print(",");   
      } 
      //Daten der Digitaleingänge 0 - 8 abrufen
      for(int i = 0;i < 14;i++){
        if (i == 9){Serial.print(analogRead(i));}
        else{Serial.print(digitalRead(i));}
        if(i<13){Serial.print(",");}    
      }    
      Serial.print("&H");
      Serial.flush();
      //331,250,206,173,149,137,1,0,0,0,0,0,0,0,0,158(PWM),0,0,0,0&H
    }
    Wie kann ich nun die verschiedene Subroutinen so programmieren dass ich "zeitgleich" zb.: Daten (ständig) abrufen, PWM setzen, und LEDs über den PC steuern kann.

    Zum Schluss möchte ich es so weit möglich machen dass ich ständig alle daten des Arduino einlesen, und zb.: Motorgeschwindigkeit und Servos gleichzeitig über den PC steuren kann.

    Vielen Danke
    Markus
    Geändert von neo3000 (14.04.2011 um 13:35 Uhr) Grund: Richtigstellung des Codes
    -----------------------------------------
    Danke,
    Mit freundlichen Grüßen aus Leonding

    Markus

Ähnliche Themen

  1. ARDUINO ARDUINO l293D + MegaservoLib
    Von m1ch15inner im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 2
    Letzter Beitrag: 11.07.2011, 12:50
  2. Multitasking
    Von Exodus im Forum AVR Hardwarethemen
    Antworten: 44
    Letzter Beitrag: 22.06.2006, 17:18
  3. serielle befehle empfangen
    Von Keksdose im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 06.08.2005, 18:25
  4. Multitasking für den Asuro
    Von Giwo im Forum Asuro
    Antworten: 9
    Letzter Beitrag: 05.06.2005, 03:32
  5. Multitasking
    Von FancanTeik im Forum Software, Algorithmen und KI
    Antworten: 11
    Letzter Beitrag: 25.04.2005, 09:16

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen