Go Down

Topic: Resistives Sensorarray für eine Schuhsohle (Velostat) (Read 3993 times) previous topic - next topic

ma1kels

1. Dann solltest Du das, was in #43 steht mal mit dem vergleichen, was in Deiner IDE steht.
2. Wenn man Dir Fragen stellt, wäre es schön, wenn Du diese beantworten und nicht ignorieren würdest.

Gruß Tommy
Zu 1: Sorry Leute, ich dachte die ganze Zeit hier wurde mein kompletter Sketch übernommen aber anscheinend hab ich nicht alles aus der IDE kopiert. Hier nun nochmal der wirklich komplette Sketch so wie ich ihn momentan nutze:
Code: [Select]
//Mux control pins for analog signal (SIG_pin) default for arduino mini pro
const byte s0 = 13;
const byte s1 = 12;
const byte s2 = 11;
const byte s3 = 10;

//Mux control pins for Output signal (OUT_pin) default for arduino mini pro
const byte w0 = 9;
const byte w1 = 8;
const byte w2 = 7;
const byte w3 = 6;

//Mux in "SIG" pin default for arduino mini pro
const byte SIG_pin = 0;

//Mux out "SIG" pin default for arduino mini pro
const byte OUT_pin = 5;

//Row and Column pins default for arduino mini pro
const byte STATUS_pin = 3;
const byte COL_pin = 2;

const boolean muxChannel[16][4]={
    {0,0,0,0}, //channel 0
    {1,0,0,0}, //channel 1
    {0,1,0,0}, //channel 2
    {1,1,0,0}, //channel 3
    {0,0,1,0}, //channel 4
    {1,0,1,0}, //channel 5
    {0,1,1,0}, //channel 6
    {1,1,1,0}, //channel 7
    {0,0,0,1}, //channel 8
    {1,0,0,1}, //channel 9
    {0,1,0,1}, //channel 10
    {1,1,0,1}, //channel 11
    {0,0,1,1}, //channel 12
    {1,0,1,1}, //channel 13
    {0,1,1,1}, //channel 14
    {1,1,1,1}  //channel 15
  };


//incoming serial byte
int inByte = 0;

int valor = 0;               //variable for sending bytes to processing
int calibra[13][7];         //Array 72 sensors
int minsensor=254;          //Variable for staring the min array
int multiplier = 254;
int pastmatrix[13][7];

void setup(){
   
  pinMode(s0, OUTPUT);
  pinMode(s1, OUTPUT);
  pinMode(s2, OUTPUT);
  pinMode(s3, OUTPUT);
 
  pinMode(w0, OUTPUT);
  pinMode(w1, OUTPUT);
  pinMode(w2, OUTPUT);
  pinMode(w3, OUTPUT);
 
  pinMode(OUT_pin, OUTPUT);
 
  pinMode(STATUS_pin, OUTPUT);
  pinMode(COL_pin, OUTPUT);

 
  digitalWrite(s0, LOW);
  digitalWrite(s1, LOW);
  digitalWrite(s2, LOW);
  digitalWrite(s3, LOW);
 
  digitalWrite(w0, LOW);
  digitalWrite(w1, LOW);
  digitalWrite(w2, LOW);
  digitalWrite(w3, LOW);
 
  digitalWrite(OUT_pin, HIGH);
  digitalWrite(STATUS_pin, HIGH);
  digitalWrite(COL_pin, HIGH);
 
 
 
  Serial.begin(115200);
 
 
  // Full of 0's of initial matrix
  for(byte j = 0; j < 13; j ++){
    writeMux(j);
    for(byte i = 0; i < 7; i ++)
      calibra[j][i] = 0;
  }
 
  // Calibration
  for(byte k = 0; k < 50; k++){ 
    for(byte j = 0; j < 13; j ++){
      writeMux(j);
      for(byte i = 0; i < 7; i ++)
        calibra[j][i] = calibra[j][i] + readMux(i);
    }
  }
 
  //Print averages
  for(byte j = 0; j < 12; j ++){
    writeMux(j);
    for(byte i = 0; i < 6; i ++){
      calibra[j][i] = calibra[j][i]/50;
      if(calibra[j][i] < minsensor)
        minsensor = calibra[j][i];
      Serial.print(calibra[j][i]);
      Serial.print("\t");
    }
  Serial.println();
  }
 
  Serial.println();
  Serial.print("Minimum Value: ");
  Serial.println(minsensor);
  Serial.println();
 
  establishContact();
 
  digitalWrite(COL_pin, LOW);
}


void loop(){
 
  if (Serial.available() > 0){
    inByte = Serial.read();
   
    if(inByte == 'A'){
   
      for(int j = 12; j >= 0; j--){
        writeMux(j);
       
        for(int i = 0; i < 7; i++){
           
          valor = readMux(i);
         
          //Saturation sensors
          int limsup = 450;
          if(valor > limsup)
            valor = limsup;
           
          if(valor < calibra[j][i])
            valor = calibra[j][i]; 
         
          valor = map(valor,minsensor, limsup,1,254);
         
          if(valor < 150)
            valor = 0;
          if(valor > 254)
            valor = 254;
         
          Serial.write(valor);
          digitalWrite(COL_pin,!digitalRead(COL_pin));
        }
      }
    }
       
  }
}


int readMux(byte channel){
  byte controlPin[] = {s0, s1, s2, s3};

  //loop through the 4 sig
  for(int i = 0; i < 4; i ++){
    digitalWrite(controlPin[i], muxChannel[channel][i]);
  }

  //read the value at the SIG pin
  int val = analogRead(SIG_pin);

  //return the value
  return val;
}

void writeMux(byte channel){
  byte controlPin[] = {w0, w1, w2, w3};

  //loop through the 4 sig
  for(byte i = 0; i < 4; i ++){
    digitalWrite(controlPin[i], muxChannel[channel][i]);
  }
}

void establishContact() {
  while (Serial.available() <= 0) {
    Serial.print('A');   // send a capital A
    delay(300);
  }
}


Zu 2: Hatte ich zu Beginn des Threads mal erwähnt, ist für ein Projekt im Studium. Es soll die Belastung visualisiert und im besten Fall anhand von Werten dargestellt werden. Die Visualisierung funktioniert momentan mit Hilfe von Processing in Form von Peaks die bei Berührung angezeigt werden und je stärker der Druck auf die Sohle ist, desto höher wird der Peak.

agmue

Geht doch :)

Du hast write und print verwechselt, außerdem habe ich noch Zeilenvorschübe ergänzt:

Code: [Select]
//Mux control pins for analog signal (SIG_pin) default for arduino mini pro
const byte s0 = 13;
const byte s1 = 12;
const byte s2 = 11;
const byte s3 = 10;

//Mux control pins for Output signal (OUT_pin) default for arduino mini pro
const byte w0 = 9;
const byte w1 = 8;
const byte w2 = 7;
const byte w3 = 6;

//Mux in "SIG" pin default for arduino mini pro
const byte SIG_pin = 0;

//Mux out "SIG" pin default for arduino mini pro
const byte OUT_pin = 5;

//Row and Column pins default for arduino mini pro
const byte STATUS_pin = 3;
const byte COL_pin = 2;

const boolean muxChannel[16][4] = {
  {0, 0, 0, 0}, //channel 0
  {1, 0, 0, 0}, //channel 1
  {0, 1, 0, 0}, //channel 2
  {1, 1, 0, 0}, //channel 3
  {0, 0, 1, 0}, //channel 4
  {1, 0, 1, 0}, //channel 5
  {0, 1, 1, 0}, //channel 6
  {1, 1, 1, 0}, //channel 7
  {0, 0, 0, 1}, //channel 8
  {1, 0, 0, 1}, //channel 9
  {0, 1, 0, 1}, //channel 10
  {1, 1, 0, 1}, //channel 11
  {0, 0, 1, 1}, //channel 12
  {1, 0, 1, 1}, //channel 13
  {0, 1, 1, 1}, //channel 14
  {1, 1, 1, 1} //channel 15
};


//incoming serial byte
int inByte = 0;

int valor = 0;               //variable for sending bytes to processing
int calibra[13][7];         //Array 72 sensors
int minsensor = 254;        //Variable for staring the min array
int multiplier = 254;
int pastmatrix[13][7];

void setup() {

  pinMode(s0, OUTPUT);
  pinMode(s1, OUTPUT);
  pinMode(s2, OUTPUT);
  pinMode(s3, OUTPUT);

  pinMode(w0, OUTPUT);
  pinMode(w1, OUTPUT);
  pinMode(w2, OUTPUT);
  pinMode(w3, OUTPUT);

  pinMode(OUT_pin, OUTPUT);

  pinMode(STATUS_pin, OUTPUT);
  pinMode(COL_pin, OUTPUT);


  digitalWrite(s0, LOW);
  digitalWrite(s1, LOW);
  digitalWrite(s2, LOW);
  digitalWrite(s3, LOW);

  digitalWrite(w0, LOW);
  digitalWrite(w1, LOW);
  digitalWrite(w2, LOW);
  digitalWrite(w3, LOW);

  digitalWrite(OUT_pin, HIGH);
  digitalWrite(STATUS_pin, HIGH);
  digitalWrite(COL_pin, HIGH);



  Serial.begin(115200);


  // Full of 0's of initial matrix
  for (byte j = 0; j < 13; j ++) {
    writeMux(j);
    for (byte i = 0; i < 7; i ++)
      calibra[j][i] = 0;
  }

  // Calibration
  for (byte k = 0; k < 50; k++) {
    for (byte j = 0; j < 13; j ++) {
      writeMux(j);
      for (byte i = 0; i < 7; i ++)
        calibra[j][i] = calibra[j][i] + readMux(i);
    }
  }

  //Print averages
  for (byte j = 0; j < 12; j ++) {
    writeMux(j);
    for (byte i = 0; i < 6; i ++) {
      calibra[j][i] = calibra[j][i] / 50;
      if (calibra[j][i] < minsensor)
        minsensor = calibra[j][i];
      Serial.print(calibra[j][i]);
      Serial.print("\t");
    }
    Serial.println();
  }

  Serial.println();
  Serial.print("Minimum Value: ");
  Serial.println(minsensor);
  Serial.println();

  Serial.println(F("neue Messung mit 'A'"));

  digitalWrite(COL_pin, LOW);
}


void loop() {

  if (Serial.available() > 0) {
    inByte = Serial.read();

    if (inByte == 'A') {

      for (int j = 0; j < 12; j++) {
        writeMux(j);

        for (int i = 0; i < 6; i++) {

          valor = readMux(i);

          //Saturation sensors
          int limsup = 450;
          if (valor > limsup)
            valor = limsup;

          if (valor < calibra[j][i])
            valor = calibra[j][i];

          valor = map(valor, minsensor, limsup, 1, 254);

          if (valor < 150)
            valor = 0;
          if (valor > 254)
            valor = 254;

          Serial.print(valor);
          Serial.print(' ');
          digitalWrite(COL_pin, !digitalRead(COL_pin));
        }
        Serial.println();
      }
  Serial.println(F("\nneue Messung mit 'A'"));
    }

  }
}


int readMux(byte channel) {
  byte controlPin[] = {s0, s1, s2, s3};

  //loop through the 4 sig
  for (int i = 0; i < 4; i ++) {
    digitalWrite(controlPin[i], muxChannel[channel][i]);
  }

  //read the value at the SIG pin
  int val = analogRead(SIG_pin);

  //return the value
  return val;
}

void writeMux(byte channel) {
  byte controlPin[] = {w0, w1, w2, w3};

  //loop through the 4 sig
  for (byte i = 0; i < 4; i ++) {
    digitalWrite(controlPin[i], muxChannel[channel][i]);
  }
}

Das Programm macht noch nicht, was Du möchtest, aber zeigt nach jedem 'A' eine neue Ausgabe.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

ma1kels

Geht doch :)

Du hast write und print verwechselt, außerdem habe ich noch Zeilenvorschübe ergänzt:

Code: [Select]
//Mux control pins for analog signal (SIG_pin) default for arduino mini pro
const byte s0 = 13;
const byte s1 = 12;
const byte s2 = 11;
const byte s3 = 10;

//Mux control pins for Output signal (OUT_pin) default for arduino mini pro
const byte w0 = 9;
const byte w1 = 8;
const byte w2 = 7;
const byte w3 = 6;

//Mux in "SIG" pin default for arduino mini pro
const byte SIG_pin = 0;

//Mux out "SIG" pin default for arduino mini pro
const byte OUT_pin = 5;

//Row and Column pins default for arduino mini pro
const byte STATUS_pin = 3;
const byte COL_pin = 2;

const boolean muxChannel[16][4] = {
  {0, 0, 0, 0}, //channel 0
  {1, 0, 0, 0}, //channel 1
  {0, 1, 0, 0}, //channel 2
  {1, 1, 0, 0}, //channel 3
  {0, 0, 1, 0}, //channel 4
  {1, 0, 1, 0}, //channel 5
  {0, 1, 1, 0}, //channel 6
  {1, 1, 1, 0}, //channel 7
  {0, 0, 0, 1}, //channel 8
  {1, 0, 0, 1}, //channel 9
  {0, 1, 0, 1}, //channel 10
  {1, 1, 0, 1}, //channel 11
  {0, 0, 1, 1}, //channel 12
  {1, 0, 1, 1}, //channel 13
  {0, 1, 1, 1}, //channel 14
  {1, 1, 1, 1} //channel 15
};


//incoming serial byte
int inByte = 0;

int valor = 0;               //variable for sending bytes to processing
int calibra[13][7];         //Array 72 sensors
int minsensor = 254;        //Variable for staring the min array
int multiplier = 254;
int pastmatrix[13][7];

void setup() {

  pinMode(s0, OUTPUT);
  pinMode(s1, OUTPUT);
  pinMode(s2, OUTPUT);
  pinMode(s3, OUTPUT);

  pinMode(w0, OUTPUT);
  pinMode(w1, OUTPUT);
  pinMode(w2, OUTPUT);
  pinMode(w3, OUTPUT);

  pinMode(OUT_pin, OUTPUT);

  pinMode(STATUS_pin, OUTPUT);
  pinMode(COL_pin, OUTPUT);


  digitalWrite(s0, LOW);
  digitalWrite(s1, LOW);
  digitalWrite(s2, LOW);
  digitalWrite(s3, LOW);

  digitalWrite(w0, LOW);
  digitalWrite(w1, LOW);
  digitalWrite(w2, LOW);
  digitalWrite(w3, LOW);

  digitalWrite(OUT_pin, HIGH);
  digitalWrite(STATUS_pin, HIGH);
  digitalWrite(COL_pin, HIGH);



  Serial.begin(115200);


  // Full of 0's of initial matrix
  for (byte j = 0; j < 13; j ++) {
    writeMux(j);
    for (byte i = 0; i < 7; i ++)
      calibra[j][i] = 0;
  }

  // Calibration
  for (byte k = 0; k < 50; k++) {
    for (byte j = 0; j < 13; j ++) {
      writeMux(j);
      for (byte i = 0; i < 7; i ++)
        calibra[j][i] = calibra[j][i] + readMux(i);
    }
  }

  //Print averages
  for (byte j = 0; j < 12; j ++) {
    writeMux(j);
    for (byte i = 0; i < 6; i ++) {
      calibra[j][i] = calibra[j][i] / 50;
      if (calibra[j][i] < minsensor)
        minsensor = calibra[j][i];
      Serial.print(calibra[j][i]);
      Serial.print("\t");
    }
    Serial.println();
  }

  Serial.println();
  Serial.print("Minimum Value: ");
  Serial.println(minsensor);
  Serial.println();

  Serial.println(F("neue Messung mit 'A'"));

  digitalWrite(COL_pin, LOW);
}


void loop() {

  if (Serial.available() > 0) {
    inByte = Serial.read();

    if (inByte == 'A') {

      for (int j = 0; j < 12; j++) {
        writeMux(j);

        for (int i = 0; i < 6; i++) {

          valor = readMux(i);

          //Saturation sensors
          int limsup = 450;
          if (valor > limsup)
            valor = limsup;

          if (valor < calibra[j][i])
            valor = calibra[j][i];

          valor = map(valor, minsensor, limsup, 1, 254);

          if (valor < 150)
            valor = 0;
          if (valor > 254)
            valor = 254;

          Serial.print(valor);
          Serial.print(' ');
          digitalWrite(COL_pin, !digitalRead(COL_pin));
        }
        Serial.println();
      }
  Serial.println(F("\nneue Messung mit 'A'"));
    }

  }
}


int readMux(byte channel) {
  byte controlPin[] = {s0, s1, s2, s3};

  //loop through the 4 sig
  for (int i = 0; i < 4; i ++) {
    digitalWrite(controlPin[i], muxChannel[channel][i]);
  }

  //read the value at the SIG pin
  int val = analogRead(SIG_pin);

  //return the value
  return val;
}

void writeMux(byte channel) {
  byte controlPin[] = {w0, w1, w2, w3};

  //loop through the 4 sig
  for (byte i = 0; i < 4; i ++) {
    digitalWrite(controlPin[i], muxChannel[channel][i]);
  }
}

Das Programm macht noch nicht, was Du möchtest, aber zeigt nach jedem 'A' eine neue Ausgabe.

Stark! Ich danke dir :) Im Grunde genommen ist es so schon ganz okay, den jetzt kann z.B. Person A sich daraufstellen und ich erhalte die dazugehörigen Werte, anschließend Person B und es werden wieder neue Werte erzeugt nach Senden eines 'A'. So weit so gut.

Nur verwundert mich gerade, dass bei der ersten Ausgabe die Werte ja ganz ordentlich aussehen und nach dem Senden eines 'A' ändern sich die Werte in der Matrix nicht überall und wenn dann auch nur gering. Ich erhalte sehr oft eine 0. Woran kann das liegen?

agmue

Woran kann das liegen?
Das könnte daran liegen, daß die Zuordnung der Werte zu den Feldelementen nicht stimmt. C++ läßt es leider zu, auch in Feldelemente zu schreiben, die nicht definiert/deklariert sind.

Beispiel: muxChannel[16][4] bedeutet, x<16 und y<4. Das solltest Du überall, wo muxChannel[][] verwendet wird, überprüfen. Das gilt auch für calibra[13][7] und pastmatrix[13][7], also alle Felder.

Wenn man da nicht sehr sauber programmiert, schmiert der Arduino irgendwann ab oder liefert irre Daten.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

postmaster-ino

Hi

Wenn die Bitfolge von muxChannel nicht noch angepasst werden sollen - Das ist eine ganz normale binäre Zahl - so was kann man berechnen und muß keinen Speicher dafür opfern.
(wobei 'berechnen' schon ein sehr großes Wort dafür ist)

MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

ma1kels

Hi

Wenn die Bitfolge von muxChannel nicht noch angepasst werden sollen - Das ist eine ganz normale binäre Zahl - so was kann man berechnen und muß keinen Speicher dafür opfern.
(wobei 'berechnen' schon ein sehr großes Wort dafür ist)

MfG
Hi, da musst du mir jetzt etwas weiter auf die Sprünge helfen. Verstehe grad nicht ganz was du meinst?

Gruß

ma1kels

Das könnte daran liegen, daß die Zuordnung der Werte zu den Feldelementen nicht stimmt. C++ läßt es leider zu, auch in Feldelemente zu schreiben, die nicht definiert/deklariert sind.

Beispiel: muxChannel[16][4] bedeutet, x<16 und y<4. Das solltest Du überall, wo muxChannel[][] verwendet wird, überprüfen. Das gilt auch für calibra[13][7] und pastmatrix[13][7], also alle Felder.

Wenn man da nicht sehr sauber programmiert, schmiert der Arduino irgendwann ab oder liefert irre Daten.

Du meinst quasi wenn es so deklariert ist, dann sollte im weiteren Verlauf writeMux auch [16][4] sein?
Anfangs lege ich ja den muxChannel für jeden Kanal (0-15) fest. Meine Sohle besteht aber aus einem 13x7 array, d.h. ich verwende nur 13 bzw. 7 Kanäle des Mux. Soweit ich das jetzt durchgegangen bin, sollte die Programmierung hierfür eigentlich in Ordnung sein. Kann der Fehler auch woanders liegen?

agmue

Kann der Fehler auch woanders liegen?
Na klar, Feldüberlauf ist halt ein Klassiker.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

postmaster-ino

Hi
Hi, da musst du mir jetzt etwas weiter auf die Sprünge helfen. Verstehe grad nicht ganz was du meinst?
Du hast in Deinem Code
Code: [Select]
const boolean muxChannel[16][4] = {
  {0, 0, 0, 0}, //channel 0
  {1, 0, 0, 0}, //channel 1
  {0, 1, 0, 0}, //channel 2
  {1, 1, 0, 0}, //channel 3
  {0, 0, 1, 0}, //channel 4
  {1, 0, 1, 0}, //channel 5
  {0, 1, 1, 0}, //channel 6
  {1, 1, 1, 0}, //channel 7
  {0, 0, 0, 1}, //channel 8
  {1, 0, 0, 1}, //channel 9
  {0, 1, 0, 1}, //channel 10
  {1, 1, 0, 1}, //channel 11
  {0, 0, 1, 1}, //channel 12
  {1, 0, 1, 1}, //channel 13
  {0, 1, 1, 1}, //channel 14
  {1, 1, 1, 1} //channel 15
};

Darin sind für die Channel 0 bis 15 vier Zaheln eingetragen, Die wohl den Muxer entsprechend ansteuern sollen.
Wenn man diese Zahlen umdreht (also statt 1000 -> 0001), sind Das die binären Zahlen des entsprechenden Channel.
0000 = 0
0001 = 1 (nur Bit 0 gesetzt)
0010 = 2
0011 = 3
...
1101 = 13 (8 + 4 + 1)
1110 = 14 (Bit 1 bis 3 gesetzt)
1111 = 15
Bisher habe ich selber nicht viel mit analogen Inputs gemacht, meine damaligen Blicke zeigten aber, daß die entsprechenden Bits in den Registern ebenfalls 'zusammen hängen' (zumindest im ATtiny45, Register ADMUX (0x07), Bits 0...3).
Somit kannst Du dieses Register mit der Channel-Nummer 'ver-ODER-n' und ver-UND-en (setzen der fehlenden Bits, löschen der überzähligen Bits).

MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

ma1kels

HiDu hast in Deinem Code
Code: [Select]
const boolean muxChannel[16][4] = {
  {0, 0, 0, 0}, //channel 0
  {1, 0, 0, 0}, //channel 1
  {0, 1, 0, 0}, //channel 2
  {1, 1, 0, 0}, //channel 3
  {0, 0, 1, 0}, //channel 4
  {1, 0, 1, 0}, //channel 5
  {0, 1, 1, 0}, //channel 6
  {1, 1, 1, 0}, //channel 7
  {0, 0, 0, 1}, //channel 8
  {1, 0, 0, 1}, //channel 9
  {0, 1, 0, 1}, //channel 10
  {1, 1, 0, 1}, //channel 11
  {0, 0, 1, 1}, //channel 12
  {1, 0, 1, 1}, //channel 13
  {0, 1, 1, 1}, //channel 14
  {1, 1, 1, 1} //channel 15
};

Darin sind für die Channel 0 bis 15 vier Zaheln eingetragen, Die wohl den Muxer entsprechend ansteuern sollen.
Wenn man diese Zahlen umdreht (also statt 1000 -> 0001), sind Das die binären Zahlen des entsprechenden Channel.
0000 = 0
0001 = 1 (nur Bit 0 gesetzt)
0010 = 2
0011 = 3
...
1101 = 13 (8 + 4 + 1)
1110 = 14 (Bit 1 bis 3 gesetzt)
1111 = 15
Bisher habe ich selber nicht viel mit analogen Inputs gemacht, meine damaligen Blicke zeigten aber, daß die entsprechenden Bits in den Registern ebenfalls 'zusammen hängen' (zumindest im ATtiny45, Register ADMUX (0x07), Bits 0...3).
Somit kannst Du dieses Register mit der Channel-Nummer 'ver-ODER-n' und ver-UND-en (setzen der fehlenden Bits, löschen der überzähligen Bits).

MfG
Hi,

du meinst quasi ich müsste die vier Zahlen in meinem Code umgedreht schreiben? Oder was genau meinst du mit
Quote
Somit kannst Du dieses Register mit der Channel-Nummer 'ver-ODER-n' und ver-UND-en (setzen der fehlenden Bits, löschen der überzähligen Bits).
Danke und Gruß

agmue

du meinst quasi ich müsste die vier Zahlen in meinem Code umgedreht schreiben?
Die binäre Darstellung von Zahlen erfolgt üblicherweise mit dem höchsten signifikanten Bit links beginnend:

0x01 = 0000 0001

Bei Dir steht {1, 0, 0, 0}, //channel 1, was genau umgedreht ist. Du könntest auf das Feld muxChannel verzichten und mit Bitschubsereien den gleichen Effekt erzielen.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Nyto14

Ich habe es auch bereits mit dem dort verwendeten code versucht umzusetzen. Habe diesen natürlich auf eine 12x6 Matrix angepasst, sowohl im Arduino als auch im Processing. Ändere ich die beiden Sketche nicht, also starte ich es mit 15x15, dann läuft alles bis auf die Darstellung im Processing, die zeigt mir natürlich 225 Kästchen an. Aber sobald ich alle Befehle auf 12x6 anpasse und wieder auf den Arduino spiele, dann zeigt mir die Darstellung zwar 72 Kästchen an, aber es tut sich nicht wirklich was. Woran könnte es liegen?
Would you please help me with that code on the 15x15 matrix, the original code for the omat, both the arduino and processing codes, thank you in advance, I know this was already dealt with a while ago but I am in need of it just to confirm a few stuff, though I'm going to use PIC18F for my presentation.

Go Up