SoftwareSerial mit Tiny84A

Grüße,
ich versuche gerade Mittels Softwareserial ein Midi-Signal an meinen Rechner zu schicken. Dafür hatte ich mir folgende Pin Konfiguration überlegt

Die Kontrol LED Soll nur Blinken damit ich weiß das das Programm geschrieben wurde und der Tiny läuft.
Zum testen habe ich folgendes geschrieben:

#include <SoftwareSerial.h>

void setup() {
  // put your setup code here, to run once:
SoftwareSerial mySerial(8, 9);

  pinMode(8, INPUT);
  pinMode(9, OUTPUT);
  pinMode(0, OUTPUT);
  mySerial.begin(9600);
}

void loop() {
       mySerial.write(45);
         mySerial.write(64);
          mySerial.write(50);
           // put your main code here, to run repeatedly:di
 digitalWrite(0, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(100);                       // wait for a second
  digitalWrite(0, LOW);    // turn the LED off by making the voltage LOW
  delay(100);                       // wait for a second

nun meckert aber die IDE und sagt:

Arduino: 1.8.19 (Windows Store 1.8.57.0) (Windows 10), Board: "ATtiny24/44/84(a) (No bootloader), Enabled, ATtiny84(a), 8 MHz (internal), EEPROM retained, B.O.D. Disabled (saves power), Clockwise (recommended, like damellis core), Enabled, Port A (CW:0~7,CCW:3~10)"

'mySerial' was not declared in this scope

ich versteh nur nicht warum denn my.Serial ist doch im Setup definiert und beim mySerial.begin weiß er ja auch was ich meine. Warum kommt es hier zum Fehler?

Du musst dein mySerial global ( außerhalb von setup() ) anlegen, sonst ist das nur in setup() bekannt, und nach dem Ende von setup() wieder verschwunden.

1 Like

ah sehr gut und wenn man dann noch beim mySerial.begin die richtige Zahl einträgt, (31250 stats9600) dann kommt am Rechner auch ein MIDI-Signal an.

Ich hab noch ein Problem, es werden Zwar MIDI Daten gesendet aber es Kommt nicht das raus was rein geht.
Das ist mein CODE

#include <SoftwareSerial.h>
SoftwareSerial  mySerial(8, 9);

int MIDI =0;
void setup() {
  pinMode(8, INPUT);
  pinMode(9, OUTPUT);
  pinMode(0, INPUT);
  mySerial.begin(31250);
}



void loop() {
  MIDI= analogRead(0) / 8;
       mySerial.write(177);
         mySerial.write(111);
          mySerial.write(MIDI);
                 
}

Das ist mein Aufbau

und das ist mein ergebnis

Wo ist der Fehler?

Sicher, dass SoftwareSerial diese Baudrate unterstützt?
Ist ja eher eine untypische Rate.

Was erwartest Du denn als Ergebnis? 0xB1 0x6F sollte konstant angekommen, wenn Du 177 und 111 per Serial.write herausgibst.
Oder möchtest Du die als Integer ausgeben? Dann versuch es mal mit Serial.print anstelle von write.

Die seriellen Pins (8, 9) brauchst du im Setup nicht extra zu definieren. Das macht SoftwareSerial für dich.

na die das erste write ist ja der Global channel und die Controller art da sollte bei 177 GC2 udn Controllchange rauskommen 111 ist die Controler nummer und MIDI sollte der wert des Potis sein.

das da am ende ein Note Off raus kommt ist schon mal falsch

Du sendest laufend 3 Bytes raus. Ohne Verzögerung oder spezielles Endzeichen.
Keine Ahnung was das von Dir gezeigte Programm da interpretiert oder an Daten benötigt.
Denke dort liegt der Hase im Pfeffer.