[Casecon] Light Glass [Worklog]

Ich kanns auch kaum glauben. :D

Ja Madpolyg0n und noname, so war die Frage gemeint. Bei Digital 2 geht's los und man schreibt immer nur 2. Bei den Analogen kann man das ja nicht machen , Analog 2 = 2 , da er ja dann den digitalen adressiert.
Also zählt man entweder weiter mit 14-etc oder adressiert sie dann direkt mit A2 .
Und genau das war mir nicht klar. Die Analogen wurden bisher in keinen meiner Sketche benutzt.

Was macht das jetzt für einen Unterschied ob digital oder analog?
Beim TV oder anderen Bereichen ist mir das schon klar aber was sollte ich am Arduino auf keinen Fall an den analogen oder digitalen anschließen?
 
Bei den digitalen gibts eben nur Spannung oder keine Spannung, bei den analogen kannst du mit ner Auflösung von 10bit lesen (analogRead). analogWrite funktioniert dann auf den PWM Pins.

The Nano has 8 analog inputs, each of which provide 10 bits of resolution (i.e. 1024 different values). By default they measure from ground to 5 volts, though is it possible to change the upper end of their range using the analogReference() function. Analog pins 6 and 7 cannot be used as digital pins.
Arduino - ArduinoBoardNano

Writes an analog value (PWM wave) to a pin. Can be used to light a LED at varying brightnesses or drive a motor at various speeds. After a call to analogWrite(), the pin will generate a steady square wave of the specified duty cycle until the next call to analogWrite() (or a call to digitalRead() or digitalWrite() on the same pin). The frequency of the PWM signal on most pins is approximately 490 Hz. On the Uno and similar boards, pins 5 and 6 have a frequency of approximately 980 Hz. Pins 3 and 11 on the Leonardo also run at 980 Hz.

On most Arduino boards (those with the ATmega168 or ATmega328), this function works on pins 3, 5, 6, 9, 10, and 11. On the Arduino Mega, it works on pins 2 - 13 and 44 - 46. Older Arduino boards with an ATmega8 only support analogWrite() on pins 9, 10, and 11.]
Arduino - AnalogWrite
 
Ja Madpolyg0n und noname, so war die Frage gemeint. Bei Digital 2 geht's los und man schreibt immer nur 2. Bei den Analogen kann man das ja nicht machen , Analog 2 = 2 , da er ja dann den digitalen adressiert.
Also zählt man entweder weiter mit 14-etc oder adressiert sie dann direkt mit A2 .
Und genau das war mir nicht klar. Die Analogen wurden bisher in keinen meiner Sketche benutzt.

Jetzt hab ichs verstanden :) War für mich zu selbstverständlich das man A2 schreibt...

Ansonsten isses genauso wie Madpolygon schreibt. Digital kann nur High oder LOW (0v oder 5v) sowohl rein als auch raus. Bei den Analog Pins kannst du in besagter 10bit Auflösung lesen (1024 Werte). Ich hab das zum Beispiel mit Drehpotis verwendet um die Geschwindigkeit eines Motors recht genau einzustellen. Falls du das mal brauchst, sag Bescheid, gibt ein paar Tricks, dass die eingelesenen Werte nicht so "wackeln" wenn du ein günstiges Poti verwendest. Wenn der Fall eintritt wirste wissen was ich meine.
Solange du die Pins beim Strom nicht überlastest, kannst du alles überall dranhängen, ansonsten wüste ich grad nichts was man nicht machen darf. Für die Anwendung sollte es halt Sinn machen ;) Also keinen Drehpoti an einen Digital Pin, usw...
 
Hast du denn schon ne grobe Vorstellung wie lange das öffnen der Tür dauern soll? Mir ist nämlich bei der Stepper.h aufgefallen, dass die Funktion blockierend ist. Sprich während der Motor läuft geht am Arduino nix anderes.

Dann hab ich mich noch an eine Eigenheit von Schrittmotoren erinnert, und zwar, dass diese Schritte verlieren können. Heißt der Arduino gibt zwar den Befehl einen Schritt zu machen, jedoch rutscht der Motor durch, weil er nicht genügend Kraft hat, oder die Geschwindigkeit zu hoch ist. Wenn das öfters passiert landest du am Ende woanders als geplant bzw gezählt. Ich weiß nicht, ob das bei deinem Projekt relevant ist, da der Öffnungsweg nicht soo lang ist und der Motor ja ne Übersetzung hat.
Ich hab das bei meinem motorisiertem Dolly über Endanschläge gelöst, sowas wie das hier (MAR 1050.5202: Schnappschalter, 5A-250V Wechsler, Lötan. bei reichelt elektronik), gibts bestimmt auch in günstiger...
Ich kann fahren wie ich will, wenn ich am Ende der Schiene bin gehts in die entsprechende Richtung nicht mehr weiter.

Dann hab ich jetzt doch auch so einen Motor bestellt, will rausfinden ob die Accelstepper nicht doch damit läuft. Nicht, dass ich dir die unbedingt aufdrängen möchte! Ist mehr persönlicher Anreiz das auszuprobieren. Wenn ich am Montag von nem Job zurück bin gehts hier auch ans basteln :)
 
Das mit den Schritten verlieren ging mir auch schon durch den Kopf.
Ich würd sagen ich bau erst mal ein und dann seh ich weiter, wiel lang es dauert, wie schnell ich es hätte und wie zuverlässig der Motor arbeitet.
Das Projekt ist ja damit nicht fertig.
Wie schlimm ist es denn wenn ich ihm zu öffnen und schließen ein paar steps mehr verpasse um verloren Schritte auszugleichen?
Schon klar nach 2-3 mal öffnen wird dann gar nic mehr passen, nur mal interesse halber.

Wie schlimm wäre den ein durchrutschen für den Motor, bzw ein durchdrehen?
 
Naja entweder öffnet oder schließt deine Klappe nicht mehr ganz oder sie wird überspannt und dann ist halt die Frage was zuerst den Geist aufgibt, deine Halterungen/die Scheibe oder der Motor :lol:

Ist halt abhängig davon wie viel Kraft der Motor wirklich aufbringt und ob er beim "Überspannen" warm wird oder nicht. Wird er nicht warm bzw. wärmer, dann gehen irgendwann zuerst deine anderen Teile kaputt/verbiegen, ansonsten brennt irgendwann der Antrieb durch xD
 
wäre ja auch zu schön gewesen aber die Schiene ist Kugelgelagert. Wennich die 3x auf und zu schiebe verliert sie quasi auch schritte, sie fährt dann an einer Seite nicht mehr bis zum Anschlag. Mal schauen ob der Motor das Schafft oder wie ich das löse. Die größere Schiene mit Räder hätte halt zu viel Platz in Anspruch genommen.

Bin gestern auch nicht mehr dazu gekommen mit den Leds zu beginnen, hab Stunden in einem anderen Forum verbracht weil ich meine Fotos ähnlich wie hier nicht verlinken konnte. Noch etwas auf Facebook unterwegs gewesen und den Riing endlich fertig gemacht. ;-)

image.jpeg
 
Zuletzt bearbeitet:
Zur Not holst dir noch zwei kleine Reed Kontakte und machst damit ne Endlagenüberprüfung und lässt den Antrieb halt immer solange laufen bis die entsprechende Endlage erreicht ist.
 
kleine Taster mit so 4 kleine füße unten dran(wie schieberegister) hab ich da, der Taster sieht etwas aus wie der Resetknopf des arduinos, kp wie das Ding heist. Ist zwar blöd weil dann noch mehr Kabel sind aber mal schauen.

Über eine Sirene sollt ich mir mal den Kopf zerbrechen. Eine lautsprecher würde ich ungern nehmen. Was gibts da für möglichkeiten?

Dann überleg ich auch schon ne weile welches Lichtspiel man für das Hochfahren des Pc s nimmt.
 
Über eine Sirene sollt ich mir mal den Kopf zerbrechen. Eine lautsprecher würde ich ungern nehmen. Was gibts da für möglichkeiten?
Ich dachte das wäre nur Spaß xD
Such mal nach "Piezo Speaker" oder "Piezo Buzzer". Von Mainboards kennt man ja die kleinen Dinger, keine Ahnung, ob dir so einer reichen würde. Es gibt aber auch welche die einiges lauter sind :ugly: . Die ham bloß Anschlüsse + und -, kannste also einfach steuern, indem du einen Pin auf high stellst. Aber achte drauf was die an Spannung und Strom brauchen.
 
okay, dann werd ich mal in der Richtung suchen .
Stellt eich einfach eine Museumsvitrine vor in der die Kronjuwelen ausgestellt werden. (Mission Imposible) so in der Art möchte ich die Show aufziehen nur das es sich um Hardware handelt und das ganze mit dem Casemodding Bereich kombiniert wird. Museumsvitrine verkauft sich besser als Projekt. :-)
 
Danke, aber ups der Vorschlag kam ja von Madpolyg0n. Sorry etwas stressig heute muss für jeden Post mehrmals unterbrechen weil es ich bei Privatkundschaft arbeite.
 
Hello.:)

Iwie komm ich hier nicht weiter.
Ich versuch die ganze Zeit den Motor via IR und Tastenfeld zu steuern aber so richtig will das ganze nicht.
Erst mal habe ich wie in Davids Anleitung den IR Befehl von ´case´ zu ´if´ geändert da das vermischen der beiden wohl nicht klappt.
Nun habe ich es auch mal abwechselnd zum laufen bekommen, gab die irrsinigsten Ergebnisse.:ugly:

Jetzt steht der Code halbwegs aber irgendwas blockiert das Tastenfeld. Die IR läuft mit dem Code tadellos.
Sieht zufällig jemand von euch den Fehler auf anhieb?

Code:
#include "Stepper.h"
#include "Keypad.h"
#include "IRremote.h"

/*----- Variables, Pins -----*/
#define STEPS  32   // Number of steps per revolution of Internal shaft
int  Steps2Take;  // 2048 = 1 Revolution
int receiver = 12; // Signal Pin of IR receiver to Arduino Digital Pin 12

/*-----( Declare objects )-----*/
// Setup of proper sequencing for Motor Driver Pins
// In1, In2, In3, In4 in the sequence 1-3-2-4
Stepper small_stepper(STEPS, A0, A2, A1, A3);
IRrecv irrecv(receiver);    // create instance of 'irrecv'
decode_results results;     // create instance of 'decode_results'

//Deklarationen Keypad
const byte numRows= 4; //number of rows on the keypad
const byte numCols= 4; //number of columns on the keypad
 
//keymap defines the key pressed according to the row and columns just as appears on the keypad
char keymap[numRows][numCols]=
{
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
 
//Hier die richtigen Pins eintragen!!! Anschlussgrafik gibt es z.B. hier http://www.learningaboutelectronics.com/Articles/Arduino-keypad-circuit.php
byte rowPins[numRows] = {9,8,7,6}; 
byte colPins[numCols]= {5,4,3,2}; 
 
//initializes an instance of the Keypad class
Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
 

void setup()
{   
irrecv.enableIRIn(); // Start the receiver
}

void loop()
{  
  char keypressed = myKeypad.getKey(); //Tastedruck am Keypad erfassen   
  if (irrecv.decode(&results)) 
 { 
  if (keypressed == 'A')  //
                    { small_stepper.setSpeed(1000); //Max seems to be 700
                      Steps2Take  =  2048;  // Rotate CW
                      small_stepper.step(Steps2Take); 
                    }
  
  if (results.value == 16761405) // 
                       // forward pressed
                     
                    { small_stepper.setSpeed(1000); //Max seems to be 700
                      Steps2Take  =  2048;  // Rotate CW
                      small_stepper.step(Steps2Take); 
                      
                     }
   if (keypressed == 'B')
                   {  small_stepper.setSpeed(1000);
                      Steps2Take  =  -2048;  // Rotate CCW
                      small_stepper.step(Steps2Take); 
                    }
   if (results.value == 16712445) // backwards pressed
                    {
                      small_stepper.setSpeed(1000);
                      Steps2Take  =  -2048;  // Rotate CCW
                      small_stepper.step(Steps2Take); 
                                           
                     }
                     MotorAus();
irrecv.resume(); // receive the next value 
 } 
  
 
}
/* --end main loop -- */
void MotorAus ()
{
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
}

den Lowbefehl hatte ich komplett draußen, ohne Erfolg.
Den

Code:
irrecv.resume(); // receive the next value

hab ich ebend nochmal direkt unter den Motorbefehl, nur bei den 2 IR Einträgen gesetzt, geht auch aber Keypad immer noch blockiert.
Der ganze Code so wie er ist ,ohne IR, funzt mit dem keypad.
Mein riecher sagt es liegt an dem

Code:
 char

Eintrag, hab den auch schon mehrmals anders gesetzt aber iwie will es nicht.
Hat jemand nen Tip?:ugly:
 
Uijuijui:wall:

Ich hoffe es schreibt gerade keiner was!
Ich habs jetzt doch nochmal separat eingegeben, einmal für IR und einmal für keypad, jetzt geht's.
Hab vorhin mit der Idee begonnen und da ging garnix, dadurch wurde ich in die Irre geführt :D

Also So läuft jetzt beides: IR und Keypad

Code:
#include "Stepper.h"
#include "Keypad.h"
#include "IRremote.h"

/*----- Variables, Pins -----*/
#define STEPS  32   // Number of steps per revolution of Internal shaft
int  Steps2Take;  // 2048 = 1 Revolution
int receiver = 12; // Signal Pin of IR receiver to Arduino Digital Pin 12

/*-----( Declare objects )-----*/
// Setup of proper sequencing for Motor Driver Pins
// In1, In2, In3, In4 in the sequence 1-3-2-4
Stepper small_stepper(STEPS, A0, A2, A1, A3);
IRrecv irrecv(receiver);    // create instance of 'irrecv'
decode_results results;     // create instance of 'decode_results'

//Deklarationen Keypad
const byte numRows= 4; //number of rows on the keypad
const byte numCols= 4; //number of columns on the keypad
 
//keymap defines the key pressed according to the row and columns just as appears on the keypad
char keymap[numRows][numCols]=
{
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
 
//Hier die richtigen Pins eintragen!!! Anschlussgrafik gibt es z.B. hier http://www.learningaboutelectronics.com/Articles/Arduino-keypad-circuit.php
byte rowPins[numRows] = {9,8,7,6}; 
byte colPins[numCols]= {5,4,3,2}; 
 
//initializes an instance of the Keypad class
Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
 

void setup()
{   
irrecv.enableIRIn(); // Start the receiver
}

void loop()
{  
  char keypressed = myKeypad.getKey(); //Tastedruck am Keypad erfassen
  
 
 {
  if (keypressed == 'A') 
                    { small_stepper.setSpeed(1000); //Max seems to be 700
                      Steps2Take  =  2048;  // Rotate CW
                      small_stepper.step(Steps2Take); 
                    }
  
   if (keypressed == 'B')
                   {  small_stepper.setSpeed(1000);
                      Steps2Take  =  -2048;  // Rotate CCW
                      small_stepper.step(Steps2Take); 
                    }

                    if (irrecv.decode(&results)) {
   if (results.value == 16761405) // forward pressed
                     
                    { small_stepper.setSpeed(1000); //Max seems to be 700
                      Steps2Take  =  2048;  // Rotate CW
                      small_stepper.step(Steps2Take); 
                      irrecv.resume(); // receive the next value
                     }
   if (results.value == 16712445) // backwards pressed
                    {
                      small_stepper.setSpeed(1000);
                      Steps2Take  =  -2048;  // Rotate CCW
                      small_stepper.step(Steps2Take); 
                      irrecv.resume(); // receive the next value                     
                     }
                     
 
 } MotorAus();
 }  
 
}
/* --end main loop -- */
void MotorAus ()
{
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
}

Ist nicht aufgeräumt aber die oberen 2 sind jetzt fürs Keypad und danach die 2 sind für die IR!:nicken:
 
der Fehler ist, dass du die beiden Skripte vermischst. So wie das jetzt ist, wird der Keypad Teil nur ausgeführt wenn ein IR Befehlt gesendet wurde, denn er steht innerhalb der "if (irrecv.decode(&results))" Klammern. Mit dem { sagst du dem Code, aber hier nur ausführen wenn die Bedingung erfüllt ist, bis hin zu dem Punkt wo du die Klammer wieder schließt. Schreib den Keypad Teil einfach vor oder nach den IR-Abfrage Teil (vor Zeile 46 oder nach 76).

Der Keypad Teil (z.B. Zeile 48 bis 52) funktioniert relativ unabhängig, solange Zeile 45 davor steht. Die Variable Char muss ja erst mal mit einem aktuellen Wert gefüllt werden. Diese Funktion läuft so, das wenn du sie "myKeypad.getKey()" aufrufst, wird geprüft ob ein Taste gedrückt wurde. Wenn nichts gedrückt wurde steht da "False" drin, also in der Variable "keypressed". Und die If Abfrage funktioniert ja an sich so, wenn Bedingung erfüllt ist (also "True") dann wird der nachfolgende Code ausgeführt. Und wenn nichts gedrückt wurde dann passiert auch nichts...

Der IR Code funktioniert etwas anders. Bzw sind die Zwei Schritte von eben (Variable einlesen und dann prüfen) in einer Zeile kombiniert.
Du könntest auch schreiben:
Code:
int result = irrecv.decode();
if (result){
//ab hier dann der code...
}
Du musst die Zeile 46 von hinten nach vorne lesen. Über den Decode Befehl wird gekuckt ob was ankommt, das Ergebnis wird in Result gespeichert. Und die Prüfung frägt eben ob etwas angekommen ist...


Narglnargl... grad am schreiben gewesen, da läufts bei dir schon wieder...
In der Änderung noch den Motor aus Befehl auch noch zum Keypad dazupacken. Also nach Zeile 52 und nach 58. Also innerhalb des Keypresed Konstrukts.
 
Ja letztere hab ich auch gerade festgestellt. Zu früh gefreut.
Ging zwar vorhin alles EINMAL aber dann war der AUS-Befehl aktiv.


Ähm deine Anweisungen sind echt ausführlich, wie alt bist du eigentl?

Und wie erkennst du die Zeilen? Das hilft mir noch besser nur bin ich zu faul zum zählen, und schon gar nicht bis 76:P


PS:

Dein Code nimmt er iwie nicht da fehlt ihm ein Bezug oder kp :D
Wenn ich den MotorAus Befehl innerhalb des Keypressed- oder results.value setze blockieren sie, mal IR oder KP oder komplett.
So sollte es jetzt klappen, hab jeden Motorbefehl 3-4mal ausgeführt.

Code:
#include "Stepper.h"
#include "Keypad.h"
#include "IRremote.h"

/*----- Variables, Pins -----*/
#define STEPS  32   // Number of steps per revolution of Internal shaft
int  Steps2Take;  // 2048 = 1 Revolution
int receiver = 12; // Signal Pin of IR receiver to Arduino Digital Pin 12

/*-----( Declare objects )-----*/
// Setup of proper sequencing for Motor Driver Pins
// In1, In2, In3, In4 in the sequence 1-3-2-4
Stepper small_stepper(STEPS, A0, A2, A1, A3);
IRrecv irrecv(receiver);    // create instance of 'irrecv'
decode_results results;     // create instance of 'decode_results'

//Deklarationen Keypad
const byte numRows = 4; //number of rows on the keypad
const byte numCols = 4; //number of columns on the keypad

//keymap defines the key pressed according to the row and columns just as appears on the keypad
char keymap[numRows][numCols] =
{
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

//Hier die richtigen Pins eintragen!!! Anschlussgrafik gibt es z.B. hier http://www.learningaboutelectronics.com/Articles/Arduino-keypad-circuit.php
byte rowPins[numRows] = {9, 8, 7, 6};
byte colPins[numCols] = {5, 4, 3, 2};

//initializes an instance of the Keypad class
Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);


void setup()
{
  irrecv.enableIRIn(); // Start the receiver
}

void loop()
{
  char keypressed = myKeypad.getKey(); //Tastedruck am Keypad erfassen


  {
    if (keypressed == 'A')
    { small_stepper.setSpeed(1000); //Max seems to be 700
      Steps2Take  =  2048;  // Rotate CW
      small_stepper.step(Steps2Take);

    }

    if (keypressed == 'B')
    { small_stepper.setSpeed(1000);
      Steps2Take  =  -2048;  // Rotate CCW
      small_stepper.step(Steps2Take);

    }
  }
  if (irrecv.decode(&results))
  {
    if (results.value == 16761405) // forward pressed
    {
      small_stepper.setSpeed(1000); //Max seems to be 700
      Steps2Take  =  2048;  // Rotate CW
      small_stepper.step(Steps2Take);
      irrecv.resume(); // receive the next value

    }
    if (results.value == 16712445) // backwards pressed
    {
      small_stepper.setSpeed(1000);
      Steps2Take  =  -2048;  // Rotate CCW
      small_stepper.step(Steps2Take);
      irrecv.resume(); // receive the next value

    }


  } MotorAus();
}


/* --end main loop -- */
void MotorAus ()
{
  digitalWrite(A0, LOW);
  digitalWrite(A1, LOW);
  digitalWrite(A2, LOW);
  digitalWrite(A3, LOW);
}


ha, da gibs ja sogar nen knopf zum aut. Formatieren und ein Zeilensucher hab ick och jefunden:lol:
 
Zuletzt bearbeitet:
War so ausführlich, das du die Konstrukte verstehen lernst. Beim Programieren muss man manchmal anders denken als mans dann schreibt.... oder so... Ich hab mir vor allem am Anfang damit vor allem schwer getan, und gute Erklärungen haben mir enorm geholfen. Und wenn der Knoten einmal geplatzt ist, dann läufts.
Zumindest mit den Basics.

Alter ist bei mir 35. Hab mir in das Thema 2013 eingearbeitet, als ich im Rahmen meiner Diplomarbeit einen kleinen Remote Dolly für ne Gopro gebastelt hab.
Paar Fotos davon kann man hier sehen. Dropbox - Fotos Album
Warum ich mich hier so einbringe? Ich bastel schon ewig an Pcs rum und begeister mich für das Thema, bei anderen das Auto, bei mir der Pc, nur ist mein Handwerk sehr begrenzt. Und folge hier seit kurzem einigen Tagebüchern. Aber bei dem Großartigen Projekten die es hier gibt, kann ich mit meinen begrenzten Mitteln einpacken. Daher freuts mich, dass ich tatsächlich auch was beisteuern kann. Und die Zeit gibt es grad halt auch her ;)

Also geht aktuell dein Code doch nicht? Wo hängts?
Ich würd den MotorAus Befehl immer senden wenn der Motor bewegt wurde. Sonnst musst du immer noch aufpassen ob diese Code Zeile auch immer erreicht wird. Oder Eventl. den auch mal auskommentieren. Aber ich denke nicht, dass das das Problem ist.

Bissl mehr Infos für die Fehlersuche wären hilfreich.

Hab deinen Code noch etwas aufgeräumt und eine Funtkion für das Motor laufen lassen geschrieben. In der ist auch der MotorAus Befehlt gelandet. Der Funktion übergibst du nur noch die Schritte die getätigt werden sollen. Also in der Klammer ().
Code:
#include "Stepper.h"
#include "Keypad.h"
#include "IRremote.h"

/*----- Variables, Pins -----*/
#define STEPS  32   // Number of steps per revolution of Internal shaft
int  Steps2Take;  // 2048 = 1 Revolution
int receiver = 12; // Signal Pin of IR receiver to Arduino Digital Pin 12

/*-----( Declare objects )-----*/
// Setup of proper sequencing for Motor Driver Pins
// In1, In2, In3, In4 in the sequence 1-3-2-4
Stepper small_stepper(STEPS, A0, A2, A1, A3);
IRrecv irrecv(receiver);    // create instance of 'irrecv'
decode_results results;     // create instance of 'decode_results'

//Deklarationen Keypad
const byte numRows= 4; //number of rows on the keypad
const byte numCols= 4; //number of columns on the keypad
 
//keymap defines the key pressed according to the row and columns just as appears on the keypad
char keymap[numRows][numCols]=
{
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
 
//Hier die richtigen Pins eintragen!!! Anschlussgrafik gibt es z.B. hier http://www.learningaboutelectronics.com/Articles/Arduino-keypad-circuit.php
byte rowPins[numRows] = {9,8,7,6}; 
byte colPins[numCols]= {5,4,3,2}; 
 
//initializes an instance of the Keypad class
Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
 

void setup()
{   
irrecv.enableIRIn(); // Start the receiver
}

void loop()
{  
  char keypressed = myKeypad.getKey(); //Tastedruck am Keypad erfassen
  if (keypressed == 'A') 
    motorLaufen(2048);
  
  if (keypressed == 'B')
    motorLaufen(-2048);
    
  if (irrecv.decode(&results)) {
    if (results.value == 16761405) // forward pressed
      motorLaufen(2048);
      
    if (results.value == 16712445) // backwards pressed
      motorLaufen(-2048);
  } 
}
/* --end main loop -- */
void motorLaufen(int mSteps){
  small_stepper.setSpeed(1000);
  Steps2Take  =  mSteps;  // Rotate CCW
  small_stepper.step(Steps2Take); 
  irrecv.resume(); // receive the next value 
  MotorAus();
}
void MotorAus ()
{
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
}


Die Zeilen find ich in der Arduino IDE. Ich kopiere das immer dahin bevor ich Code lese. Abgesehen von den Zeilen, stimmt da die Formatierung und man kann die Spreche besser erkennen (farbliche Hervorhebung).
Versuch mit den Einrückungen (Tabs) sorgfältiger zu arbeiten. Es ist wichtig erkennen zu können wo welche Klammer { auf geht, und wo sie wieder schließt }.
Mir ist das am Anfang auch ordentlich eingetrichtert worden, das man Code sauber schreiben soll. Auch wenn ich mich immer noch nicht dran halte hilft es schon wenn man da aufpasst (Chaos im Kopf, Ordnung im Code). Auch bei der groß und Klein Schreibweise von Funktionen und Variablen gibt es "Regeln" an die man sich halten sollte. Usw....

Lieben Gruß
David
 
Zurück