Seite 1 von 1

PB schaltet über Arduino LED

Verfasst: 02.01.2018 19:21
von Lennart
Hallo liebe Forenmitglieder!

Möchte mich kurz vorstellen: Lennart(schwedisch), 53J, Elektronikbastler seit Philips Baukästen 1972, Modellbahner, PIC Programmierer über Parsic, Platinenfräser mit CNC....., Eagle cad...
Grundsätzlich ist ja "learning by doing" mein ewiges erfolgreiches Motto, jetzt häng ich aber fest und möchte um eure Hilfe bitten.

Vorhandene Hard und Software; ArduinoMega2560, Breadboards,Led... PureBasic Programm

Ich sitze nun schon seit Tagen und versuche folgendes zu realisieren:
Kleines PB-Proggi mit 2 Buttons (LED "rot" und LED "grün")in weisser Farbe gehalten,Programmhintergrundfarbe egal.
EINER davon soll schon, als hätte man ihn bereits per Maus angeklickt rot oder grün dargestellt werden. ButtonBeschriftung rot und grün
Paralell dazu soll am Arduino die rote oder grüne Led leuchten (z.B. Pin 12 für rot, Pin 13 für grün)
Klicke ich per Maus den anderen Button als den farblich "aktiven", soll dieser aktiv sich einfärben,der ursprüngliche wieder weiss werden,
die Led am Arduino parallel mitmachen. Also "roter Button-rote Led" oder nach klick "grüner Button-grüne Led).

Hätt ich nicht schon Kopfschmerzen würde ich nicht um Hilfe bitten :freak:

Danke für Eure Unterstützung
Lennart

Re: PB schaltet über Arduino LED

Verfasst: 02.01.2018 19:59
von Mijikai
Mit Arduino kenne ich mich nicht aus, hier trotzdem mal ein Grundgerüst...

Code: Alles auswählen

;PB 5.61 [OS: Windows]
If OpenWindow(0,0,0,100,120,"LED",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  SetWindowColor(0,#Black)
  If TextGadget(1,40,10,50,50,"ROT",#SS_NOTIFY) And TextGadget(2,40,60,50,50,"GRÜN",#SS_NOTIFY)
    SetGadgetColor(1,#PB_Gadget_BackColor,#Red)
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_Gadget
          If EventGadget() = 1
            SetGadgetColor(1,#PB_Gadget_BackColor,#Red)
            SetGadgetColor(2,#PB_Gadget_BackColor,#White)
          Else
            SetGadgetColor(1,#PB_Gadget_BackColor,#White)
            SetGadgetColor(2,#PB_Gadget_BackColor,#Green)
          EndIf
        Case #PB_Event_CloseWindow
          Break
      EndSelect
    ForEver
  EndIf
EndIf 

Re: PB schaltet über Arduino LED

Verfasst: 02.01.2018 23:55
von ccode_new
Hallo Lennart,

ich werde dir jetzt kein fertiges Programm basteln.

Aber ich gebe dir einiges von Nutzen mit.

1. Farbige Button werden direkt von PureBasic nicht unterstützt.

> Du könntest mit CreateImage(..) arbeiten und ButtonImageGadget(..) verwenden.

2. Ein COM-Port öffnest du z.B. so:

;Global Port.s = "/dev/ttyACM0"
Global Port.s = "COM1"
Global Baudrate.i = 9600
OCom = OpenSerialPort(0, Port, Baudrate, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)

3. Seriale-Daten vom Arduino liest du zum Beispiel so:

Code: Alles auswählen

Procedure.s ReadSerialPortString(port.i)
   Protected length.i = AvailableSerialPortInput(port)
   Protected *mem, pos = 0
   Protected result.s
   
   If length And IsSerialPort(port)
      *mem = AllocateMemory(length)
      While pos < length
         pos + ReadSerialPortData(port, *mem + pos, length - pos)
      Wend
      result = PeekS(*mem, length, #PB_Ascii)
      FreeMemory(*mem)
      
      ProcedureReturn result
   EndIf
   ProcedureReturn ""
 EndProcedure

....
Case #PB_Event_Timer
     If EventTimer() = 123
       If IsSerialPort(0)
        Bytes = AvailableSerialPortInput(0)
               If Bytes >= 8
                  output = ReadSerialPortString(0)
               EndIf
        SerialOut = output
      EndIf
4. Daten zum Arduino (für das Schalten) sendest du z.B. so:

Code: Alles auswählen

If IsSerialPort(0)
   WriteSerialPortString(0, "1") ;z.B. Anschalten
EndIf
5. Auf dem Arduino könnte das dann so aussehen:

Code: Alles auswählen

String inputString = "";
boolean stringComplete = false;
int led = 13;

void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(9600);
  inputString.reserve(200);
}

void loop() {
  if (stringComplete) {
    Serial.println(inputString);
    inputString = "";
    stringComplete = false;
  }
}

void serialEvent() {
  while (Serial.available()) {
    
    char inChar = (char)Serial.read(); 

    if (inChar == '1') { //LED anschalten
      digitalWrite(led, HIGH);
      stringComplete = true;
    }
    if (inChar == '0') { //LED ausschalten
      digitalWrite(led, LOW);
      stringComplete = true;
    } 
  }
}
Das dient alles nur als einfaches Beispiel.
Viel Spaß beim Probieren und Programmieren.

Re: PB schaltet über Arduino LED

Verfasst: 03.01.2018 09:45
von Lennart
Danke an Mijikai und ccode_new, werde mal intensiv aufarbeiten, was draus lernen,
und mich dann natürlich mit "Erfahrungen" melden. :allright:
Gruß Lennart

Re: PB schaltet über Arduino LED

Verfasst: 03.01.2018 12:21
von tft
Hallo,

also PB und Arduino sind genau mein Ding. Da du schon gute Hinweise erhalten hast. Probier erst mal. Wenn du dann nicht weiter kommst
helfe ich gerne weiter. In unserem Alter muss man sich helfen :-)

Gruss Turgut

Re: PB schaltet über Arduino LED

Verfasst: 03.01.2018 20:10
von Lennart
Oh, danke an tft, ich arbeit mal los, melde mich bei Euch dann mit meinen ERFAHRUNGEN !!!
PS:tut gut so das helfen im Alter...... :lol:
das kennt die Jugend noch nicht :bounce: