Tengu met Arduino uno

Als U een gezamenlijk project wil starten of aan projecten van anderen mee wilt werken.
Berichten: 79
Geregistreerd: 08 Apr 2013, 20:16
Woonplaats: Lokeren

Re: Tengu met Arduino uno

Berichtdoor Sembot » 17 Okt 2013, 20:43

Hai,

Eerste van een reeks bonus vragen ( rekening houden met de ouderdom van betrokkene (60 bijna )

for( int r = 0; r < 7; r++) { // zet alle digitale pinnen van 2-8 op 0.
// Dit zijn alle rij aansturingen.
digitalWrite( r + 2, LOW ); // led links boven is aan de ene kant laag
}
for( int c = 0; c < 5; c++) { // zet alle digitale pinnen van 9-13 op 0.
// Dit zijn alle colom aansturingen.
digitalWrite( c + 9, HIGH); // led links boven is aan de anderkant hoog dus
// led linksboven gaat branden denk ik ................................maar waarom , dit gedeelde versta ik niet goed ( en ook wat de rest Hi )

zit wat in een knoop , geraak niet verder ben wel op het net aan het zoeken om een uitleg te vinden , heb ook de nederlandstalige manual van arduino al gedownload

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Tengu met Arduino uno

Berichtdoor nicoverduin » 17 Okt 2013, 21:33

Sembot schreef: for( int c = 0; c < 5; c++) { // zet alle digitale pinnen van 9-13 op 0.
// Dit zijn alle colom aansturingen.
digitalWrite( c + 9, HIGH); // led links boven is aan de anderkant hoog dus
// led linksboven gaat branden denk ik ................................maar waarom , dit gedeelde versta ik niet goed ( en ook wat de rest Hi )

zit wat in een knoop , geraak niet verder ben wel op het net aan het zoeken om een uitleg te vinden , heb ook de nederlandstalige manual van arduino al gedownload

Ik ken die matrix verder niet dus dan moet ik de data sheet ff doorlopen maar:
als het een matrix is dan heb je een led op elk kruispunt van een row en kolom. Die LED wordt dus gevoed door de kolom als plus(+) en row als min(-). Als een pin HIGH wordt gemaakt, dan staat er op de pin bijna 5V (bij de arduino en mede varianten). Er gaat dan een stroom lopen van de + naar die - via de LED die dan gaat oplichten.
Dus die digitale pinnen van 9-13 worden niet op 0 (= LOW) maar op 1 (=HIGH) gezet.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 79
Geregistreerd: 08 Apr 2013, 20:16
Woonplaats: Lokeren

Re: Tengu met Arduino uno

Berichtdoor Sembot » 17 Okt 2013, 23:07

Hai ,

Kweet niet of de tekening van de matrix nu op het forum komt , eff proberen

Matrix.jpg
Matrix
Matrix.jpg (13.47 KiB) 8186 keer bekeken

Berichten: 79
Geregistreerd: 08 Apr 2013, 20:16
Woonplaats: Lokeren

Re: Tengu met Arduino uno

Berichtdoor Sembot » 17 Okt 2013, 23:11

Hai ,


Oke dit kunnen we nu ook al

Kun je me nog een (paar) tips geven want ik loop zowat vast


mvg
Erwin

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Tengu met Arduino uno

Berichtdoor nicoverduin » 17 Okt 2013, 23:32

Ik weet niet waar je vastloopt :)
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 79
Geregistreerd: 08 Apr 2013, 20:16
Woonplaats: Lokeren

Re: Tengu met Arduino uno

Berichtdoor Sembot » 18 Okt 2013, 09:46

Hai,

Dit met de puntjes weet ik niet , en kan je effe kijken of de rest wel juist is tot hiertoe



byte leds[7][5]; // een led arry van 7x5 leds = 35 leds

void setPattern( byte pattern[20][5], int idx ) { // .....................wat betekend deze zin
for( int r =0; r < 7; r++) { // zet alle digitale pinnen van 2-8 op 0
for( int c = 0; c < 5; c++) { // zet alle digitale pinnen van 9-13 op 0
leds[r][c] = pattern[r + idx][c]; // .......................wat betekend deze zin
}
}
}

void draw() {

for( int r =0; r < 7; r ++ ) { // zet alle digitale pinnen van 2-8 op 0
digitalWrite( r + 2, HIGH ); // zet digital pin 2 op high
for( int c=0; c < 5; c ++ ) { // zet alle digitale pinnen van 9-13 op 0
digitalWrite( 13 - c, ( leds[r][c] == 1 ? LOW : HIGH )); // .....................Wat betekend deze zin
}
delayMicroseconds(900); // Wacht 900 msec
digitalWrite( r + 2, LOW ); // zet digital pin 2 op low
}


mvg
Erwin

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Tengu met Arduino uno

Berichtdoor nicoverduin » 18 Okt 2013, 13:19

Code: Alles selecteren
byte leds[7][5]; // een led arry van 7x5 leds = 35 leds
//
// functie: setPattern
// kopieer het patroon voor uit de tabel pattern[20 regels][5 kolommen] naar de LEDs
// pattern bevat meerdere patronen. Het begin van een patroon wordt aangegeven door idx
//
void setPattern( byte pattern[20][5], int idx ) {
    for( int r =0; r < 7; r++) {                          // loop alle regels door van 0-6
        for( int c = 0; c < 5; c++) {                   // loop alle kolommen door van 0-4
            leds[r][c] = pattern[r + idx][c];          // kopieer pattern naar leds
        }
    }
}

Dit is een functie die een patroon kopieert uit de grote tabel met alle plaatjes naar de LEDS. het startpunt in de grote tabel wordt aangegeven door idx.

Code: Alles selecteren
//
// functie : draw()
//
void draw() {

    for( int r =0; r < 7; r ++ ) {                     // voor elke regel van 0-6
        digitalWrite( r + 2, HIGH );                  // zet de deze pin op HOOG (zodat evt een led aangezet kan worden)
        for( int c=0; c < 5; c ++ ) {                //  voor elke kolom van 0-4
            //
            // zet de LED aan of uit afhankelijk van het patroon. M.a.w. Als in de leds tabel op kruispunt [r][c] een 1 (=HIGH) staat
            // schrijf dan een 0 (=LOW) naar de desbetreffende kolom. Op deze wijze worden alle LEDS in deze kolom waarbij de regel op HIGH staat voorzien
            // van een spanning waardoor de LED zal oplichten. Als de Kolom een waarde HIGH zou krijgen, dan is zowel de regel als de kolom op dat kruispunt HOOG en loopt
            // er geen spanning door de LED en zal dus niet oplichten.
            //
            digitalWrite( 13 - c, ( leds[r][c] == 1 ? LOW : HIGH ));
        }
        delayMicroseconds(900);                               // Wacht 900 msec
        digitalWrite( r + 2, LOW );                             // zet de regel weer op LOW
    }
}

Op deze wijze wordt de hele matrix doorgelopen. De redenering van pin 2 klopt niet. Er staat r+2. r is een variabele die loopt van 0-6. Tel daar 2 bij op krijg je dus een verloop van
[0+2] tot [0+6] = 2 tot 8 en dat zijn precies de pin aansluitingen op jouw Arduino naar de LED display.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 79
Geregistreerd: 08 Apr 2013, 20:16
Woonplaats: Lokeren

Re: Tengu met Arduino uno

Berichtdoor Sembot » 19 Okt 2013, 12:05

Hai ,

Bedankt voor de goede hulp

Als ik nu de beide programmas wil combineren moet ik bvb 3 patronen tekenen van ,mond toe = stilte , mond heel open = luid , mond half open = wat zachter

En dan volgens het geluid ( een variabele ) dat via de microfoon binnen komt op pin A0 zoeken we naar het desbetreffend patroon en zet dit op het display

Dat wordt als het mij lukt nog een hele karwei geloof ik ( zeker weten )

Onderaan de beide programmas met uitleg ( voor eventueel geintresseerde mensen die op de achtergrond meekijken )



/*
* Monitor for sound sensor
*/
int potPin = A2; // micro op pin A2 aansluiten
int ledPin = 13; // Led aansluiten op Pin 13
int val = 0; // val = variabele met de beginwaarde 0
int amp = 0; // amp = variabele met de beginwaarde 0
void setup() {
pinMode(ledPin, OUTPUT); // zet de ledPin 13 als output
}
void loop() {
val = analogRead(potPin); // val lees de waarde als er op potPin iets of niets te horen is
amp = (val >= 512) ? val - 512 : 512 - val; // Is hetzelfde als
// if (val > = 512) {
// amp = val - 512;
// } else {
// amp = 512 - val;}

if (amp > 400) { // als amp groter is dan 400
digitalWrite(ledPin, HIGH); // schrijf naar de uitgang 13 en laat de led aangaan
delay(20); // wacht 20msec
}
else { // anders
digitalWrite(ledPin, LOW); // schrijf naar de uitgang en laat de led uitgaan
}
}

...........................................................................................................................................................

int idx = 0; // idx variabele met waarde 0
unsigned long last; // last kan een waarde zijn van 0 tot 4,294,967,295 (2^32 - 1) hebben
void setup() {
last = millis(); // Last = millis(); // last wordt gevuld met millis()
// Millis laat zien hoeveel milliseconde het Arduino board
// in werking is na de start van het
// lopende programma. De weergave is een long variabele.
pinMode( 9, OUTPUT ); // op pin 9 kom te aansluiting van de matrix Pin 13 col 1
pinMode( 10, OUTPUT ); // op pin 10 kom te aansluiting van de matrix Pin 3 col 2
pinMode( 11, OUTPUT ); // op pin 11 kom te aansluiting van de matrix Pin 4 or 11 col 3
pinMode( 12, OUTPUT ); // op pin 12 kom te aansluiting van de matrix Pin 10 col 4
pinMode( 13, OUTPUT ); // op pin 13 kom te aansluiting van de matrix Pin 6 col 5
pinMode( 2, OUTPUT ); // op pin 2 kom te aansluiting van de matrix Pin 9 row 1
pinMode( 3, OUTPUT ); // op pin 3 kom te aansluiting van de matrix Pin 14 row 2
pinMode( 4, OUTPUT ); // op pin 4 kom te aansluiting van de matrix Pin 8 row 3
pinMode( 5, OUTPUT ); // op pin 5 kom te aansluiting van de matrix Pin 12 or 5 row 4
pinMode( 6, OUTPUT ); // op pin 6 kom te aansluiting van de matrix Pin 1 row 5
pinMode( 7, OUTPUT ); // op pin 7 kom te aansluiting van de matrix Pin 7 row 6
pinMode( 8, OUTPUT ); // op pin 8 kom te aansluiting van de matrix Pin 2 row 7
for( int r = 0; r < 7; r++) { // loop alle regels door van 0-6
digitalWrite( r + 2, LOW ); // zet alle digitale pinnen van 2-8 op 0
// Dit zijn alle rij aansturingen.
}
for( int c = 0; c < 5; c++) { // loop alle kolommen door van 0-4
digitalWrite( c + 9, HIGH); // zet alle digitale pinnen van 9-13 op 0.
// Dit zijn alle kolom aansturingen.
}
}
byte leds[7][5]; // een led array 7X5 leds = 35leds
void setPattern( byte pattern[20][5], int idx ) { // functie: setPattern
// kopieer het patroon voor uit de tabel pattern
// [20regels][5kolommen]naarde leds
// pattern bevat meerdere patronen. Het begin
// van een patroon wordt aangegeven door idx
for( int r =0; r < 7; r++) { // loop alle regels door van 0-6
for( int c = 0; c < 5; c++) { // loop alle kolommen door van 0-4
leds[r][c] = pattern[r + idx][c]; // kopieer pattern naar leds
// Dit is een functie die een patroon kopieert
// uit de grote tabel met alle plaatjes naar de LEDS.
// Het startpunt in de grote tabel wordt aangegeven door idx.
}
}
}
void draw() { // Functie : draw
for( int r=0; r < 7; r ++ ) { // voor elke regel van 0-6
digitalWrite( r + 2, HIGH ); // zet deze pin op HOOG
// zodat evt een led aangezet kan worden
for( int c=0; c < 5; c ++ ) { // voor elke kolom van 0-4
digitalWrite( 13 - c, ( leds[r][c] == 1 ? LOW : HIGH ));
// zet de LED aan of uit afhankelijk van het patroon. M.a.w.
// Als in de leds tabel op kruispunt [r][c] een 1 (=HIGH) staat
// schrijf dan een 0 (=LOW) naar de desbetreffende kolom.
// Op deze wijze worden alle LEDS in deze kolom waarbij
// de regel op HIGH staat voorzien van een spanning waardoor
// de LED zal oplichten. Als de Kolom een waarde HIGH zou krijgen,
// dan is zowel de regel als de kolom op dat kruispunt HOOG en loopt
// er geen spanning door de LED en zal dus niet oplichten.
}
delayMicroseconds(900);
digitalWrite( r + 2, LOW ); // Zet de regel weer op LOW
// Op deze wijze wordt de hele matrix doorgelopen.
}
}
void loop() {
if ( millis() - last > 400 ) {
idx = (idx == 0 ? 7 : 0);
last = millis();
}
byte tmp[14][5] = {
{ 0,0,0,0,0},
{ 0,1,0,1,0},
{ 0,0,0,0,0},
{ 0,1,1,1,0},
{ 0,1,0,1,0},
{ 0,1,1,1,0},
{ 0,0,0,0,0},
{ 0,0,0,0,0},
{ 0,1,0,1,0},
{ 0,0,0,0,0},
{ 0,0,0,0,0},
{ 0,1,1,1,0},
{ 0,0,0,0,0},
{ 0,0,0,0,0},
};
setPattern( tmp, idx );
draw();
}

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Tengu met Arduino uno

Berichtdoor nicoverduin » 19 Okt 2013, 12:27

Zet no ff je code tussen de html tekens [ code ] en [ / code ] (beide zonder de spaties). Het is niet te lezen zo
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Tengu met Arduino uno

Berichtdoor nicoverduin » 19 Okt 2013, 12:36

Het stelt eigenlijk niets voor:
- als je nu kijkt naar het display programma dan kan je een plaatje laten zien afhankelijk van de index in de tmp tabel. Nu schakelt hij automatisch tussen de 2 plaatjes. En dat gebeurt hier:
Code: Alles selecteren

    if ( millis() - last > 400 ) {
        idx = (idx == 0 ? 7 : 0);
        last = millis();
    }


Dus als je nu ipv. deze routine het stukje kopieert uit de geluidsprogramma met de volgende aanpassing:
Code: Alles selecteren
val = analogRead(potPin); // val lees de waarde als er op potPin iets of niets te horen is
amp = (val >= 512) ? val - 512 : 512 - val; // Is hetzelfde als

if (amp > 400) { // als amp groter is dan 400
    idx = 0;
} else {
    idx = 7;
}

Nu laat je het volume bepalen wat de index wordt in de tmp tabel. Als je dit aan de praat hebt dan gaan we naar de volgende stap.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

VorigeVolgende

Terug naar Gezamenlijke projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 6 gasten