Show Posts
|
|
Pages: [1] 2 3 ... 39
|
|
1
|
International / Deutsch / Re: Zwei Arduino über (Software) Serial kommunizieren lassen
|
on: May 20, 2013, 10:19:00 am
|
Hallo Uwe, vielen Dank. Den Hauptfehler habe ich glatt übersehen (dass ich nur drei Werte einlese). Habe mal den Code etwas angepasst: void getTime() { if (Serial.available() >= 6) { device = Serial.read(); if (device>=60) { incomingByte[0] = device; incomingByte[1] = Serial.read(); incomingByte[2] = Serial.read(); incomingByte[3] = Serial.read(); incomingByte[4] = Serial.read(); incomingByte[5] = Serial.read(); if (incomingByte[0]=='A') { if (incomingByte[2]==0) hour=incomingByte[4]; if (incomingByte[2]==1) mins=incomingByte[4]; if (incomingByte[2]==2) sec=incomingByte[4]; } if (incomingByte[0]=='B') { milliliter=incomingByte[4]; EEPROM.write(0, milliliter); x = milliliter/50; dosingTime[0] = 30750*x; dosingTime[1] = 29250*x; dosingTime[2] = 32250*x; dosingTime[3] = 381000*1.083*x; } while(Serial.available()>0) Serial.read(); } } } Der Sendecode sieht jetzt so aus: void writeToAquaDose(char device, unsigned int channel, unsigned int value) { mySerial.print(device); mySerial.print(','); mySerial.print(channel); mySerial.print(','); mySerial.print(value); mySerial.print('@'); } Folgende Fragen habe ich noch zu deinen Tipps: zu 1) funktioniert das so: if (device>=60) { .... ? Ein '@' habe ich jetzt beim Senden definiert. Wie Schließe ich denn dann eine Übertragung als Fertig ab? zu 2) mache ich das nicht mit Schritt 1? Ich lese ja nur ein wenn ich ein ASCII >60 lese? zu 3) welchen Vorteil hat es denn Zahlen per Char zu übertragen?? Reicht es dann die Variablen als char zu definieren? Gruß
|
|
|
|
|
2
|
International / Deutsch / Re: Zwei Arduino über (Software) Serial kommunizieren lassen
|
on: May 18, 2013, 05:55:40 pm
|
Hallo, habe das heut endlich mal - leider erfolglos - getestet. Der Arduino Mega soll die Uhrzeit per SoftwareSerial senden: void setup() { mySerial.begin(19200); hour=5; mins=59; sec=40; }
void getTime() { time[0]=hour; time[1]=mins; time[2]=sec; for (int i=0; i<3; i++) { if (prevValueTime[i] != time[i]) { writeToAquaDose('A', i, time[i]); prevValueTime[i] = time[i]; } } }
void writeToAquaDose(char device, unsigned int channel, unsigned int value) { mySerial.print(device); mySerial.print(','); mySerial.print(channel); mySerial.print(','); mySerial.print(value); mySerial.println(); }
void loop() { getTime(); sec++; if (sec==60) { sec=0; mins++; } if (mins==60) { mins=0; hour++; }
delay(100); }
Das klappt auch soweit. Ich überprüfe, ob sich hour mins oder sec ändert und schicke es dann über eine FUnktion raus. Empfangen werden soll das dann auf einem Arduion 328 mit HardwareSerial und soll dann 4 Relais schalten. //*****************************************INITIALISIERUNG************************************* //********************************************************************************************* #include <EEPROM.h> boolean neustart = true; //********************************************Dosing***************************************** const byte dosing[] = {12, 11, 10, 8}; boolean doseStat[] = {false, false, false, false}; int milliliter=120; //ml pro trace float x = milliliter*0.02; //5mal10ml unsigned long dosingTime[] = { (30750*x), (29250*x), (32250*x), (33700*1.083*x)}; //*zeit für 10ml *x unsigned long doserMillis[4]; //******************************************SERIAL************************************** byte incomingByte[3]; char device; //#include <SoftwareSerial.h> //SoftwareSerial mySerial(8, 7); // RX, TX //Serial: 0 (RX) and 1 (TX) //********************************************TIME************************************** byte hour, mins, sec;
void setup() { Serial.begin(19200); //********************************************Dosing***************************************** for (int i=0; i<4; i++) { pinMode(dosing[i], OUTPUT); digitalWrite (dosing[i], LOW); } }
void loop() { if (neustart == true) { milliliter = EEPROM.read(0); neustart=false; } getTime(); autoDose(); }
void getTime() { if (Serial.available() >= 3) { device = Serial.read(); incomingByte[0] = device; incomingByte[1] = Serial.read(); incomingByte[2] = Serial.read(); if (incomingByte[0]=='A') { if (incomingByte[1]==0) hour=incomingByte[2]; if (incomingByte[1]==1) mins=incomingByte[2]; if (incomingByte[1]==2) sec=incomingByte[2]; } if (incomingByte[0]=='B') { milliliter=incomingByte[2]; EEPROM.write(0, milliliter); x = milliliter/50; dosingTime[0] = 30750*x; dosingTime[1] = 29250*x; dosingTime[2] = 32250*x; dosingTime[3] = 381000*1.083*x; } while(Serial.available()>0) Serial.read(); } }
void autoDose() { if (hour==7 && (mins==0 || mins==12 || mins==24 || mins==36 || mins==48 ) && doseStat[0]==false) { // Triton Base 1 doserMillis[0]=millis(); doseStat[0]=true; } if (hour==7 && (mins==4 || mins==16 || mins==28 || mins==40 || mins==52 ) && doseStat[1]==false) { // Triton Base 2 doserMillis[1]=millis(); doseStat[1]=true; } if (hour==7 && (mins==8 || mins==20 || mins==32 || mins==44 || mins==56 ) && doseStat[2]==false) { // Triton Base 3 doserMillis[2]=millis(); doseStat[2]=true; } if (hour==6 && (mins==0 || mins==5 || mins==10 || mins==15 || mins==20 || mins==25 || mins==30 || mins==35 || mins==40 || mins==45 ) && doseStat[3]==false) { // Wechselwasser doserMillis[3]=millis(); doseStat[3]=true; } for (int i=0; i<4; i++) { if (millis() - doserMillis[i] < dosingTime[i] && doseStat[i]==true) { digitalWrite(dosing[i], HIGH); } if (millis() - doserMillis[i] > dosingTime[i] && doseStat[i]==true) { digitalWrite(dosing[i], LOW); doseStat[i]=false; } } }
Habe den Code vom MEGA (=Sender) nicht vollständig kopiert, der Übersicht halber. Alles andere funktioniert definitiv, hängt nur an der Serial. Um 6:00:00 soll eigentlich ein Relais geschalten werden, klappt leider nicht. Schaut euch das mal an, komischerweise hat das so zwischen Processing und Arduino geklappt. Gruß
|
|
|
|
|
4
|
International / Deutsch / Zwei Arduino über (Software) Serial kommunizieren lassen
|
on: May 15, 2013, 02:46:32 am
|
Hallo, Ich würde gerne von einem Arduino, der an eine RTC angeschlossen ist, die Uhrzeit auf einen zweiten Arduino senden. Da die beiden dicht nebeneinander stehen, möchte ich dafür ungern die doch recht teuren XBEE Module nutzen sondern lieber eine einfach Kabelverbindung aufbauen. Zudem möchte ich das über Software Serial machen, sofern möglich. Ich stelle mir das so vor, wie in den beiden folgenden Links dargestellt, also GND<>GND, Rx<>TX, TX<>RX: http://www.google.de/imgres?um=1&hl=de&biw=1920&bih=979&tbm=isch&tbnid=hWVP6h84v55rKM:&imgrefurl=http://sourceforge.net/p/arduino-icsc/&docid=r8q0DQKbloiO1M&imgurl=http://scratchpad.majenko.co.uk/SimpleComm.png&w=400&h=252&ei=BDiTUYaUJZDcsgbp84DIDQ&zoom=1&iact=hc&vpx=375&vpy=221&dur=926&hovh=178&hovw=283&tx=233&ty=102&page=1&tbnh=144&tbnw=229&start=0&ndsp=54&ved=1t:429,r:38,s:0,i:197http://www.google.de/imgres?um=1&hl=de&biw=1920&bih=979&tbm=isch&tbnid=odFWQgERq51cHM:&imgrefurl=http://arduino.cc/en/Tutorial/MasterWriter&docid=e8CJLENIz09_6M&imgurl=http://arduino.cc/en/uploads/Tutorial/Master_Sender_bb.png&w=926&h=366&ei=BDiTUYaUJZDcsgbp84DIDQ&zoom=1&iact=hc&vpx=4&vpy=144&dur=1251&hovh=141&hovw=357&tx=220&ty=60&page=1&tbnh=111&tbnw=254&start=0&ndsp=54&ved=1t:429,r:18,s:0,i:132Ist das so einfach möglich oder habe ich etwas übersehen? Kann ich die Daten auch einfach mit Serial.print und Serial.read übertragen und auslesen (wie bei XBEE) oder muss ich da wie in den beiden Beispielen entweder die ICSC Library oder die WIRE Library nutzen? Ich bin da ein wenig verwirrt und erhoffe mir ein wenig AUfklärung. Die Arduinos werden eigenständig laufen und dabei über 12v mit Strom versorgt. Viele GRüße Thorsten
|
|
|
|
|
6
|
International / Deutsch / Re: Uln 2003
|
on: April 25, 2013, 03:08:50 pm
|
|
Hi,
habe mal das ganze grad noch mal aufm Breadboard nachgebaut. Habe da das gleiche Problem wie mit der Platine. Dann mal das ganze mit nem Transistor BC 337-40 nachgebaut, 1kOhm zur Basis. Damit funktioniert das ganze wunderbar.
Kann mir das einer erklären? Ich dachte immer ein ULN ist nichts anderes als 7 Transistoren in einem IC??
Vielen Dank für die Aufklärung
Gruß Thorsten
|
|
|
|
|
7
|
International / Deutsch / Re: Uln 2003
|
on: April 24, 2013, 04:02:13 pm
|
|
Hi, habe noch mal meinen Schaltplan in den anhang geladen. Was man dort nicht genau sieht: Ganz rechts am Rand ist der 12v Verbraucher (3LEDs + Res) zwischen geschaltet und in der untern Lücke die Stromversorgung (12v).
Ist der Cap 0.1uF zwischen ULN out und 12V Supply in Ordnung oder kann es sein, dass der das Signal stört und deswegen nciht richtig gedimmt wird?
VG
|
|
|
|
|
8
|
International / Deutsch / Re: Uln 2003
|
on: April 23, 2013, 05:43:20 pm
|
|
Hi,
Habe noch ein wenig über den uln gesucht: 1) muss ich eigentlich die 12v versorgungsspannung mit dem com vom uln verbinden? Habe jetzt einige threads gelesen bzw. Schaltungen gesehen wo das nicht der fall war. 2) einige Routen die nicht belegten Eingänge auf GND - ist das sinnvoll?
Gruß Thorsten
|
|
|
|
|
9
|
International / Deutsch / Re: Uln 2003
|
on: April 23, 2013, 09:47:21 am
|
Hi STefan, wie gesagt, meine KSQ und die dahinterliegenden 6*3W HighPower LEDs bekomme ich damit komplett gedimmt. Funktinoiert also einwandfrei. Nur mit dem ULN hab ich gerade mal so meine Probleme. Habe mal den technischen Service von Sparkfun kontaktiert, vielleicht können die ja weiterhelfen. Hier im Forum scheint es das Problem ja noch nicht so oft gegeben zu haben bzw. es kann mir niemand mit dieser Konstellation (ULN + Sparkfun TLC) weiterhelfen. Wenn doch, würde mich freuen. Uwe hat doch eigentlich auf jedes Problem eine hilfreiche (manchmal auch ernüchternde) Antwort, vielleicht meldet er sich ja noch mal  VG Thorsten
|
|
|
|
|
11
|
International / Deutsch / Re: Uln 2003
|
on: April 23, 2013, 06:29:21 am
|
Ok, jetzt stehen hier aber unterschiedliche Meinungen bzw. Wissensstände im Raum: Zitat STefan/Eisebär: Du darfst ihn nicht analog ansteuern, sondern mußt PWM verwenden (und nochmal: PWM hat NICHTS mit 0V-5V zu tun !). Zitat Marcus W: Es liefert ein PWM-Signal. Ein Signal das aus 5V-Pulsen besteht und nicht aus Pegeln. Demnach müsste es doch funktionieren: mein TLC liefert ein PWM Signal und der ULN lässt sich nur durch PWM reglen. D.h. für mich, dass mein Fehler wo anders liegt, und nicht an der Schaltung (bzw. einer falschen Schaltung) Ich denke, ich werde doch später mal den Schaltplan einstellen Gruß
|
|
|
|
|
12
|
International / Deutsch / Re: Software Serial auf PIN12 trotz TLC 5940
|
on: April 22, 2013, 04:08:07 pm
|
|
Hi, wieso der XERR aktiviert ist kann ich dir nicht sagen - ich hätte jetzt vermutet dass das die TLC Bibliothek voreingestellt macht, da es auch Anwendungsbeispiel gibt, wo der genutzt wird/werden kann (wenn ich das richtig gelesen habe).
Habe jetzt aber einfach eine Brücke auf einen anderen PIN gelegt und damit ging es.
Trotzdem danke, ggfs teste ich das die Tage noch mal.
Gruß Thorsten
|
|
|
|
|
13
|
International / Deutsch / Re: Uln 2003
|
on: April 22, 2013, 04:06:04 pm
|
Du darfst ihn nicht analog ansteuern, sondern mußt PWM verwenden (und nochmal: PWM hat NICHTS mit 0V-5V zu tun !).
Hi Stefan, versteh ich das im Umkehrschluss richtig: Das TLC Shield von Sparkfun liefert kein PWM Signal sondern ein analoges Signal? Allerdings habe ich es ja auch mit dem PWM Signal direkt vom Arduino getestet, und das hat auhc nicht geklappt. very strange.... Gruß
|
|
|
|
|
14
|
International / Deutsch / Re: Uln 2003
|
on: April 22, 2013, 03:35:07 am
|
Hallo Uwe, ich nutze das Shield von Sparkfun ( https://www.sparkfun.com/products/10616). Die Schaltung ist so modifiziert, dass sich der TLC als PWM Board nutzen lässt. Ich steuere damit 15 Konstantstromquellen per PWM ohne Probleme. Ich habe mal versucht den ULN über einen 8BIT analog Ausgang des Arduinos zu steuern, auch hier habe ich das Problem, dass sich die Spannung nur zwischen 7 und 12V regeln lässt. Daher meine initiale Frage: Lässt sich ein ULN2003 überhaupt komplett regeln? d.h. wenn ich eine Spannung von 12V anlege, kann ich diese mit 8Bit zwischen 0 und 12V regeln? Wenn das so sein sollte, dann weiss ich dass ich auf weitere Fehlersuche gehen muss, wenn nicht, dann muss ich mir eine andere Lösung ausdenken. Vielen Dank und Gruß Thorsten
|
|
|
|
|
15
|
International / Deutsch / Re: Uln 2003
|
on: April 21, 2013, 01:48:50 pm
|
|
Hi, was genau mess ich denn dann, wenn ich das Multimeter an den Pin (in meinem Fall ein TLC5940, mit dem ich das PWM SIgnal erzeuge) und GND lege? Also ich mess da immer ein Spannung von 0.02 bis 5.0 v je nach PWM Wert?
Schaltung habe ich hier grad nicht zur Hand, aber die passt, es kommt ja ein Signal an. Kann die aber noch mal posten
Gruß
|
|
|
|
|