isi_ko

Arduino Code

Mar 17th, 2020
233
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. int numberOfPotis = 2;
  2. int numberOfButtons = 5;
  3. int potiValues[2] = {0, 0};
  4. int highLowValues[2][2] = {{1023, 0}, {1023, 0}};
  5.  
  6. void setup() {
  7.   Serial.begin(1000000);
  8.  
  9.   for (int i = 0; i < numberOfPotis; i++) {
  10.     analogWrite(i + 2, 255);
  11.     setPhysicalFaderValueToFull (i);
  12.     highLowValues[i][1] = analogRead(i);
  13.     setPhysicalFaderValueToNull (i);
  14.     highLowValues[i][0] = analogRead(i);
  15.   }
  16.   Serial.println("S;E");
  17. }
  18.  
  19. void loop() {
  20.   if (Serial.available() > 0 && char(Serial.read()) == 'S') {
  21.     readMsg();
  22.   }
  23.   int newValue;
  24.   for (int i = 0; i < numberOfPotis; i++)
  25.   {
  26.     newValue = readPoti(i);
  27.     if (newValue != potiValues[i]) {
  28.       potiValues[i] = newValue;
  29.       String line;
  30.       line =  "S;0;1;" + String(1) + ";" + String(i) + ";" + String(potiValues[i]) + ";" +  String(newValue) + ";E"; //System: S;commandType(1=getValue);valueType;sensorID;value;debugInfo;E
  31.       Serial.println(line);
  32.     }
  33.   }
  34. }
  35.  
  36. void setPhysicalFaderValueToNull (int faderID) {
  37.   int upPin = 22 + (2 * faderID);
  38.   int downPin = upPin + 1;
  39.   digitalWrite(downPin, HIGH);
  40.   digitalWrite(upPin, LOW);
  41.   delay(500);
  42.   digitalWrite(downPin, LOW);
  43. }
  44.  
  45. void setPhysicalFaderValueToFull (int faderID) {
  46.   int upPin = 22 + (2 * faderID);
  47.   int downPin = upPin + 1;
  48.   digitalWrite(upPin, HIGH);
  49.   digitalWrite(downPin, LOW);
  50.   delay(500);
  51.   digitalWrite(upPin, LOW);
  52. }
  53.  
  54. void setMotorPoti(int faderID, int value) {
  55.   int upPin = 22 + (faderID * 2);
  56.   int downPin = upPin + 1;
  57.   int speed1 = 140;
  58.   int speed2 = 110;
  59.   int range = 5;
  60.  
  61.   while (readPoti(faderID) != value) {
  62.     analogWrite(faderID + 2, speed1);
  63.     while (getPositiveInt(value - readPoti(faderID))>range) {
  64.       int potiValue = readPoti(faderID);
  65.       if (potiValue < value) {
  66.         digitalWrite(upPin, HIGH);
  67.         digitalWrite(downPin, LOW);
  68.       }
  69.  
  70.       if (potiValue > value) {
  71.         digitalWrite(upPin, LOW);
  72.         digitalWrite(downPin, HIGH);
  73.       }
  74.       Serial.println("High");
  75.     }
  76.  
  77.     analogWrite(faderID + 2, 255);
  78.     while (readPoti(faderID) != value) {
  79.       int potiValue = readPoti(faderID);
  80.       analogWrite(faderID + 2, map(getPositiveInt(value - potiValue), 0, 100, speed2, 255) * 1);
  81.       if (potiValue < value) {
  82.         digitalWrite(upPin, HIGH);
  83.         digitalWrite(downPin, LOW);
  84.       }
  85.  
  86.       if (potiValue > value) {
  87.         digitalWrite(upPin, LOW);
  88.         digitalWrite(downPin, HIGH);
  89.       }
  90.       Serial.print("LOW: ");
  91.       Serial.println(potiValue);
  92.     }
  93.     digitalWrite(upPin, LOW);
  94.     digitalWrite(downPin, LOW);
  95.     if (readPoti(faderID) != value) delay(100);
  96.   }
  97.   potiValues[faderID] = value;
  98. }
  99.  
  100. void readMsg() {
  101.   boolean msgComplete = false;
  102.   int msgValues[2] = {0, 0};
  103.   int activeSlot = -1;
  104.   while (Serial.available() > 0) {
  105.     char nextChar = char(Serial.read());
  106.     switch (nextChar) {
  107.       case 'E':
  108.         msgComplete = true;
  109.         break;
  110.       case ';':
  111.         activeSlot++;
  112.         break;
  113.       default:
  114.         msgValues[activeSlot] = (msgValues[activeSlot] * 10) + (nextChar - '0');
  115.         break;
  116.     }
  117.     if (nextChar == 'E') {
  118.       break;
  119.     }
  120.   }
  121.   if (msgValues[0] < numberOfPotis && msgValues[1] <= 100) {
  122.     //    while (readPoti(msgValues[0]) != msgValues[1]) {
  123.     setMotorPoti(msgValues[0], msgValues[1]);
  124.     //      delay(10);
  125.     //    }
  126.   }
  127. }
  128.  
  129. int readPoti(int pin) {
  130.   int iterations = 30;
  131.   int gesammt = 0;
  132.   for (int i = 0; i < iterations; i++) {
  133.     gesammt += analogRead(pin);
  134.   }
  135.   return map(gesammt / iterations, highLowValues[pin][1], highLowValues[pin][0] - 1, 100, 0);
  136. }
  137.  
  138. int getPositiveInt (int i) {
  139.   if (i < 0) i = i * -1;
  140.   return i;
  141. }
RAW Paste Data