Show Posts
Pages: [1] 2 3
1  International / Deutsch / Re: Code hält Arduino auf on: June 28, 2013, 05:19:34 am
Ok. Soweit war ich auch.
Aber was mache ich mit:?
 
Serial.print(0x7C, BYTE);  //character 124 wich tells the lcd it's about to get configed

Also "Serial.write( 0x7C);" geht nicht.

Heißt "weniger Text senden", ich muss auf manche Daten verzichten, oder muss ich es irgendwie anders senden?
2  International / Deutsch / Re: Code hält Arduino auf on: June 28, 2013, 05:01:55 am
Danke für die diversen Vorschläge.
Ich werde erstmal versuchen die Baudrate meines Serial Lcd zu erhöhen. Daten:  https://www.sparkfun.com/tutorials/246
Hier gibt aber leider ein problem.
Ich habe es wie in dieser Anleitung (letzter post) versucht. http://forum.arduino.cc/index.php/topic,18055.0.html.
Das Arduino meldet :
Code:
Seit Arduino 1.0 wird das Keyword 'BYTE' nicht mehr unterstützt.
Bitte verwenden Sie stattdessen Serial.write().

Wie genau soll ich das "Byte" jetzt ersetzen?

Mein Code:
Code:
void setup(){
 Serial.begin(9600);
  Serial.print(0x7C, BYTE);  //character 124 wich tells the lcd it's about to get configed
   Serial.print( 0x09, BYTE);  // splash screen reset - when you have the usb and tx and vc plugged in you get a conflict that is why you need this code
   delay(500);
   Serial.print(0x0D, BYTE);  //9600 bps
    Serial.print(0x0G, BYTE);  //38400 bps 

}
void loop(){
 //Serial.print(0x7C, BYTE);  //special character

 //reset character
  Serial.print("total reset: ");
 delay(3000);
}
3  International / Deutsch / Code hält Arduino auf on: June 27, 2013, 01:28:03 pm
Hallo Leute,
Ich habe einen Zähler gebaut, der die Signale eines Relais zählen soll.
Ab einer gewissen Frequenz der Impulse Zählt das Arduino nur jedes Zweite mal.
Ich vermute, dass der code, der ausgeführt wird wenn ein Signal kommt, das Arduino solange aufhält, sodass der zweite Impuls versäumt wird.
Gibt es eine Möglichkeit das zu verhindern?

Ich freue mich über Vorschläge!

Code:
//Display
  #include <SoftwareSerial.h>
  // Attach the serial display's RX line to digital pin 2
  SoftwareSerial mySerial(3,2); // pin 2 = TX, pin 3 = RX (unused)
  //Stringarrays erstellen
  char countstring[17], gesamtstring[8], averagestring[8];

//Zeitmessung
  unsigned long ZeitDerGesamtenMessung; //Zeit seit dem 1. Stück
  unsigned long Vorlaufzeit; //Zeit bevor die Messung beginnt
  float Gesamtdurchschnitt; //Teile/ Ziet seit 1. Stück
  float SecGesamtdurchschnitt; //Ges. / 1000
  int hundertSecGesamtdurchschnitt; //Ges * 100

//Running Avarage
  unsigned long Time;
  unsigned long lastTime;
  float timeDistance;
  float secTimeDistance;

  //Smoothing
  const int numReadings = 50;
 
  float readings[numReadings]; // the readings from the analog input
  int index = 0; // the index of the current reading
  float total = 0; // the running total
  float average = 0; // the average
  float secAverage = 0;
  int hundertSecAverage = 0; //* 100

//Anschluss Relais
  // this constant won't change:
  const int buttonPin = 4; // the pin that the pushbutton is attached to
  const int ledPin = 13; // the pin that the LED is attached to

//Zähler
  // Variables will change:
  int buttonPushCounter = 0; // counter for the number of button presses
  int buttonState = 0; // current state of the button
  int lastButtonState = 0; // previous state of the button

void setup()
{
  // initialize the button pin as a input:
  pinMode(buttonPin, INPUT);
  // initialize the LED as an output:
  pinMode(ledPin, OUTPUT); 
  // initialize serial communication:
  Serial.begin(9600);
  //Display
  mySerial.begin(9600); // set up serial port for 9600 baud
 
  //Running average: Smoothing: initialize all the readings to 0:
  for (int thisReading = 0; thisReading < numReadings; thisReading++)
  readings[thisReading] = 0;
 
  //Reset bestätigen
   mySerial.write(254); // move cursor to beginning of first line
   mySerial.write(128);
   
   mySerial.write("Device is Ready_");
   
   mySerial.write(254); // move cursor to beginning of first line
   mySerial.write(192);
   
   mySerial.write("                "); //2. zeile löschen
}


void loop()
{
// Relais: read the pushbutton input pin:
buttonState = digitalRead(buttonPin);

// compare the buttonState to its previous state
if (buttonState != lastButtonState)
{
  // if the state has changed, increment the counter
  if (buttonState == HIGH)
  {
   
      //Zähler
        // if the current state is HIGH then the button
        // wend from off to on:
        buttonPushCounter++;
        Serial.println("on");
        Serial.print("number of button pushes: ");
        Serial.println(buttonPushCounter);
     
      //Zeitmessung
        ZeitDerGesamtenMessung = millis() - Vorlaufzeit;
        Serial.print("Zeit seit 1. Teil: ");
        Serial.println(ZeitDerGesamtenMessung);
        Gesamtdurchschnitt = ZeitDerGesamtenMessung / buttonPushCounter;
        SecGesamtdurchschnitt = Gesamtdurchschnitt / 1000;
        hundertSecGesamtdurchschnitt = SecGesamtdurchschnitt * 100;
        Serial.print("Gesamtdurchschnitt pro 100 in Sec: ");
        Serial.println(hundertSecGesamtdurchschnitt);
     
      //Running Avarage   
        Time = millis();
        timeDistance = Time - lastTime;
        secTimeDistance = timeDistance / 1000;
        Serial.print("Zeit/Teil ");
        Serial.println(secTimeDistance);
       
        //Smoothing
        // subtract the last reading:
        total= total - readings[index];
        // read from the sensor:
        readings[index] = timeDistance;
        // add the reading to the total:
        total= total + readings[index];
        // advance to the next position in the array:
        index = index + 1;
       
        // if we're at the end of the array...
        if (index >= numReadings)
        // ...wrap around to the beginning:
        index = 0;
     
        // calculate the average:
        average = total / numReadings;
        secAverage = average / 1000;
        hundertSecAverage = secAverage * 100;
        Serial.print("Momentandurchschnitt pro 100 in sec: ");
        // send it to the computer as ASCII digits
        Serial.println(hundertSecAverage);
       
        //Running Avarage last time aktualisieren
        lastTime = millis();
     
      //Daten auf Display ausgeben
        //Clear Display
        mySerial.write(254); // move cursor to beginning of first line
        mySerial.write(128);
       
        mySerial.write(" "); // clear display
        mySerial.write(" ");
       
        //Anzahl
        sprintf(countstring,"%16d",buttonPushCounter); // create strings from the numbers mit 16 Platzhaltern
       
        mySerial.write(254); // move cursor to beginning of first line
        mySerial.write(128);
       
        mySerial.write(countstring); //anzahl Drucken
       
        //Gesamtdurchscnitt
        sprintf(gesamtstring,"%7d",hundertSecGesamtdurchschnitt); // create strings from the numbers mit 7 Platzhaltern
       
        mySerial.write(254); // move cursor to beginning of first line
        mySerial.write(192);
       
        mySerial.write(gesamtstring); //anzahl Drucken
         
        //Momentandurchschnitt
        sprintf(averagestring,"%7d",hundertSecAverage); // create strings from the numbers mit 7 Platzhaltern
       
        mySerial.write(254); // move cursor to beginning of first line
        mySerial.write(201);
       
        mySerial.write(averagestring); //anzahl Drucken
  }

  else
  {
    // if the current state is LOW then the button
    // wend from on to off:
    Serial.println("off");
  }
}


// save the current state as the last state,
//for next time through the loop
lastButtonState = buttonState;

//Vorlaufzeit aktualisiseren

if (buttonPushCounter < 1)
{
 
  Vorlaufzeit = millis();
}

}
4  International / Deutsch / Re: Zähler zählt ohne Impuls on: June 11, 2013, 02:54:19 pm
Zu Michael_x

Mit delay habe ich nicht 2 sonder sogar 3 Zählungen pro Lichtschrankensignal...!?
Code:
void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);

// compare the buttonState to its previous state
if (buttonState != lastButtonState) {
  delay(20);
// if the state has changed, increment the counter
if (buttonState == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);

}}}
5  International / Deutsch / Re: Zähler zählt ohne Impuls on: June 11, 2013, 02:46:08 pm
Also erstmal zu jurs

Hier ein Ausschnitt der Seriellen Ausgabe:


L 396481
H 397193 72
L 397193
H 397194 73
L 397261
H 399894 74
L 399894
H 399895 75
L 400108
H 401579 76
L 401579
H 401580 77
L 401650
H 551716 78
L 551716

Nummer 76 Wurde ordnungsgemäß durch die Lichtschranke ausgelöst.
Nummer 77 kam ohne direkt nach dem Impuls
Nummer 78 "merkwürdige" Zählung ohne erkennbaren Grund
6  International / Deutsch / Re: Zähler zählt ohne Impuls on: June 11, 2013, 01:40:48 pm
Komisch. Wenn ich sketch auf das nötigste reduziere. Zählt er bei jedem Impuls 2mal.
Nach wie vor wird auch völlig ohne Impuls gezählt.
Hier der Sketch:
Code:

// this constant won't change:
const int buttonPin = 4; // the pin that the pushbutton is attached to
const int ledPin = 13; // the pin that the LED is attached to

// Variables will change:
int buttonPushCounter = 0; // counter for the number of button presses
int buttonState = 0; // current state of the button
int lastButtonState = 0; // previous state of the button

void setup() {
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
// initialize the LED as an output:
pinMode(ledPin, OUTPUT);
// initialize serial communication:
Serial.begin(9600);
//Smoothing: initialize all the readings to 0:
for (int thisReading = 0; thisReading < numReadings; thisReading++)
readings[thisReading] = 0;
}


void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);

// compare the buttonState to its previous state
if (buttonState != lastButtonState) {
// if the state has changed, increment the counter
if (buttonState == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(buttonPushCounter);
7  International / Deutsch / Re: Zähler zählt ohne Impuls on: June 11, 2013, 12:51:44 pm
Den Serial display habe ich streng nach anleitung eingerichtet:
https://www.sparkfun.com/tutorials/246

Ich werde stattdessen einfach den buttonPin ändern.
Das hilft aber leider auch nicht.
8  International / Deutsch / Re: Zähler zählt ohne Impuls on: June 11, 2013, 12:12:46 pm
Genau. Die Lichtschranke hat ein extra 12V Netzteil. Das Relais habe ich passend zu der Konstellation gekauft.
9  International / Deutsch / Re: Zähler zählt ohne Impuls on: June 11, 2013, 11:47:58 am
Datenblatt Relais: http://www.produktinfo.conrad.com/datenblaetter/500000-524999/505188-da-01-en-RELAIS_WASCHDICHT_1XUM__5_V.pdf
Datenblatt Lichtschranke: http://www.produktinfo.conrad.com/datenblaetter/500000-524999/507165-da-01-de-EINWEGLICHTSCHRANKE_15M_PNP_2M_CY_111B_P.pdf
Es handelt sich um das Modell Panasonic CY-111BD-P.

Bitte entschuldige, der Kommentar ist veraltet. Ich meine Gelb ist der Ausgang.
10  International / Deutsch / Re: Zähler zählt ohne Impuls on: June 11, 2013, 10:29:33 am
Hier nochmal die Skizze.
11  International / Deutsch / Re: Zähler zählt ohne Impuls on: June 11, 2013, 10:19:39 am
Ja, Schaltung ist auf nem Breadboard. Das dürfte aber nicht der Grund sein. Habe alles gecheckt.
12  International / Deutsch / Re: Zähler zählt ohne Impuls on: June 11, 2013, 09:10:37 am
Vielen Dank, Ich habe das geändert.
Der Zähler zählt allerdings nach wie vor ohne Signal.
Hat also in der Beziehung nichts geändert.

Ergänzung:
Es wirkt sehr zufällig. Manchmal zählt es mehrmals in wenigen Sekunden, machmal über längere Zeit überhaupt nicht.

Aktueller Code:
Code:
//Display
  #include <SoftwareSerial.h>
  // Attach the serial display's RX line to digital pin 2
  SoftwareSerial mySerial(3,2); // pin 2 = TX, pin 3 = RX (unused)
  //Stringarrays erstellen
  char countstring[17], gesamtstring[10], averagestring[10];


//Zeitmessung
  unsigned long ZeitDerGesamtenMessung; //Zeit seit dem 1. Stück
  unsigned long Vorlaufzeit; //Zeit bevor die Messung beginnt
  float Gesamtdurchschnitt; //Teile/ Ziet seit 1. Stück
  float SecGesamtdurchschnitt; //Ges. / 1000
  float hundertSecGesamtdurchschnitt; //Ges * 100

//Running Avarage
  unsigned long Time;
  unsigned long lastTime;
  float timeDistance;
  float secTimeDistance;

  //Smoothing
  const int numReadings = 50;
  
  float readings[numReadings]; // the readings from the analog input
  int index = 0; // the index of the current reading
  float total = 0; // the running total
  float average = 0; // the average
  float secAverage = 0;
  float hundertSecAverage = 0; //* 100

//Anschluss Relais
  // this constant won't change:
  const int buttonPin = 3; // the pin that the pushbutton is attached to
  const int ledPin = 13; // the pin that the LED is attached to

//Zähler
  // Variables will change:
  int buttonPushCounter = 0; // counter for the number of button presses
  int buttonState = 0; // current state of the button
  int lastButtonState = 0; // previous state of the button

void setup()
{
  // initialize the button pin as a input:
  pinMode(buttonPin, INPUT);
  // initialize the LED as an output:
  pinMode(ledPin, OUTPUT);  
  // initialize serial communication:
  Serial.begin(9600);
  //Display
  mySerial.begin(9600); // set up serial port for 9600 baud
  
  //Running average: Smoothing: initialize all the readings to 0:
  for (int thisReading = 0; thisReading < numReadings; thisReading++)
  readings[thisReading] = 0;
}


void loop()
{
// Relais: read the pushbutton input pin:
buttonState = digitalRead(buttonPin);

// compare the buttonState to its previous state
if (buttonState != lastButtonState)
{
  // if the state has changed, increment the counter
  if (buttonState == HIGH)
  {
    
      //Zähler
        // if the current state is HIGH then the button
        // wend from off to on:
        buttonPushCounter++;
        Serial.println("on");
        Serial.print("number of button pushes: ");
        Serial.println(buttonPushCounter);
      
      //Zeitmessung
        ZeitDerGesamtenMessung = millis() - Vorlaufzeit;
        Serial.print("Zeit seit 1. Teil: ");
        Serial.println(ZeitDerGesamtenMessung);
        Gesamtdurchschnitt = ZeitDerGesamtenMessung / buttonPushCounter;
        SecGesamtdurchschnitt = Gesamtdurchschnitt / 1000;
        hundertSecGesamtdurchschnitt = SecGesamtdurchschnitt * 100;
        Serial.print("Gesamtdurchschnitt pro 100 in Sec: ");
        Serial.println(hundertSecGesamtdurchschnitt);
      
      //Running Avarage    
        Time = millis();
        timeDistance = Time - lastTime;
        secTimeDistance = timeDistance / 1000;
        Serial.print("Zeit/Teil ");
        Serial.println(secTimeDistance);
        
        //Smoothing
        // subtract the last reading:
        total= total - readings[index];
        // read from the sensor:
        readings[index] = timeDistance;
        // add the reading to the total:
        total= total + readings[index];
        // advance to the next position in the array:
        index = index + 1;
        
        // if we're at the end of the array...
        if (index >= numReadings)
        // ...wrap around to the beginning:
        index = 0;
      
        // calculate the average:
        average = total / numReadings;
        secAverage = average / 1000;
        hundertSecAverage = secAverage * 100;
        Serial.print("Momentandurchschnitt pro 100 in sec: ");
        // send it to the computer as ASCII digits
        Serial.println(hundertSecAverage);
        
        //Running Avarage last time aktualisieren
        lastTime = millis();
      
      //Daten auf Display ausgeben
        //Clear Display
        mySerial.write(254); // move cursor to beginning of first line
        mySerial.write(128);
        
        mySerial.write(" "); // clear display
        mySerial.write(" ");
        
        
        sprintf(countstring,"%16d",buttonPushCounter); // create strings from the numbers mit 16 Platzhaltern
        
        mySerial.write(254); // move cursor to beginning of first line
        mySerial.write(128);
        
        mySerial.write(countstring); //anzahl Drucken
      
  
  }

  else
  {
    // if the current state is LOW then the button
    // wend from on to off:
    Serial.println("off");
  }
}


// save the current state as the last state,
//for next time through the loop
lastButtonState = buttonState;

//Vorlaufzeit aktualisiseren

if (buttonPushCounter < 1)
{
  Vorlaufzeit = millis();
}

}
13  International / Deutsch / Re: Zähler zählt ohne Impuls on: June 11, 2013, 05:13:55 am
Genau. Das relais ist am buttonPin.
14  International / Deutsch / Zähler zählt ohne Impuls on: June 11, 2013, 04:54:07 am
Hallo Forum,
Das Arduino bekommt über ein Relais ein Signal.
Es soll die Impulse zählen und auf einem Display ausgeben.
Das erste Problem mit der Geschwindigkeit sollte nun gelöst sein (siehe http://forum.arduino.cc/index.php?topic=171249.0).
Nun habe ich bemerkt, dass manchmal weiter gezählt wird ohne dass das Relais schaltet.
Wenn ich nur am Schreibtisch sitze und das System ist an den Strom angeschlossen erhöht sich der Zähler, ohne dass ich dass Relais klicken höre.
15  International / Deutsch / Re: Arduino zu Langsam? on: June 11, 2013, 04:09:38 am
Danke Uwe. So funktioniert es!
Pages: [1] 2 3