Sunday, November 16, 2014

Audino - Arduino MP3-Player (6) - Mehrere Knöpfe (digital)

Der Aufbau der Schaltung für mehrere Knöpfe ist nicht sonderlich anders als für einen Knopf. Es können sowohl digitale als auch analoge Pins verwendet werden. Hier sind 5 digitale und 5 analoge Pins verwendet worden. Alle werden als digitale Eingänge verwendet. Bei der Wahl der Pins ist berücksichtigt, welche Pins das MP3 Shield verwendet und welche nicht (https://learn.adafruit.com/adafruit-music-maker-shield-vs1053-mp3-wav-wave-ogg-vorbis-player/pinouts).

Digital PinVerwendet
#0TX
#1RX
#2frei
#3MP3 Shield
#4MP3 Shield
#5frei
#6MP3 Shield
#7MP3 Shield
#8frei
#9frei
#10frei
#11MP3 Shield
#12MP3 Shield
#13MP3 Shield

Als analoge Pins stehen A0 bis A5 zur Verfügung, die auch als digitale Eingänge verwendet werden können. Ein analoger Pin wird für den Potentiometer (Lautstärkeregelung) benötigt. Somit stehen insgesamt 10 Pins als digitale Eingänge vom Arduino-Board zur Verfügung. Weitere 7 Pins werden, falls benötigt,vom MP3 Shield zur Verfügung gestellt (https://learn.adafruit.com/adafruit-music-maker-shield-vs1053-mp3-wav-wave-ogg-vorbis-player/gpio-pins).


Der Programmcode ist leicht verändert worden. Zum einen wird die LED nicht mehr verwendet. Dadurch ist die Logik des Programmcodes vereinfacht worden. Zum anderen werden Arrays verwendet, deren Inhalt über eine Schleife abgearbeitet wird. Dadurch konnten Codezeilen gespart werden, im Vergleich zum Ausprogrammieren der Logik für jeden einzelnen Pin.

// constants won't change
 
// the number of the pushbutton pins
const int buttonPins[] = { 2, 5, 8, 9, 10, A0, A1, A2, A3, A4 };
 
// variables will change
 
// variable for reading the pushbutton status
int buttonStates[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 
// variable for remember the number of button pressed
int counters[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 
 
// the setup routine runs once when you turn the device on or you press reset
void setup()
{
    // initialize the pushbutton pins as input and enable internal pull-up resistor
    for (int i = 0; i < (sizeof(buttonPins) / sizeof(int)); i++)
    {
        pinMode(buttonPins[i], INPUT_PULLUP);
    }
 
    // disable LED L
    pinMode(13, OUTPUT);
    digitalWrite(13, LOW);
 
    // initialize serial communication at 9600 bits per second
    Serial.begin(9600);
}
 
 
// the loop routine runs over and over again forever
void loop()
{
    int state;
 
    // go through all button pins
    for (int i = 0; i < 10; i++)
    {
        // read the state of the pushbutton value
        state = digitalRead(buttonPins[i]);
        
        // recognize state changes: button pressed and button released
        if (state != buttonStates[i])
        {
            // remember new button state
            buttonStates[i] = state;
 
            // print out the state of the button
            Serial.print(buttonPins[i]);
            Serial.print(" State changed ");
            Serial.println(buttonStates[i]);
 
            // button is pressed
            if (buttonStates[i] == LOW)
            {
                // increment number of button pressed
                counters[i]++;
 
                // print out the number of button pressed
                Serial.print(buttonPins[i]);
                Serial.print(" counter: ");
                Serial.println(counters[i]);
            }
            // button is released
            else
            {
                // print out new line
                Serial.println();
 
                // wait before next click is recognized
                delay(100);
            }
        }
    }
}

Nächstes Mal werde ich mir eine Alternative für "Mehrere Knöpfe" mit analogen Pins anschauen.


Weitere Blogeinträge

  1. Auswahl der Komponenten
  2. Das Entwicklungsbrett
  3. Das erste Einschalten
  4. Die Entwicklungsumgebung
  5. Knöpfe (digital)
  6. Mehrere Knöpfe (digital)
  7. Mehrere Knöpfe (analog)
  8. Potentiometer
  9. Das MP3 Shield
  10. Auswahl der Komponenten 2
  11. Auswahl der Komponenten (Zusammenfassung) 
  12. Punkt-Streifenrasterplatine und Knöpfe
  13. Punkt-Streifenrasterplatine und weitere Komponenten
  14. Das Gehäuse
  15. Sketch 1 (setup-Methode)
  16. Sketch 2 (loop-Methode)
  17. Sketch 3 (Der komplette Code)
  18. PC-Software


Saturday, November 15, 2014

Audino - Arduino MP3-Player (5) - Knöpfe (digital)

Knopfdrücke können im Arduino registriert werden. Nach einem Knopfdruck können dann entsprechende Aktionen ausgeführt werden. Ein einfacher Schaltkreis kann realisiert werden indem der Knopf mit dem digitalen Port 2 und der Masse verbunden wird. Dabei wird der interne Pull-up Widerstand verwendet. Alternativ kann eine Schaltung mit einem externen Pull-down Widerstand verwendet werden. Ein Beispiel dafür ist hier zu sehen Arduino - Button.


Der Programmcode schaltet solange der Knopf gedrückt wird die LED an. Wird der Knopf wieder losgelassen, wird die LED wieder ausgeschaltet. Jeder Knopfdruck wird gezählt. Der aktuelle Status des Knopfs und die Anzahl der Knopfdrücke wird über eine serielle Kommunikation ausgegeben.

// constants won't change
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13;   // the number of the LED pin
 
// variables will change
int buttonState = 0;     // variable for reading the pushbutton status
 
int counter = 0;         // variable for remember the number of button pressed
 
 
// the setup routine runs once when you turn the device on or you press reset
void setup()
{
    // initialize the LED pin as an output
    pinMode(ledPin, OUTPUT);
 
    // initialize the pushbutton pins as input and enable internal pull-up resistor
    pinMode(buttonPin, INPUT_PULLUP);
 
    // initialize serial communication at 9600 bits per second
    Serial.begin(9600);
}
 
 
// the loop routine runs over and over again forever
void loop()
{
    // read the state of the pushbutton value
    int state = digitalRead(buttonPin);
 
    // recognize state changes: button pressed and button released
    if (state != buttonState)
    {
        // remember new button state
        buttonState = state;
 
        // print out the state of the button
        Serial.print("2 State changed ");
        Serial.println(buttonState);
 
        // button is pressed
        if (buttonState == LOW)
        {
            // turn LED on
            digitalWrite(ledPin, HIGH);
 
            // increment number of button pressed
            counter++;
 
            // print out the number of button pressed
            Serial.print("2 counter: ");
            Serial.println(counter);
        }
        // button is released
        else if (buttonState == HIGH)
        {
            // turn LED off
            digitalWrite(ledPin, LOW);
        }
    }
}

Dieser Programmcode kann für Aktionen verwendet werden, die ausgeführt werden sollen, solange ein Knopf gedrückt ist. Eine Alternative zu dieser Logik ist es, dass eine Aktion bei einem Knopfdruck nur einmal ausgeführt werden soll. Dazu das folgende Beispiel. Der Programmcode schaltet bei einem Knopfdruck die LED an, bei einem weiteren Knopfdruck wieder aus. Jeder Knopfdruck wird gezählt. Der aktuelle Status des Knopfs, der LED und die Anzahl der Knopfdrücke wird über eine serielle Kommunikation ausgegeben.

// constants won't change
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13;   // the number of the LED pin
 
// variables will change
int buttonState = 0;     // variable for reading the pushbutton status
int ledState = 0;        // variable for reading the LED status
 
int counter = 0;         // variable for remember the number of button pressed
 
 
// the setup routine runs once when you turn the device on or you press reset
void setup()
{
    // initialize the LED pin as an output
    pinMode(ledPin, OUTPUT);
 
    // initialize the pushbutton pins as input and enable internal pull-up resistor
    pinMode(buttonPin, INPUT_PULLUP);
 
    // initialize serial communication at 9600 bits per second
    Serial.begin(9600);
}
 
 
// the loop routine runs over and over again forever
void loop()
{ 
    // read the state of the pushbutton value
    int state = digitalRead(buttonPin);
 
    // recognize state changes: button pressed and button released
    if (state != buttonState)
    {
        // remember new button state
        buttonState = state;
 
        // print out the state of the button
        Serial.print("2 State changed ");
        Serial.println(buttonState);
 
        // button is pressed and LED is off
        if (buttonState == LOW && ledState == LOW)
        {
            // remember new LED state
            ledState = HIGH;
 
            // turn LED on
            digitalWrite(ledPin, HIGH);
 
            // print out the state of the LED
            Serial.print("2 Set high ");
            Serial.println(ledState);
 
            // increment number of button pressed
            counter++;
 
            // print out the number of button pressed
            Serial.print("2 counter: ");
            Serial.println(counter);
        }
        // button is pressed and LED is on
        else if (buttonState == LOW && ledState == HIGH)
        {
            // remember new LED state
            ledState = LOW;
 
            // turn LED off
            digitalWrite(ledPin, LOW);
 
            // print out the state of the LED
            Serial.print("2 Set low ");
            Serial.println(ledState);
 
            // increment number of button pressed
            counter++;
 
            // print out the number of button pressed
            Serial.print("2 counter: ");
            Serial.println(counter);
        }
        // button is released
        else if (buttonState == HIGH)
        {
            // print out new line
            Serial.println();
 
            // wait before next click is recognized
            delay(100);
        }
    }
}


Als nächstes werde ich die Schaltung und den Programmcode um weitere Knöpfe erweitern.


Weitere Blogeinträge

  1. Auswahl der Komponenten
  2. Das Entwicklungsbrett
  3. Das erste Einschalten
  4. Die Entwicklungsumgebung
  5. Knöpfe (digital)
  6. Mehrere Knöpfe (digital)
  7. Mehrere Knöpfe (analog)
  8. Potentiometer
  9. Das MP3 Shield
  10. Auswahl der Komponenten 2
  11. Auswahl der Komponenten (Zusammenfassung) 
  12. Punkt-Streifenrasterplatine und Knöpfe
  13. Punkt-Streifenrasterplatine und weitere Komponenten
  14. Das Gehäuse
  15. Sketch 1 (setup-Methode)
  16. Sketch 2 (loop-Methode)
  17. Sketch 3 (Der komplette Code)
  18. PC-Software


Thursday, November 13, 2014

Audino - Arduino MP3-Player (4) - Die Entwicklungsumgebung

Die Arduino Entwicklungsumgebung (Version 1.0.6) ist für die ersten Schritte ausreichend. Vor allem die enthaltenen Beispiele erleichtern den Einstieg.
Allerdings ist die Entwicklungsumgebung wenig komfortabel sobald man eigenen Code schreiben möchte. Daher habe ich mich nach Alternativen umgesehen, die das Entwickeln erleichtern, weil beispielsweise Codevervollständigung oder die Anzeige von Typen und Methodenparametern vorhanden ist.

Durch das Setzen von definierten Eigenschaften, das Einbinden von gewissen Werkzeugen oder das Installieren von bestimmten Plugins können die weitverbreiteten Entwicklungsumgebungen Microsoft Visual Studio, Atmel Studio oder Eclipse zur Entwicklung von Arduino-Software verwendet werden. Weitere Informationen dazu können unter dem Link http://playground.arduino.cc/Main/DevelopmentTools gefunden werden.

Gerade im Zusammenhang mit Visual Studio oder Atmel Studio, welches auf Visual Studio basiert, ist Arduino IDE für Visual Studio von Visual Micro interessant.

Die Arduino-Entwicklung integriert sich in Visual Studio.
Es können einige Optionen angepasst werden.
Zudem kann über Tools auf einige Funktionen zugegriffen werden.
Über "New" oder "Open" kann ein "Sketch Project" angelegt bzw. geöffnet werden.
 
Anschließend kann das Projekt in der IDE bearbeitet, hochgeladen und überwacht werden.
Mit F5 oder mit einem Klick auf "Local Windows Debugger" wird das Projekt kompiliert und auf das Arduino geladen.
Um den Serial Monitor zu nutzen, muss nach dem hochladen des Projekts immer auf "Show the serial monitor tool window" gedrückt werden.
Es öffnet sich das Fenster, in welchem die serielle Kommunikation angezeigt wird.
Um eine serielle Kommunikation in Arduino herzustellen wird in der setup() Methode diese initialisiert.
Serial.begin(9600);
In der loop() Methode kann dann die serielle Kommunikation verwendet werden. Beispielsweise können Nachrichten gesendet werden.
Serial.print("2 State changed ");
Serial.println(buttonState1);
Dies kann genutzt werden, um Fehler zu finden, was gerade dann sinnvoll ist, wenn kein Debugger zur Verfügung steht.

Eine weitere interessante Anwendung ist Fritzing. Mit dieser Anwendung können Schaltpläne erstellt werden. Es können auch die Aufbauten, die mit einer Steckplatine realisiert worden sind, visuell dokumentiert werden. Seit neustem ist in dieser Anwendung auch ein Code-Editor integriert.

Einen Schritt weiter geht es hier http://123d.circuits.io/. Hier kann das Arduino-Board sogar simuliert werden. Ich habe das Online-Tool allerdings nicht ausprobiert.


Als nächstes werde ich mich mit den Knöpfen beschäftigen und versuchen ein Knopfdruck in Arduino zu registrieren.

Weitere Blogeinträge

  1. Auswahl der Komponenten
  2. Das Entwicklungsbrett
  3. Das erste Einschalten
  4. Die Entwicklungsumgebung
  5. Knöpfe (digital)
  6. Mehrere Knöpfe (digital)
  7. Mehrere Knöpfe (analog)
  8. Potentiometer
  9. Das MP3 Shield
  10. Auswahl der Komponenten 2
  11. Auswahl der Komponenten (Zusammenfassung) 
  12. Punkt-Streifenrasterplatine und Knöpfe
  13. Punkt-Streifenrasterplatine und weitere Komponenten
  14. Das Gehäuse
  15. Sketch 1 (setup-Methode)
  16. Sketch 2 (loop-Methode)
  17. Sketch 3 (Der komplette Code)
  18. PC-Software


Friday, November 7, 2014

Audino - Arduino MP3-Player (3) - Das erste Einschalten

Es gibt eine Vielzahl von Anleitungen, die die ersten Schritte mit Arduino beschreiben. Ich habe die Anleitung, die es direkt auf der Arduino-Seite gibt verwendet: http://arduino.cc/en/Guide/Windows.

Die Installation der Software und der erste Verbindungsaufbau verlaufen problemlos. BeimVerbinden des Arduino-Boards mit dem PC und dem damit verbundenen Herstellen der Stromversorgung leuchtet die ON-LED grün auf. Weiterhin hat die L-LED angefangen orange zu blinken.
In der Entwicklungsumgebung stehen verschiedene Beispiele zur Verfügung, die schnell ausprobiert werden können. Ohne zusätzliche Hardware kommt 01.Basics->Blink aus. Nach dem Laden kann man sich das Programm in der Entwicklungsumgebung anschauen. Der typische Aufbau eines Arduino-Sketch ist hier zu sehen. Ein Arduino-Sketch besteht aus mindestens zwei Methoden,
void setup() { ... }
und
void loop() { ... }
Die Methode setup() wird einmal beim Einschalten des Arduinos ausgeführt. Die Methode loop() wird anschließend immer wieder in einer Schleife ausgeführt. Sobald die Methode beendet ist, wird sie wieder aufgerufen.

Beim Aufspielen des Beispiel-Sketchs 01.Basics->Blink ergab sich keine Veränderung. Vermutlich war dieses bereits auf dem Arduino-Board. Jedoch wirkte sich das Herumspielen mit den "delay" Werten aus. So konnte die Länge des Aufleuchtens erhöht werden, indem das erste "delay" auf 3000 gesetzt worden ist:  delay(3000);

Das erste Einschalten ist geglückt. Das nächste Mal nehme ich die Entwicklungsumgebung (IDE) genauer unter die Lupe. Bis dahin kann auf den zahlreichen Informationen, die es über Arduino gibt zurückgegriffen werden. Nachfolgend ist hierzu eine Auflistung von Seiten, die mir sehr interessant erschienen.


Informationen auf Arduino.cc:

Arduino - Windows

Arduino Playground - HomePage

Arduino Playground - ManualsAndCurriculum

Arduino - Learn the basics

Arduino - Foundations


Einführungen:

Arduino Comic

Arduino in a Nutshell

Arduino_Tutorial.pdf


Forum:

Arduino Stack Exchange


Informationen auf sparkfun.com:

What is an Arduino? - learn.sparkfun.com

Arduino Comparison Guide - learn.sparkfun.com

Arduino Shields - learn.sparkfun.com

Installing Arduino IDE - learn.sparkfun.com

Data Types in Arduino - learn.sparkfun.com

Analog to Digital Conversion - learn.sparkfun.com

Installing an Arduino Library - learn.sparkfun.com

MP3 Player Shield Hookup - learn.sparkfun.com


Informationen auf Adafruit/Ladyada:

Overview | Adafruit Music Maker Shield | Adafruit Learning System

Arduino Tutorial - Learn electronics and microcontrollers using Arduino!




Weitere Blogeinträge

  1. Auswahl der Komponenten
  2. Das Entwicklungsbrett
  3. Das erste Einschalten
  4. Die Entwicklungsumgebung
  5. Knöpfe (digital)
  6. Mehrere Knöpfe (digital)
  7. Mehrere Knöpfe (analog)
  8. Potentiometer
  9. Das MP3 Shield
  10. Auswahl der Komponenten 2
  11. Auswahl der Komponenten (Zusammenfassung) 
  12. Punkt-Streifenrasterplatine und Knöpfe
  13. Punkt-Streifenrasterplatine und weitere Komponenten
  14. Das Gehäuse
  15. Sketch 1 (setup-Methode)
  16. Sketch 2 (loop-Methode)
  17. Sketch 3 (Der komplette Code)
  18. PC-Software