Digitales Potentiometer

Hi,

Für meine anstehende Prüfung (Abschlussprüfung Mechatronik) soll ich mit Arduino einen NTC (einen Widerstand) simulieren. Dazu möchte ich ein Digitales Potentiometer verwenden. (http://ww1.microchip.com/downloads/en/DeviceDoc/11195c.pdf)

Da ich komplett neu im Thema der Programmierung bin, hoffe ich dass mir jemand den Fehler im Programm vielleicht sogar verständlich erklären kann.

Mein Digitales Potentiometer (50kΩ) läuft so weit. In 255 Schritten läuft es von etwa 46Ω bis 4kΩ und fängt dann wieder bei 46kΩ an also: 46kΩ…6kΩ,5kΩ,4kΩ,46kΩ,45kΩ…

Das Ziel ist es jedoch das Potie von 46kΩ bis 4kΩ und dann zurück zu den 46kΩ laufen zu lassen.
Also: 46kΩ,45kΩ,44kΩ…6kΩ,5kΩ,4kΩ,5kΩ,6kΩ,7kΩ,8kΩ…46kΩ,45kΩ,44kΩ…)

Dies ist ein vorhandenes Programm, welches ich im Internet gefunden habe.
Nach 1-2 Wochen Einarbeitung fällt mir die Programmierung doch echt schwer.
Es müsste ja sobald ich bei dem 255. Wert angekommen bin -1 im Loop laufen bis eben Wert 0.
Fällt mir jedoch schwer dies in der Programmiersprache auszudrücken.

Das Programm:

#include “AH_MCP41xxx.h”
//#include <SPI.h>
//#define DATAOUT 11 //uno MOSI , IC SI
//#define SPICLOCK 13 //uno SCK , IC SCK
#define CS 10 //chipselect pin
#define SHDN 9 //shutdown pin
#define RS 8 //reset pin
#define POTIOMETER_0 0
#define POTIOMETER_1 1
byte resistance = 0;
int testIN1 = A0;
int testIN2 = A1;
AH_MCP41xxx mcp42010;
void setup()
{
Serial.begin(9600);
Serial.println(“Setup ready”);
mcp42010.init_MCP42xxx (CS, SHDN, RS); //initialisation
}
void loop()
{
mcp42010.setValue(resistance, POTIOMETER_0);
// value range 0-255 (8-bit)
delay(50);
Serial.print("A0: “);
Serial.print(resistance);
Serial.print(”: ");
if (resistance==255) {resistance=0;}
int signal = analogRead(testIN1);
Serial.print(signal);
mcp42010.setValue(resistance, POTIOMETER_1); //value range 0-255 (8-bit)
delay(100);
Serial.print("A1: “);
Serial.print(resistance);
Serial.print(”: ");
if (resistance==255) {resistance=0;}
signal = analogRead(testIN2);
Serial.print(signal);
//delay(50);
resistance++;
}

Danke für jede Hilfe!

Diese zwei Zeilen sorgen für den Sägezahn 0 .. 254

...
 if (resistance==255) {resistance=0;}
...
 resistance++;
...

Was du zusätzlich brauchst, ist die Richtung. Z.B. so:

int richtung = 1; 
void loop() {
...
  if (resistance==255) {richtung=-1;}
  if (resistance==0) {richtung=1;} 
...

  resistance += richtung; // rauf oder runter, je nach Richtung
}

Code Tags, einrücken ( STRG-T in der Arduino IDE ) solltest du auch rauskriegen, was das bedeutet. Nicht nur uns zuliebe. Du selbst kannst es dann auch leichter lesen.

Vielen Dank für die Hilfe! Funktioniert Perfekt.