Code umwandeln Arduino

Der Teensy-Core lässt sich nicht installieren. Meine 1.8.19 meint nicht unterstütztes Datenformat ;(
Leider kann ich Dir nicht weiter helfen, als bis auf diese Zeile.

unsigned char sampleData[5338] PROGMEM = {

Um weiter zu suchen müsste ich es kompilieren können oder eine vollständige Fehlermeldung sehen...

Der obere Teensy-Core Installer ist nur für die 2.x. (steht auch indirekt drüber)
Weiter unten gibt es welche für die 1.8.x.

Gruß Tommy

Wie meinst?
Die 1.xx.y Versionen nicht?
Ich hab das jetzt nicht manuell machen wollen und mir extra ne portable angelegt.
Runterladen geht, installlieren nicht

Es stellen sich Fragen... :weary:

// edit: vergiss es. Die 0.xx.4 gibt mir einen CRC-Error, die 0.xx.3 not supprtet Archive-Format.
Ich weiss schon, warum ich diese ganzen Exoten nicht mag. Das waren jetzt gutgehend 1,5h die ich eigentlich mein Herzensprojekt überarbeiten wollte.

egal. :zzz:

Ich habe es nicht getestet. Hast Du die Version für die 1.8.x geladen?

Gruß Tommy

Edit: Version für 1.8.x geladen, gestartet, Pfad zur portablen IDE ausgewählt - installiert.

Im Boardmanager kann ich nix auswählen.

Ich werd am Sonntag weiter machen, wenn bis dahin der TO nicht schon fertig ist. Das ist mir zu anstrengend auf dem 10"er...

Auf so einem Guckloch würde ich es auch nicht machen wollen.
Ich habe den Installer für 1.8.x von Paul Stoffregen runter geladen und den installiert (nach Auswahl einer portablen Installation). Habe die aber mangels Teensy (irgendwo schwirrt da noch einer aus dem Crowdfunding rum) nicht getestet.

Gruß Tommy

Ja hatte ich auch schon gemacht.
Sowie eine typedef zur Wandlung des Codes.

dann folgende Fehlermeldung:

'sampleData' must be const in order to be put into read-only section by means of 'attribute((progmem))'

Dann hab ich in 'const unsigned char' geaendert und in 'int unsigned char'

Darauf liess es sich compilieren und hochladen.Bei beiden Varianten.

Einziger Fehler ist das er mir 'unused variables' noch anzeigt.
Vl macht der Teensy trotzdem was er soll, sobald alles im Breadboard steck.

➜ ...

Damit hast du damit eine der grundlegenden Typisierungsregeln verletzt.
Natürlich funktioniert das nicht.

Meine Feststellung, über Jahre gewachsen: Man schreibt keine Programme durch "wirres ausprobieren".

Und zweitens:
Das Wissen um die C++ Grundlagen ist überaus hilfreich.
z.B. aus einem schönen, dicken und modernem C++ Grundlagenbuch

Übersetz Dir das mal.
Und dann überleg warum Dir das angezeigt wird.
Die Lösung findest Du dann von allein.
(Ich habe die Hoffnung nicht ganz aufgegeben)

Ja ich koennte die mal alle rausloeschen, wenn ich nicht vorhabe sie zu nutzen.Das meinst du wohl

Genau das...

Wird gemacht.Setze // davor.

Hallo zusammen,

ich habe einen anderen Sketch.Dieser kompiliert einwandfrei.
Soweit so gut.....

Das Programm steuert den Nano via USBmidi an.
Die Eingabe erfolgt ueber Synthesiamusickeyboard am PC--------->MIDILoop-------->HairlessMidiBridge----------->Nano
Funktioniert auch (RX LED leuchtet rot beim Anschlag der Tasten, bzw wechseln des MIDIchannels,etc.)
Hairless funktioniert somit ja auch, was ich am debuggen der MIDImessages ja sehe und an der RX LED am Nano.

Daraus schliesse ich, dass der Nano ja mit COMport7 verbunden ist.Das ist auch der Port der beim einstoepseln des Nanos in die USBbuchse am PC in den IDEports auftaucht.

Aber......

Beim draufspielen des Sketches oder anderer Sketche funktioniert es mal und mal nicht(RX PIN D0 nicht angeschlossen).

Folgende Meldung :

Sketch uses 6504 bytes (21%) of program storage space. Maximum is 30720 bytes.
Global variables use 659 bytes (32%) of dynamic memory, leaving 1389 bytes for local variables. Maximum is 2048 bytes.
avrdude: ser_open(): can't open device "\.\COM7": Zugriff verweigert

Failed uploading: uploading error: exit status 1

Ich habe im Geraetemanager nichts gefunden, dass der Port anders genutzt wird.
Manchmal hilft ein und ausstoepseln, aber selten.
Nano Reset bringt auch nichts.
Funktioniert rein willkuerlich.
Die IDE hab ich auch mehrfach neu installiert, sowie den alten ATMEGA Bootloader ausprobiert.

Der Sketch enthaelt allerdings 1 Ausrufezeichen in verschiedenen Zeilen in einem Befehl.(Habe nachgelesen, dass das Problem machen koennte, sowie auch 212121.Aber mit anderen Sketchen, sowie der Blinkcodelibrary verhaelt sich alles genauso willkuerlich.
auch wenn ich zum Upload den Nano aus der Schaltung nehme ist selbes Problem(Alle Pins des Nano liegen auf einer nichtleitenden Oberflaeche.

Ich weiss nicht weiter.....

Wo ist die HairlessMidiBridge am Nano angeschlossen?
Nur 3! hintereinander konnten mal (?können noch?) Probleme bereiten.
Mehr kann man ohne Sketch nicht dazu sagen.
Setze den Sketch bitte in Codetags. Wie das geht, steht hier.

Gruß Tommy

und ausserdem, habe ich eben vergessen zu erwaehnen :

GET BoardInfo in der IDE kommt folgendes :

Board Info
BN: UNKNOWN BOARD
VID: 0x0403
PID: 0x6001
SN; B0004FBXA

Danke ich stelle den Sketch gleich hier als Code ein.

Aber mein groesstes Problem ist gerade, warum COMport 7 beim Upload willkuerlich funktioniert oder nicht funktioniert.

Beantwortet Du auch meine Frage?

Gruß Tommy

// Sketch written by Jeroen Janmaat
// This version 2013/06/01

// For 1 MHz clock
#define myOutputPin 9

// For switches
int dataWidth = 8;
//int dataSwitches[8] = {2,3,4,5,6,7,8,10};
int dataSwitches[8] = {10,8,7,6,5,4,3,2};
int data[8] = {0,0,0,0,0,0,0,0};
int addressWidth = 5;
int addressSwitches[5] = {A0,A1,A2,A3,A4};
int address[5] = {0,0,0,0,0};
int ii = 0; // just a counter

// For serial comms
char inByte = 0;            // incoming serial byte
int addressAvailable = 0;
int dataAvailable = 0;

// Interpretation of midi
double f[96];
int data_Fhi[8] = {0,0,0,0,0,0,0,0};
int data_Flo[8] = {0,0,0,0,0,0,0,0};
byte Byte1 = 0;
byte Byte2 = 0;
byte Byte3 = 0;
byte voice1on = 0;
byte voice1last = 0;

void setup ()
{
  
  pinMode (myOutputPin, OUTPUT); 
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1  = 0;
  OCR1A = 7;   // toggle after counting to 8
  TCCR1A |= (1 << COM1A0);   // Toggle OC1A on Compare Match.
  TCCR1B |= (1 << WGM12);    // CTC mode
  TCCR1B |= (1 << CS10);     // clock on, no pre-scaler
  
  // Check for MIDI or USB comms
/*  pinMode(A4, INPUT);
    if(digitalRead(A4))
      Serial.begin(31250);
    else
      Serial.begin(38400);
*/

  // configure I/O to write address and write data
  for(ii=0; ii<addressWidth; ii++) {
    pinMode(addressSwitches[ii], OUTPUT);
    digitalWrite(addressSwitches[ii], address[ii]);
  }
  for(ii=0; ii<dataWidth; ii++) {
    pinMode(dataSwitches[ii], OUTPUT);
    digitalWrite(dataSwitches[ii], data[ii]);
  }

  pinMode(12, OUTPUT);       // execute on SID
  digitalWrite(12, HIGH);    // and set to high
  pinMode(A5, INPUT_PULLUP); // read 'enter' here
  pinMode(13, OUTPUT);       // enable/disable switches
  digitalWrite(13, HIGH);    // deactivate switches
  pinMode(11, OUTPUT);       // R/W select line
  digitalWrite(11, LOW);     // Set R/W select to 0 for Write mode
  
  // Calculate frequencies
  for (ii=0; ii<=95; ii++)
    f[ii] = 440.0*pow(2.0,(ii-57)/12.0);

  //Serial.begin(38400);
  Serial.begin(31250);
  
  // Set volume and ADSR.
  initialSettings();
  
}

void loop () 
{
  
  ////////////////////////////////
  // Front panel mode
  ////////////////////////////////  
  
  if(digitalRead(A5)) {      // 'enter' has been detected

    digitalWrite(13, LOW);   // activate switches

    // configure I/O to read switches and read switches
    for(ii=0; ii<addressWidth; ii++) {
      pinMode(addressSwitches[ii], INPUT_PULLUP);
    }
    for(ii=0; ii<dataWidth; ii++) {
      pinMode(dataSwitches[ii], INPUT_PULLUP);
    }

    // configure I/O to read switches and read switches
    for(ii=0; ii<addressWidth; ii++) {
      address[ii] = digitalRead(addressSwitches[ii]);
    }
    for(ii=0; ii<dataWidth; ii++) {
      data[ii] = digitalRead(dataSwitches[ii]);
    }

    digitalWrite(13, HIGH);   // deactivate switches
    
    // configure I/O to write address and write data
    for(ii=0; ii<addressWidth; ii++) {
      pinMode(addressSwitches[ii], OUTPUT);
      digitalWrite(addressSwitches[ii], address[ii]);
    }
    for(ii=0; ii<dataWidth; ii++) {
      pinMode(dataSwitches[ii], OUTPUT);
      digitalWrite(dataSwitches[ii], data[ii]);
    }
    
    digitalWrite(12, LOW);
    delayMicroseconds(2000);;
    digitalWrite(12, HIGH);
    delay(200); // simple debounce
  }

  ////////////////////////////////
  // Remote mode
  ////////////////////////////////
  
  if (Serial.available() > 0) {
    Byte1 = Serial.read();
    if ((Byte1 == 144) || (Byte1 == 128)) {
      while(!Serial.available()) ;
      Byte2 = Serial.read();
      while(!Serial.available()) ;
      Byte3 = Serial.read();

      // Write note 'on'
      if ((Byte3 > 0) && (Byte1 != 128)) {
        if (voice1on)
          voice1on = noteOff();
        programNote(Byte2);
        voice1on = noteOn();
        voice1last = Byte2;
      }
      // Write note 'off'
      if ((Byte3 == 0) || (Byte1 == 128))
        if (voice1last == Byte2)
          voice1on = noteOff();
    }
  } 
}

void programNote(int midinote) { 
  calcFreq(f[midinote-12]);
  address[0] = 0; address[1] = 0; address[2] = 0; address[3] = 0; address[4] = 0;
  for(ii=0; ii<addressWidth; ii++) {
    pinMode(addressSwitches[ii], OUTPUT);
    digitalWrite(addressSwitches[ii],address[ii]);
  }
  for(ii=0; ii<dataWidth; ii++) {
    pinMode(dataSwitches[ii], OUTPUT);
    digitalWrite(dataSwitches[ii], data_Flo[ii]);
  }
  clockIn();

  address[0] = 1;
  for(ii=0; ii<addressWidth; ii++)
    digitalWrite(addressSwitches[ii],address[ii]);
  for(ii=0; ii<dataWidth; ii++)
    digitalWrite(dataSwitches[ii], data_Fhi[ii]);
  clockIn();
}

int noteOn(void) {      
   address[0] = 0; address[2] = 1;
   data[0] = 1; data[1] = 0; data[2] = 0; data[3] = 0; data[4] = 1; data[5] = 0; data[6] = 0; data[7] = 0;
   for(ii=0; ii<addressWidth; ii++)
     digitalWrite(addressSwitches[ii],address[ii]);
   for(ii=0; ii<dataWidth; ii++)  
     digitalWrite(dataSwitches[ii], data[ii]);
   clockIn();
   
   return 1;
}

int noteOff(void) {
  address[0] = 0; address[2] = 1;
  data[0] = 0; data[1] = 0; data[2] = 0; data[3] = 0; data[4] = 1; data[5] = 0; data[6] = 0; data[7] = 0;
  for(ii=0; ii<addressWidth; ii++)
    digitalWrite(addressSwitches[ii],address[ii]);
  for(ii=0; ii<dataWidth; ii++)  
    digitalWrite(dataSwitches[ii], data[ii]);
  clockIn();
  
  return 0;
}

void initialSettings() {
  // Set Attack and Decay
  address[0]=1;address[1]=0;address[2]=1;address[3]=0;address[4]=0;
  data[0]=1;data[1]=1;data[2]=0;data[3]=1;data[4]=0;data[5]=0;data[6]=0;data[7]=0;
  for(ii=0; ii<addressWidth; ii++)
    digitalWrite(addressSwitches[ii],address[ii]);
  for(ii=0; ii<dataWidth; ii++)  
    digitalWrite(dataSwitches[ii], data[ii]);
  clockIn();
  // Set Sustain and Release
  address[0]=0;address[1]=1;address[2]=1;address[3]=0;address[4]=0;
  data[0]=0;data[1]=0;data[2]=0;data[3]=1;data[4]=0;data[5]=0;data[6]=1;data[7]=0;
  for(ii=0; ii<addressWidth; ii++)
    digitalWrite(addressSwitches[ii],address[ii]);
  for(ii=0; ii<dataWidth; ii++)  
    digitalWrite(dataSwitches[ii], data[ii]);
  clockIn();
  // Set Volume
  address[0]=0;address[1]=0;address[2]=0;address[3]=1;address[4]=1;
  data[0]=1;data[1]=1;data[2]=1;data[3]=1;data[4]=0;data[5]=0;data[6]=0;data[7]=0;
  for(ii=0; ii<addressWidth; ii++)
    digitalWrite(addressSwitches[ii],address[ii]);
  for(ii=0; ii<dataWidth; ii++)  
    digitalWrite(dataSwitches[ii], data[ii]);
  clockIn();
}
      
void clockIn(void) {
  digitalWrite(12, LOW);
  delayMicroseconds(2000);;
  digitalWrite(12, HIGH);
}

void calcFreq(double frequency) {
  byte Fhi, Flo;
  
  // Commodore magic to calculate high and low frequency data
  double F = frequency/0.059605;
  Fhi = F/256;
  Flo = (F+.5)-Fhi*256;
  
  // Convert data to sequence of ones and zeroes
  for (ii=0;ii<dataWidth;ii++) {
    data_Fhi[ii] = (Fhi>>ii)&1;
    data_Flo[ii] = (Flo>>ii)&1;
  }
}

Die Hairless ist via USB am Nano angeschlossen.

Entschuldige, dachte ich schrieb das schon.

Danke