Hilfe bei µC und PC Kommunikation

Hallo Leute :smiley:

Folgendes möchte ich realisieren:

  • Kommunikation zwischen µC und PC
  • PC sendet *10250# (die letzten drei Ziffern sind für den duty der PWM)
  • Die ersten beiden Ziffern nach dem „*“ sollen zum Schalten der IO’s genutzt werden.
  • Die PWM kann ich tatsächlich einstellen, das Funktioniert
  • Die IO’s kann ich nicht schalten wenn ich „data[1]“ benutze

Ich habe da offensichtlich ein Denkfehler.
Könnt ihr mir bitte unter die Arme greifen!
Danke und ein lieben Gruß

#include <SoftwareSerial.h>

SoftwareSerial myConnection(0, 1); // RX,TX
char data[7] = {0,0,0,0,0,0,0};
int duty=0;



void setup() 
{
 myConnection.begin(9600);
 pinMode(22, OUTPUT); 
 
   //Löschen der Timer/Counter Control Register A und B

  TCCR1A = 0;
  TCCR1B = 0;

  //Modus Fast PWM-Mode 8 Bit einstellen
  TCCR1A |= (1 << WGM10) | (0 << WGM11);
  TCCR1B |= (1 << WGM12);

  //Vorteiler auf 1 setzen
  TCCR1B |= (1 << CS10);

  //Nichtinvertiertes PWM-Signal setzen
  TCCR1A |= (1 << COM1A1);

  //PWM-Pin 9 als Ausgang definieren
  DDRB |= (1 << DDB1);
}


void loop() 
{

  if (myConnection.available()==7)
  {

    for (int i=0; i<6; i++)
    {
      data[i]=data[i+1];
         
    }
    data[6]=myConnection.read();
    
    if ((data[0]=='*')&&(data[6]=='#'))
    {

 
    myConnection.print(data[1]);
    myConnection.print(data[2]);
    myConnection.print(data[3]);
    myConnection.print(data[4]);
    myConnection.print(data[5]);

duty = (data[3]*100)+(data[4]*10)+data[5];
if(data[1]==1)
 {
digitalWrite(22,HIGH);
}
  else
 {
digitalWrite(22,LOW);
}


}
  }

   analogWrite(9, duty);

}

Danach kannst Du alle 7 Zeichen direkt einlesen, ohne Herumschieben von data[i].

Du meinst vermutlich '1'?

1 Like

Danke, da habe ich wohl was vergsees upss
ist das peinlich!

Danke für die Hilfe!

Das sind zwei Ziffern. Teilt sich das auf in PinNummer / Zustand oder ist das ein zweistelliger Pin, der getoggelt wird?

Das könnte Dir auf die Füsse fallen, wenn da ein zufälliges Zeichen aufgenommen wird.

Diese Angabe irritiert mich.
Welchen Arduino verwendest du. Üblicherweise werden D0 und D1 vom USB-Serialwandler genutzt. Da kannst du schnell Probleme bekommen.
Verwende für SoftwareSerial andere, freie digitale Pins.

Richtig, und nur an diesen Pins hängt dann auch das USB Interface. Damit ist SoftwareSerial raus, kann nur mit einem zusätzlichen USB-seriell Modul funktionieren.

Dann frage ich doch, warum überhaupt SoftwareSerial ?
Wie es aussieht, ist es ein Mega und der hat doch weitere 3 serielle Schnittstellen..
Warum wird da nicht eine von genommen ?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.