Loading...
Pages: [1]   Go Down
Author Topic: Hilfestellung beim Kombinieren von Sketchen  (Read 416 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

Ich hoffe Ihr könnt mir helfen ich versuche zwei von meinen Sketchen zu kombinieren, aber es will nicht so richtig klappen!

Sketch1:Motorsteuerung

Quote


int E1 = 5;     //M1 Speed Control
int E2 = 6;     //M2 Speed Control
int M1 = 4;    //M1 Direction Control
int M2 = 7;    //M1 Direction Control
 
//int E1 = 6;     //M1 Speed Control
//int E2 = 9;     //M2 Speed Control
//int M1 = 7;    //M1 Direction Control
//int M2 = 8;    //M1 Direction Control
 
 
void stop(void)                    //Stop
{
  digitalWrite(E1,LOW); 
  digitalWrite(E2,LOW);     

void advance(char a,char b)          //Vor
{
  analogWrite (E1,a);      //PWM Speed Control
  digitalWrite(M1,HIGH);   
  analogWrite (E2,b);   
  digitalWrite(M2,HIGH);
}
void back_off (char a,char b)          //Rückwärts
{
  analogWrite (E1,a);
  digitalWrite(M1,LOW); 
  analogWrite (E2,b);   
  digitalWrite(M2,LOW);
}
void turn_L (char a,char b)             //Links
{
  analogWrite (E1,a);
  digitalWrite(M1,LOW);   
  analogWrite (E2,b);   
  digitalWrite(M2,HIGH);
}
void turn_R (char a,char b)             //Rechts
{
  analogWrite (E1,a);
  digitalWrite(M1,HIGH);   
  analogWrite (E2,b);   
  digitalWrite(M2,LOW);
}
void setup(void)
{
  int i;
  for(i=4;i<=7;i++)
    pinMode(i, OUTPUT);
  Serial.begin(9600);      //Set Baud Rate
  Serial.println("Run keyboard control");
}
void loop(void)
{
  if(Serial.available()){
    char val = Serial.read();
    if(val != -1)
    {
      switch(val)
      {
      case 'w'://Vor
        advance (500,500);   //max Vor
        break;
      case 's'://Rück
        back_off (500,500);   //max Rück
        break;
      case 'a'://Links
        turn_L (255,255);
        break;     
      case 'd'://Rechts
        turn_R (255,255);
        break;
      case 'z':
        Serial.println("Guten TAG");
        break;
      case 'x':
        stop();
        break;
      }
    }
    else stop();
  }
}



Sketch2: Temperatur

Quote
#define DHT11_PIN 0      // ADC0
 
byte read_dht11_dat()
{
  byte i = 0;
  byte result=0;
  for(i=0; i< 8; i++)
  {
    while(!(PINC & _BV(DHT11_PIN)));  // wait for 50us
    delayMicroseconds(30);
    if(PINC & _BV(DHT11_PIN))
      result |=(1<<(7-i));
    while((PINC & _BV(DHT11_PIN)));  // wait '1' finish
    }
    return result;
}
 
 
void setup()
{
  DDRC |= _BV(DHT11_PIN);
  PORTC |= _BV(DHT11_PIN);
  Serial.begin(9600);
  Serial.println("Ready");
}
     
void loop()
{
  byte dht11_dat[5];
  byte dht11_in;
  byte i;// start condition
     // 1. pull-down i/o pin from 18ms
  PORTC &= ~_BV(DHT11_PIN);
  delay(18);
  PORTC |= _BV(DHT11_PIN);
  delayMicroseconds(40);
  DDRC &= ~_BV(DHT11_PIN);
  delayMicroseconds(40);
   
  dht11_in = PINC & _BV(DHT11_PIN);
  if(dht11_in)
  {
    Serial.println("dht11 start condition 1 not met");
    return;
  }
  delayMicroseconds(80);
  dht11_in = PINC & _BV(DHT11_PIN);
  if(!dht11_in)
  {
    Serial.println("dht11 start condition 2 not met");
    return;
  }
   
  delayMicroseconds(80);// now ready for data reception
  for (i=0; i<5; i++)
    dht11_dat = read_dht11_dat();
  DDRC |= _BV(DHT11_PIN);
  PORTC |= _BV(DHT11_PIN);
  byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];// check check_sum
  if(dht11_dat[4]!= dht11_check_sum)
  {
    Serial.println("DHT11 checksum error");
  }
  Serial.print("Current humdity = ");
  Serial.print(dht11_dat[0], DEC);
  Serial.print(".");
  Serial.print(dht11_dat[1], DEC);
  Serial.print("%  ");
  Serial.print("temperature = ");
  Serial.print(dht11_dat[2], DEC);
  Serial.print(".");
  Serial.print(dht11_dat[3], DEC);
  Serial.println("C  ");
  delay(2000);
}


Vielleicht hat ja jemand eine Idee.

MfG Dominik
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 172
Posts: 16136
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das Auslesen des Sensors ist auf Hardwarelevel realisiert.
Hast Du es mit der Bibliothek versucht?
http://playground.arduino.cc/Main/DHTLib
Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Uwe,

Leider komme ich mit der Bibliothek nicht wirklich weiter.
Logged

Germany S-H
Offline Offline
God Member
*****
Karma: 35
Posts: 950
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vielleicht hat ja jemand eine Idee.

Im Prinzip machst Du es so, dass Du den setup() und loop() Funktionen neue Namen gibst:

Z.B. im Motor-Sketch

void setup() umbenennen zu ==> void motorSetup()

void loop() umbenennten ==> void motorLoop()

Und im DHT-Sketch:

void setup() umbenennen zu ==> void DhtSetup()

void loop() umbenennten ==> void DhtLoop()

Dann kopierst Du beide Programme untereinander weg in einen neuen Sketch und schreibst ans Ende neue setup() und loop() Funktionen, die die alten Funktionen aufrufen:


void setup()
{
  motorSetup();
  DhtSetup();
}

void loop()
{
  motorLoop();
  DhtLoop();
}
     
Das wird dann wegen der "delay(2000)" in der DhtLoop zu schrecklich lahmen Reaktionszeiten bei der Motorsteuerung führen, die dann bis zu 2 Sekunden lang nicht reagieren wird.

Da mußt Du Dir für die DhtLoop natürlich was einfallen lassen, um das große delay() da weg zu bekommen. Z.B. beim Eingang in die Funktion den letzten Stand des millis()-Timers merken und vergleichen, und die Funktion gleich wieder ohne Temperaturmessung verlassen, wenn sie innerhalb der letzten 2 Sekunden schon mal aufgerufen wurde.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 212
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du kannst in einem Sketch auch mehrere Tabs haben.
Der DHT hätte dann seinen eigenen Tab - das ganze wäre dann übersichtlicher.

Mit STRG + Umschalt + N bekommst du einen neuen Tab. Dann musst du die DHT Funktionen wie von jurs beschrieben umbenennen und reinkopieren.

Eine Anmerkung noch:
Variablen, die in einem Tab deklariert wurden, kann nicht in jedem Tab darauf zugegriffen werden. Diese müssten dann im Main Tab deklariert werden.
Logged

Arduino 1.0.3|MEGA2560
SSD1289 TFT Touch|DS18B20|DS1307
ADNS2610|RFM12|OOK|SSD1303|DHT22
SSD1306 Crius CO-16 OLED|UGUI|SD
SSD1352|

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vielen Dank für die super Hilfe , jetzt funktioniert es.

Auf zum nächsten Projekt. smiley-cool

Dank.
Logged

Pages: [1]   Go Up
Print
 
Jump to: