Einen schönen guten Tag,
kurz zu mir. Normalerweise mache ich einen großen Bogen um elektrische Bauteile und das Programmieren. Aber man soll sich gegen neues ja nicht sperren.
So zu meinem Problem:
Ich habe ein Arduino DUE an dem ein TFT, ein Keypad und zwei AD8400 10kOhm hängen. Mein Sketch sieht folgend aus:
#include <SPI.h>
#include <TFT.h>
#include <Wire.h>
#include <Keypad.h>
#define cs 12
#define dc 11
#define rst 10
#define sd_cs 9
TFT TFTscreen = TFT(cs, dc, rst);
char key;
//char key; //speichert gedrückte Taste
const byte ROWS = 4; //vier Reihen
const byte COLS = 3; //drei Spalten
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {2, 3, 4, 5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {6, 7, 8}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //Konstruktor der Keypad-Klasse
int value1, value2;
// set pin 52,53 as the slave select for the digital pot:
const int slaveSelectPinStrom = 52;
const int slaveSelectPinSpg = 53;
void setup() {
// Put this line at the beginning of every sketch that uses the GLCD:
TFTscreen.begin();
// clear the screen with a black background
TFTscreen.background(255, 0, 0);
// write the static text to the screen
// set the font color to white
TFTscreen.stroke(255, 255, 255);
// set the font size
TFTscreen.setTextSize(2);
// write the text to the top left corner of the screen
TFTscreen.text("Press 1 um messen durchzuführen ", 0, 0);
// set the font size very large for the loop
TFTscreen.setTextSize(2);
// write the text to the top left corner of the screen
TFTscreen.text("Press 0 zu abbrechen ", 0, 30);
// ste the font size very large for the loop
TFTscreen.setTextSize(5);
//TFTscreen.background(255, 0, 0);
// set the slaveSelectPin as an output:
pinMode(slaveSelectPinStrom, OUTPUT);
pinMode(slaveSelectPinSpg, OUTPUT);
// initialize SPI:
SPI.begin();
}
void digitalPotWrite(int address, int value, int resistor) {
switch (resistor){
case 1: {
// take the SS pin low to select the chip:
digitalWrite(slaveSelectPinStrom, LOW);
// send in the address and value via SPI:
SPI.transfer(address);
SPI.transfer(value);
// take the SS pin high to de-select the chip:
digitalWrite(slaveSelectPinStrom, HIGH);
break;
}
case 2:
{
// take the SS pin low to select the chip:
digitalWrite(slaveSelectPinSpg, LOW);
// send in the address and value via SPI:
SPI.transfer(address);
SPI.transfer(value);
// take the SS pin high to de-select the chip:
digitalWrite(slaveSelectPinSpg, HIGH);
break;
}
default: break;
}
}
void loop() {
key = keypad.getKey();
char keys[1]; //Was passiert hier?
keys[0]= key;
if (key == '1'){
TFTscreen.background(0, 0, 255);
TFTscreen.text(keys,0,0);
// change the resistance 1 from min to max:
TFTscreen.background(0, 255, 0); //Nur um zu sehen ob das Programm hier ankommt
for (int level = 0; level < 255; level++) {
digitalPotWrite(0, level, 1);
delay(100);
}
// wait a second at the top:
delay(100);
// change the resistance from max to min:
for (int level = 0; level < 255; level++){
digitalPotWrite(0, 255-level, 1);
delay(100);
}
delay(100);
// change the resistance 2 from min to max:
for (int level = 0; level < 255; level++) {
digitalPotWrite(0, level, 2);
delay(100);
}
// wait a second at the top:
delay(100);
// change the resistance from max to min:
for (int level = 0; level < 255; level++){
digitalPotWrite(0, 255-level, 2);
delay(100);
}
delay(100);
} }
Ich möchte bei einer Eingabe des Keypads (1) das ändern der Potis beginnen. Dies funktioniert auch soweit als dass das Programm in den Bereich des Programms springt(Ich ändere die Hintergrundfarbe um zu sehen ob ich bis zu der Codezeile komme). Ich messe mit einem Multimeter den Widerstand der AD8400. Dort tut sich absolut nichts.
Die Programmzeilen habe ich mir aus dem Beispiel bei SPI Library zusammengesucht: https://www.arduino.cc/en/Tutorial/DigitalPotControl
Display und Keypad arbeiten, aber die Potis arbeiten nicht. Die Potis liegen auf SPI also SDI auf MOSI und sck auf clk.
Ich hoffe der Text ist nicht zu wirr und mir kann jemand helfen.
Achja das Datenblatt der AD8400: Bauteil: AD8400 - Mikrocontroller.net
Danke Flo