Verfasste Forenbeiträge
-
AutorBeiträge
-
Stefan HermannVerwalter
Hallo Joachim,
Franz-Peter hat das schon sehr gut beschrieben. Nur eine Ergänzung: Wie man so eine State-Machine einbaut, hab ich hier erklärt: Tee-Timer mit Arduino. Ich hoffe, das hilft dir :-)
Liebe Grüße
Stefan HermannVerwalterDas ganze Thema ist mega spannend. Ich kann dir nur empfehlen, dich an Dmitri Katz zu wenden. Er ist super aktiv in der Szene und kann dir vielleicht helfen. Hier ist ein Interview mit ihm und seine Email-Adresse ist auch dabei. Viel Glück
Stefan HermannVerwalterHallo Dirk, danke für die Rückmeldung! Schön, dass es jetzt klappt :-)
Stefan HermannVerwalter@Christian: Super! Daran könnte es gelegen haben.
Stefan HermannVerwalterHm, komplexes Problem, aber kann es sein, dass du dich einfach bei der IP vertippt hast? Also statt:
IPAddress ip(192, 168, 0, 106); // Ethernet shield (W5100) IP address IPAddress server(192,106,0,102); // MTTQ server IP address
Das hier verwenden:
IPAddress ip(192, 168, 0, 106); // Ethernet shield (W5100) IP address IPAddress server(192,168,0,102); // MTTQ server IP address
Kommt mir komisch vor, dass die IP vom Server 192.106.0.102 sein soll. Ich hoffe, das war es, sonst wird es schwierig :-)
Stefan HermannVerwalterJa cool, dass du es gefunden hast. Eine Anmerkung: Das einfache Gleichheitszeichen weist einen Wert zu. D.h. in diesem Fall:
while (SG_3=LOW){
wird SG_3 auf LOW gesetzt. Somit ist die Abfrage wahr. Du musst wahrscheinlich eher das doppelte Gleichheitszeichen verwenden:while (SG_3==LOW){
Jetzt wird geprüft, ob SG_3 LOW ist oder nicht.Liebe Grüße :-)
Stefan HermannVerwalterHm, gute Frage. Ich kann es leider nicht nachbauen, aber das Hin- und Her-Schalten kannst du mit einem Timer machen. So sieht der Code dann aus. Wie gesagt, testen kann ich den leider nicht.
#include <SevSeg.h> #include <SimpleDHT.h> SevSeg sevseg; int pinDHT11 = A4; SimpleDHT11 dht11(pinDHT11); void setup() { Serial.begin(9600); byte numDigits = 4; byte digitPins[] = {2, 3, 4, 5}; byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins); } void loop() { byte temperature; int err = SimpleDHTErrSuccess; if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) { if (millis()%10000<5000) { sevseg.setNumber((int)temperature); } else { sevseg.setNumber((int)humidity); } Serial.print((int)temperature); Serial.print(" *C, "); Serial.print((int)humidity); Serial.println(" H"); } sevseg.refreshDisplay(); }
Stefan HermannVerwalterAch so: Die Schaltung geht jetzt vom GND in den mittleren Anschluss des Encoders, die äußeren Anschlüsse sind mit den Arduino-Pins 3 und 4 verbunden.
Stefan HermannVerwalterHallo Zerspaner,
vielen Dank für deine Frage. Ich hab mir den Code mal angesehen. Im Grunde gehst du das Thema schon richtig an. Du hast nur einen von den beiden Pins nicht als Input deklariert. Passiert mir auch immer wieder. Dann braucht der Encoder Pull-Up-Widerstände. Du kannst die internen vom Arduino nutzen. Anstelle von pinMode(pin,INPUT) schreibt man dann einfach pinMode(pin, INPUT_PULLUP). Ich empfehle auch, Pin 0 und 1 vom Arduino-Board nicht zu verwenden. Die werden für die Datenübertragung zum Computer verwendet und können ziemlich unvorhersehbares Verhalten zeigen. Hier der Code:
int encoder0PinA = 3; int encoder0PinB = 4; int messungPin1 = LOW; int messungPin1Alt = LOW; int encoderWert = 0; void setup() { pinMode(encoder0PinA, INPUT_PULLUP); pinMode(encoder0PinB, INPUT_PULLUP); Serial.begin(115200); } void loop() { messungPin1 = digitalRead(encoder0PinA); if ((messungPin1 == HIGH) && (messungPin1Alt == LOW)) { if (digitalRead(encoder0PinB) == LOW) { encoderWert--; } else { encoderWert++; } Serial.println(encoderWert); } messungPin1Alt = messungPin1; }
BTW: Dieses Verfahren ist nicht sehr präzise und das Arduino muss die ganze Zeit »zuhören«, was das Programm langsam macht. Wenn dich das stört, gibt es Programm-Bibliotheken, die da Abhilfe schaffen oder du nutzt die Interrupts des Arduinos. Ich hab hier mal was rüber geschrieben: Arduino-Encoder
Ich hoffe, das hilft dir schon mal weiterhilft :)
Liebe Grüße
Stefan HermannVerwalterHallo Dirk,
ich weiß es nicht ganz genau, aber einen Fehler hab ich entdeckt. Bei den if-Abfragen musst du ein doppeltes Gleichheitszeichen verwenden. Also statt:
if (tage = "Monday") { tage = "Montag"; }
Musst du:
if (tage == "Monday") { tage = "Montag"; }
benutzen und das natürlich bei allen ifs.
Ich hoffe, das hilft schon mal weiter.
Liebe Grüße
Stefan HermannVerwalterHallo Stefan,
also du hast zwei Möglichkeiten. Entweder du nutzt eine Taster-Schaltung mit Pull-Up Widerstand oder du verwendest die internen Pull-Ups des Arduino-Boards:
int T1 = 22; int T2 = 23; void setup(){ Serial.begin(9600); pinMode(T1, INPUT_PULLUP); pinMode(T2, INPUT_PULLUP); } void loop() { if(digitalRead(T1) == HIGH) { Serial.print(“ T1 wurde gedrückt“); } if(gigitalRead(T2) == HIGH) { Serial.print(“ T2 wurde gedrückt“); } }
Liebe Grüße :-)
Stefan HermannVerwalterHallo Hans-Peter,
ich benutze für solche Aufgaben gern State-Machines. Das habe ich hier mal näher beschrieben: Tee-Timer mit Arduino.
Das ist ganz ähnlich zu den if-Abfragen, die du verwendest, gibt aber etwas mehr Struktur. Ich hoffe, das hilft dir ein bisschen.
Liebe Grüße
Stefan
Stefan HermannVerwalterHallo Hans-Peter,
das klingt ja aufregend. Da wünsche ich dir auf jeden Fall viel Spaß dabei!
Liebe Grüße
Stefan
Stefan HermannVerwalterHallo Stefan,
das klingt nach einem spannenden Projekt. Um so viele Servos zu steuern würde ich auf jeden Fall einen Servotreiber empfehlen. Dazu habe ich hier mal was geschrieben: Viele Servos mit Arduino steuern. Um die Taster auszulesen würde ich Shift-Register verwenden. Findest du auf jeden Fall, wenn du das googelst. Da muss ich mal einen Artikel zu verfassen. Schicke gern mal ein paar Fotos von dem, was du baust :-)
Liebe Grüße
Stefan
Stefan HermannVerwalterHi Lukas, spannende Frage. Also ich kann dir nur empfehlen, dir die Bounce-Library mal anzusehen. Die hat sowohl die Flankenerkennung als auch das Entprellen eingebaut. Liebe Grüße Stefan :-)
-
AutorBeiträge