TTP-229 touch pad am STM32 blue pill mit der Arduino Software programmiert

Nachdem ich nun das STM32 Board von der Arduino Software mit einem FTDI USB Adapter programmieren kann (Beschreibung hier) , will ich einmal das letzte Programm für das TTP-229 Touch Pad hier laufen lassen.

Geändert wurden die Anschlüsse:
Das TTP229 Touchpad wir jetzt mt 3,3V betrieben, dann nimmt es auch die Daten mit 3,3V und gibt sie entsprechend aus. Deshalb wird es an den 3.3V Pin und Masse angeschlossen.
SCL >> Pin B13
SDO >> Pin B12
Beeper+ >> Pin B15

Und die serielle Textausgabe:
Der FTDI USB Adapter ist an RX >> A9 und TX >> A10 angeschlossen.
Das sind beim STM32 Board  RX1 und TX1.
Deshalb wurden die Serial… Befehle umgeschieben ins Serial1…

Zum Hochladen der Software muss nun der Arduino Serial Monitor geschlossen werden, sonst blockiert er die Schnittstelle und die Software kann nicht hochgeladen werden.

Alles andere ist geblieben und funktioniert gut wie vorher.

Hier das Programm mit den kleinen Änderungen wie beschrieben:

// TTP229 (HW-136) touch field with 16 pads
// serial read to STM32 blue pill
// 5V beeper for key click
// add to the double number and print when enter is pressed
// including +/- and decimal
//
// connected: keypad 3,3V & GND, SCL > Pin B13, SDO > Pin B12 
// and 5V beeper + > Pin B15, - > GND 
//
// Matthias Busse 26.11.2022 Ver. 3.0

#define SCL PB13 // connect SCL to Pin B13
#define SDO PB12 // connect SDO to Pin B12
#define BEEP PB15 // connect + 3,3V Beeper to Pin B15

int key, comma, k;
double number, dec;

void setup() {
  Serial1.begin(38400);
  pinMode(SCL, OUTPUT);  
  pinMode(SDO, INPUT); 
  pinMode(BEEP, OUTPUT);
  digitalWrite(SCL, HIGH);
  Serial1.println("start");
  number=0.0;
  comma=0;
}

void loop() {
  key=readTTP229();             // read touch pad
  if(key>0) {                   // if key pressed
    if((key>0) && (key<11)) {   // 1-9 and 10=0
      if(comma==0) {
        number*=10.0;           // number * 10
        if(key!=10) number+=key;// number + key pressed except 10=0
      }
      else {                    // add decimal numbers
        dec=1;
        for(k=0; k<comma; k++) {// calc decimal 
          dec*=0.1;
        }
        if(key==10) key=0;
        number=number+(key*dec);// add key on decimal place
        comma++;                // increase decimal
      }
    }
    if(key==13) {               // + / - change
      number*=-1.0;
    }
    if(key==14) {               // comma pressed
      comma=1;
    }
    if(key==16) {               // Enter
      Serial1.println(number,3);
      number=0.0;
      comma=0;
    }
    klick();
    delay(500);                 // wait while pressed
  } // end key pressed
}

void klick(void) {
  digitalWrite(BEEP,HIGH);
  delay(2);
  digitalWrite(BEEP,LOW);
}

int readTTP229(void) {
  byte i, pad=0;
  for(i=1; i<17; i++) {          // read all 16 touch pads 1-16
    digitalWrite(SCL, LOW);
    if(!digitalRead(SDO)) pad=i; // if touched store pad no.
    digitalWrite(SCL, HIGH);
  }
  return pad;
}

Dieses Programm lässt sich also sehr einfach auf den STM32 übertragen mit kleinen Anpassungen. Damit ist er ein guter Ersatz für den Arduino Uno oder Nano.

von Matthias Busse

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.