INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino hängt sich auf, If anwendungen
25.01.2014, 17:37
Beitrag #1
Arduino hängt sich auf, If anwendungen
Ich habe Probleme mit dem Master bei meinem I2C Anwendung. Ich stehe am Anfang der Programmierung. In dem Stadium habe ich am Master 2 Schalter. Je nach Schalter Stellung werden Befehle über I2C versendet was wiederum von den Slaves zum Schalten verschiedener Relais führt. Insgesamt hängen 10 Slaves an dem Bus. Nun habe ich das Problem das sich der Master nach kurzer zeit aufhängt. Mit dem Reset Knopf kommt er wieder zu laufen für kurze Zeit. In meiner Verzweiflung habe ich mal alle else Anweisungen mit if Anweisungen ersetzt, aber ohne Erfolg. Hat jemand eine Ahnung wo das Problem liegt?


Zitat:// Bowlingbahn Master nur Bandenlicht, Pindecklicht
// by René Gerteis

// I2C Verbindung zu allen 10 Bahnen


// Created 24.01.2014



#include <Wire.h>

void setup()
{
  Wire.begin(); // join i2c bus (address optional for master)
   
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
// pin 3 Schalter für Bandenlicht  
// pin 4 Pindecklicht Disco
}



void loop()
{
int B=0;
int P=0;
if (digitalRead(3) == HIGH)
  {B=1;} 
if (digitalRead(3) == LOW)
  {B=0;}
if (digitalRead(4) == HIGH)
  {P=1;} 
if (digitalRead(4) == LOW)
  {P=0;}
  // Bandenlicht
if (B == 1)
  { 
  Wire.beginTransmission(1); // transmit to device #1
  Wire.write("n"); // sends five bytes
  Wire.write(71); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(2); // transmit to device #2
  Wire.write("n"); // sends five bytes
  Wire.write(71); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(3); // transmit to device #3
  Wire.write("n"); // sends five bytes
  Wire.write(71); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(4); // transmit to device #4
  Wire.write("n"); // sends five bytes
  Wire.write(71); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(5); // transmit to device #5
  Wire.write("n"); // sends five bytes
  Wire.write(71); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(6); // transmit to device #6
  Wire.write("n"); // sends five bytes
  Wire.write(71); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(7); // transmit to device #7
  Wire.write("n"); // sends five bytes
  Wire.write(71); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(8); // transmit to device #8
  Wire.write("n"); // sends five bytes
  Wire.write(71); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(9); // transmit to device #9
  Wire.write("n"); // sends five bytes
  Wire.write(71); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(10); // transmit to device #10
  Wire.write("n"); // sends five bytes
  Wire.write(71); // sends one byte
  Wire.endTransmission(); // stop transmitting
  }
  if (B == 0)
  {
  Wire.beginTransmission(1); // transmit to device #1
  Wire.write("n"); // sends five bytes
  Wire.write(70); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(2); // transmit to device #2
  Wire.write("n"); // sends five bytes
  Wire.write(70); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(3); // transmit to device #3
  Wire.write("n"); // sends five bytes
  Wire.write(70); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(4); // transmit to device #4
  Wire.write("n"); // sends five bytes
  Wire.write(70); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(5); // transmit to device #5
  Wire.write("n"); // sends five bytes
  Wire.write(70); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(6); // transmit to device #6
  Wire.write("n"); // sends five bytes
  Wire.write(70); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(7); // transmit to device #7
  Wire.write("n"); // sends five bytes
  Wire.write(70); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(8); // transmit to device #8
  Wire.write("n"); // sends five bytes
  Wire.write(70); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(9); // transmit to device #9
  Wire.write("n"); // sends five bytes
  Wire.write(70); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(10); // transmit to device #10
  Wire.write("n"); // sends five bytes
  Wire.write(70); // sends one byte
  Wire.endTransmission(); // stop transmitting
  }  
// Pindecklicht   
if (P == 1)
  { 
  Wire.beginTransmission(1); // transmit to device #1
  Wire.write("n"); // sends five bytes
  Wire.write(61); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(2); // transmit to device #2
  Wire.write("n"); // sends five bytes
  Wire.write(61); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(3); // transmit to device #3
  Wire.write("n"); // sends five bytes
  Wire.write(61); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(4); // transmit to device #4
  Wire.write("n"); // sends five bytes
  Wire.write(61); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(5); // transmit to device #5
  Wire.write("n"); // sends five bytes
  Wire.write(61); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(6); // transmit to device #6
  Wire.write("n"); // sends five bytes
  Wire.write(61); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(7); // transmit to device #7
  Wire.write("n"); // sends five bytes
  Wire.write(61); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(8); // transmit to device #8
  Wire.write("n"); // sends five bytes
  Wire.write(61); // sends one byt
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(9); // transmit to device #9
  Wire.write("n"); // sends five bytes
  Wire.write(61); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(10); // transmit to device #10
  Wire.write("n"); // sends five bytes
  Wire.write(61); // sends one byte
  Wire.endTransmission(); // stop transmitting
  }
  if (P == 0)
  {
  Wire.beginTransmission(1); // transmit to device #1
  Wire.write("n"); // sends five bytes
  Wire.write(60); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(2); // transmit to device #2
  Wire.write("n"); // sends five bytes
  Wire.write(60); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(3); // transmit to device #3
  Wire.write("n"); // sends five bytes
  Wire.write(60); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(4); // transmit to device #4
  Wire.write("n"); // sends five bytes
  Wire.write(60); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(5); // transmit to device #5
  Wire.write("n"); // sends five bytes
  Wire.write(60); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(6); // transmit to device #6
  Wire.write("n"); // sends five bytes
  Wire.write(60); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(7); // transmit to device #7
  Wire.write("n"); // sends five bytes
  Wire.write(60); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(8); // transmit to device #8
  Wire.write("n"); // sends five bytes
  Wire.write(60); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(9); // transmit to device #9
  Wire.write("n"); // sends five bytes
  Wire.write(60); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(10); // transmit to device #10
  Wire.write("n"); // sends five bytes
  Wire.write(60); // sends one byte
  Wire.endTransmission(); // stop transmitting
  }  
    
if (P == 1)
  { 
  Wire.beginTransmission(1); // transmit to device #1
  Wire.write("n"); // sends five bytes
  Wire.write(91); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(2); // transmit to device #2
  Wire.write("n"); // sends five bytes
  Wire.write(91); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(3); // transmit to device #3
  Wire.write("n"); // sends five bytes
  Wire.write(91); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(4); // transmit to device #4
  Wire.write("n"); // sends five bytes
  Wire.write(91); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(5); // transmit to device #5
  Wire.write("n"); // sends five bytes
  Wire.write(91); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(6); // transmit to device #6
  Wire.write("n"); // sends five bytes
  Wire.write(91); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(7); // transmit to device #7
  Wire.write("n"); // sends five bytes
  Wire.write(91); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(8); // transmit to device #8
  Wire.write("n"); // sends five bytes
  Wire.write(91); // sends one byt
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(9); // transmit to device #9
  Wire.write("n"); // sends five bytes
  Wire.write(91); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(10); // transmit to device #10
  Wire.write("n"); // sends five bytes
  Wire.write(91); // sends one byte
  Wire.endTransmission(); // stop transmitting
  }
  if (P == 0)
  {
  Wire.beginTransmission(1); // transmit to device #1
  Wire.write("n"); // sends five bytes
  Wire.write(90); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(2); // transmit to device #2
  Wire.write("n"); // sends five bytes
  Wire.write(90); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(3); // transmit to device #3
  Wire.write("n"); // sends five bytes
  Wire.write(90); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(4); // transmit to device #4
  Wire.write("n"); // sends five bytes
  Wire.write(90); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(5); // transmit to device #5
  Wire.write("n"); // sends five bytes
  Wire.write(90); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(6); // transmit to device #6
  Wire.write("n"); // sends five bytes
  Wire.write(90); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(7); // transmit to device #7
  Wire.write("n"); // sends five bytes
  Wire.write(90); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(8); // transmit to device #8
  Wire.write("n"); // sends five bytes
  Wire.write(90); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(9); // transmit to device #9
  Wire.write("n"); // sends five bytes
  Wire.write(90); // sends one byte
  Wire.endTransmission(); // stop transmitting
  Wire.beginTransmission(10); // transmit to device #10
  Wire.write("n"); // sends five bytes
  Wire.write(90); // sends one byte
  Wire.endTransmission(); // stop transmitting
  }   
  
 delay(500);
  
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.01.2014, 23:08
Beitrag #2
RE: Arduino hängt sich auf, If anwendungen
Hallo René,

so wie es aussieht hast du 2 Probleme im Code.
1. Die Schalter/Taster/was auch immer sollten entprellt werden. Such mal bei google nach der bounce-lib
2. Während des delay macht der Arduino nix ausser einem Schläfchen, dh. Druck auf die Taster/Schalter wird garnicht erkannt. Setze dafür lieber millis() ein . Ein Beispiel findet man zB. hier: http://arduino.cc/en/Tutorial/BlinkWithoutDelay

Grüße Ricardo[/code]

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.01.2014, 16:57
Beitrag #3
RE: Arduino hängt sich auf, If anwendungen
Hallo Gerteis,
ähm wenn ich lese das damit 10 Bowlingbahnen gesteuert werden sollen dann beschleicht mich das Gefühl das die 10 Slaves etliche Meter auseinander sind ?
Weil ich könnte mir vorstellen das der I2C Bus dafür nicht ausgelegt ist...Huh
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.01.2014, 18:20 (Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2014 18:25 von Gerteis.)
Beitrag #4
RE: Arduino hängt sich auf, If anwendungen
Hallo Bitklopfer

Die Gesamtlänge des I2C Bus liegt bei ca. 15m
Verwendet wird ein geschirmtes Kat. 6 Kabel.
Wie ich in verschiedenen Foren gelesen habe ist das kein Problem.
Der Bus läuft eigentlich sehr stabil. Nur Stromausfälle auf den Slaves hat er nicht gerne. Dann alle Slaves Resetieren und er läuft wider.
Als Slaves setze ich nachbauten des Arduino Nano ein. Musste aber feststellen das nicht alle nachbauten gleich gut sind. Mein Lieferant aus China hat super funktionierende Ware. Da mir 2 Nano beim Testen abgeraucht sind, bestellte ich 2 bei E-Bay und bin sehr enttäuscht.
LED Power und D13 vertauscht. unkontrolliertes verhalten beim Verlust des I2C Verbindung. Hab natürlich gleich wider 10 Stück beim Chinesen bestellt. Das Arduino für den Master wird durch einen Rasbbery Pi ersetzt. Das ganze wird dann über Intranet gesteuert. Die Bahnen lernen dann Ihre Probleme mitzuteilen.

Hallo Ricardo

Habe soeben die Tasten per Software entprellt. Werde es Morgen testen.

Verstehe das mit Mills nicht richtig.
Kann doch eigentlich einfach delay(500) weglassen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.01.2014, 20:01
Beitrag #5
RE: Arduino hängt sich auf, If anwendungen
(26.01.2014 18:20)Gerteis schrieb:  Hallo Bitklopfer

Die Gesamtlänge des I2C Bus liegt bei ca. 15m
......

UFFFFF..Sad..15 Meter für einen Bus der für Geräteinterne Zwecke definiert wurde...
http://www.i2c-bus.org/de/i2c-bus/
Also sorry, aber als Elektroniker bekomme ich da Bauchweh... da würde ich eher zum RS485 Bus greifen weil da dann jeder Teilnehmer auch mal ausfallen darf ohne das ganze System aufzuhängen...das kann man da Softwaremäßig händeln.

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2014, 05:25
Beitrag #6
RE: Arduino hängt sich auf, If anwendungen
Hallo Bitklopfer

Hast wahrscheinlich recht. Hab mir gleich 20 RS485 Module bestellt. Sollte ja mit dem Raspbeyri Pi kein Problem sein.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2014, 15:21
Beitrag #7
RE: Arduino hängt sich auf, If anwendungen
(27.01.2014 05:25)Gerteis schrieb:  Hallo Bitklopfer

Hast wahrscheinlich recht. Hab mir gleich 20 RS485 Module bestellt. Sollte ja mit dem Raspbeyri Pi kein Problem sein.

Hallo Gerteis,
das dürfte wohl eine umsichtige Entscheidung gewesen sein da ein RasPi Port zudem noch recht empfindlich auf Überspannungen ist. Hier ist zu beachten das ein RasPi Port nur 3,3 Volt Exclamation verträgt während man beim Arduino sich im Allgmeinen in der 5V Welt bewegt. An der Stelle solltest du auf den Spannungspegel der RS485 Treiber achten.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2014, 08:47
Beitrag #8
RE: Arduino hängt sich auf, If anwendungen
Habe mir das RasPiComm bestellt, ist damit kein Problem
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino lässt sich nicht installieren bergfrei 4 135 20.11.2016 18:34
Letzter Beitrag: bergfrei
  Arduino hängt beim Upload deranda 11 495 12.08.2016 21:27
Letzter Beitrag: hotsystems
  Arduino lässt sich nicht mehr beschreiben Maxi290997 15 962 07.08.2016 11:40
Letzter Beitrag: Maxi290997
  Programme lassen sich nicht auf das Gemma Board downloaden! Jack Sparrow 13 561 08.04.2016 10:01
Letzter Beitrag: hotsystems
  Servo.h lässt sich nicht einbinden ^^ EvilBen 5 692 08.02.2016 18:07
Letzter Beitrag: hotsystems
  Daten auf SD-Card werden nur geschrieben, wenn Nano am USB-Port hängt Nathea 6 478 24.01.2016 16:42
Letzter Beitrag: Nathea
  Sketch läßt sich nicht hochladen - not in sync Stephan_56 20 1.768 17.01.2016 23:00
Letzter Beitrag: Bitklopfer
  Ergebnis lässt sich nicht speichern? schuballaa 2 624 30.08.2015 17:07
Letzter Beitrag: hotsystems
Shocked Arudrino Leonardo mit Display hängt sich auf EvilKnivel 0 543 26.08.2015 20:33
Letzter Beitrag: EvilKnivel
  serieller Monitor friert ein oder Programm hängt sich auf MaHaI976 3 781 22.06.2015 13:45
Letzter Beitrag: MaHaI976

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste