Arduino-Programmierung: Denkfehler?

Ich habe einen Testcode geschrieben, den ich im tinkercad-Simulator laufen lassen möchte.

Zwei Schalter sollen mit den Zuständen 000 bis 1111 vier Ausgänge schalten.

Dafür dieser Code:

const int input1 = 2; // Digitaleingang 1
const int input2 = 3; // Digitaleingang 2

const int output1 = 8; // Digitaler Ausgang 1
const int output2 = 9; // Digitaler Ausgang 2
const int output3 = 10; // Digitaler Ausgang 3
const int output4 = 11; // Digitaler Ausgang 4

void setup() {
  // Konfiguration der Pins als Eingänge und Ausgänge
  pinMode(input1, INPUT);
  pinMode(input2, INPUT);
  pinMode(output1, OUTPUT);
  pinMode(output2, OUTPUT);
  pinMode(output3, OUTPUT);
  pinMode(output4, OUTPUT);
}

void loop() {
  // Lesen des Zustands der Eingänge
  int input1Value = digitalRead(input1);
  int input2Value = digitalRead(input2);

  // Berechnen der Ausgangswerte
  int output1Value = (input1Value == 0) && (input2Value == 0);
  int output2Value = (input1Value == 0) && (input2Value == 1);
  int output3Value = (input1Value == 1) && (input2Value == 0);
  int output4Value = (input1Value == 1) && (input2Value == 1);

  // Schreiben der Ausgangswerte
  digitalWrite(output1, output1Value);
  digitalWrite(output2, output2Value);
  digitalWrite(output3, output3Value);
  digitalWrite(output4, output4Value);
}

Das funktioniert aber nicht. Die Logik wird nicht wie erwartet im Simulator umgesetzt. Ist der Code fehlerhaft oder mag der Simulator nicht richtig arbeiten?

Bild zum Beitrag
Cplusplus, Code, Arduino Uno
Kann mir jemand mit dem programmieren helfen?

Ich habe den Arduino-Doodlebot ( ein roboter der malen kann ) gebaut und versuche nun ihn so zu programmieren, dass er "HALLO" schreibt, jedoch schreibt er statt "HALLO" einfach ein H und dann noch eins undso weiter (er hört nicht auf ).

Hier ist der Code:

//

#include <Servo.h>

// setup servo

int servoPin = 8;

int PEN_DOWN = 90; // angle of servo when pen is down

int PEN_UP = 180;   // angle of servo when pen is up

Servo penServo;

float wheel_dia=82; //    # mm (increase = spiral out)

float wheel_base=112; //    # mm (increase = spiral in, ccw)

int steps_rev=128; //        # 512 for 64x gearbox, 128 for 16x gearbox

int delay_time=6; //         # time between steps in ms

// Stepper sequence org->pink->blue->yel

int L_stepper_pins[] = {12, 10, 9, 11};

int R_stepper_pins[] = {4, 6, 7, 5};

int fwd_mask[][4] =  {{1, 0, 1, 0},

                      {0, 1, 1, 0},

                      {0, 1, 0, 1},

                      {1, 0, 0, 1}};

int rev_mask[][4] =  {{1, 0, 0, 1},

                      {0, 1, 0, 1},

                      {0, 1, 1, 0},

                      {1, 0, 1, 0}};

void setup() {

  randomSeed(analogRead(1));

  Serial.begin(9600);

  for(int pin=0; pin<4; pin++){

    pinMode(L_stepper_pins[pin], OUTPUT);

    digitalWrite(L_stepper_pins[pin], LOW);

    pinMode(R_stepper_pins[pin], OUTPUT);

    digitalWrite(R_stepper_pins[pin], LOW);

  }

  penServo.attach(servoPin);

  Serial.println("setup");

 

  penup();

 

  delay(1000);

}

void loop(){ // draw a calibration box 4 times

  pendown();

  for(int x=0; x<12; x++){

    pendown();

    forward(80);

    backward(40);

    right(90);

    forward(30);

    left(90);

    forward(40);

    backward(80);

    penup();

    right(90);

    forward(10);

    left(90);

    pendown();

    forward(80);

    right(90);

    forward(30);

    right(90);

    forward(40);

    right(90);

    forward(30);

    backward(30);

    left(90);

    forward(40);

    left(90);

    penup();

    forward(10);

    left(90);

    pendown();

    forward(80);

    backward(80);

    right(90);

    forward(30);

    penup();

    forward(10);

    left(90);

    pendown();

    forward(80);

    backward(80);

    right(90);

    forward(30);

    penup();

    forward(10);

    left(90);

    pendown();

    forward(80);

    left(90);

    forward(30);

    left(90);

    forward(80);

    left(90);

    forward(30);

    penup();

    left(90);

    forward(100);

    penup();

  }

  penup();

  done();      // releases stepper motor

  while(1);    // wait for reset

}

// ----- HELPER FUNCTIONS -----------

int step(float distance){

  int steps = distance * steps_rev / (wheel_dia * 3.1412); //24.61

  /*

  Serial.print(distance);

  Serial.print(" ");

  Serial.print(steps_rev);

  Serial.print(" ");  

  Serial.print(wheel_dia);

  Serial.print(" ");  

  Serial.println(steps);

  delay(1000);*/

  return steps;  

}

void forward(float distance){

  int steps = step(distance);

  Serial.println(steps);

  for(int step=0; step<steps; step++){

    for(int mask=0; mask<4; mask++){

      for(int pin=0; pin<4; pin++){

        digitalWrite(L_stepper_pins[pin], rev_mask[mask][pin]);

        digitalWrite(R_stepper_pins[pin], fwd_mask[mask][pin]);

      }

      delay(delay_time);

    }

  }

}

void backward(float distance){

  int steps = step(distance);

  for(int step=0; step<steps; step++){

    for(int mask=0; mask<4; mask++){

      for(int pin=0; pin<4; pin++){

        digitalWrite(L_stepper_pins[pin], fwd_mask[mask][pin]);

        digitalWrite(R_stepper_pins[pin], rev_mask[mask][pin]);

      }

      delay(delay_time);

    }

  }

}

void right(float degrees){

  float rotation = degrees / 360.0;

  float distance = wheel_base * 3.1412 * rotation;

  int steps = step(distance);

  for(int step=0; step<steps; step++){

    for(int mask=0; mask<4; mask++){

      for(int pin=0; pin<4; pin++){

        digitalWrite(R_stepper_pins[pin], rev_mask[mask][pin]);

        digitalWrite(L_stepper_pins[pin], rev_mask[mask][pin]);

      }

      delay(delay_time);

    }

  }  

}

void left(float degrees){

  float rotation = degrees / 360.0;

  float distance = wheel_base * 3.1412 * rotation;

  int steps = step(distance);

  for(int step=0; step<steps; step++){

    for(int mask=0; mask<4; mask++){

      for(int pin=0; pin<4; pin++){

        digitalWrite(R_stepper_pins[pin], fwd_mask[mask][pin]);

        digitalWrite(L_stepper_pins[pin], fwd_mask[mask][pin]);

      }

      delay(delay_time);

    }

  }  

}

void done(){ // unlock stepper to save battery

  for(int mask=0; mask<4; mask++){

    for(int pin=0; pin<4; pin++){

      digitalWrite(R_stepper_pins[pin], LOW);

      digitalWrite(L_stepper_pins[pin], LOW);

    }

    delay(delay_time);

  }

}

void penup(){

  delay(250);

  Serial.println("PEN_UP()");

  penServo.write(PEN_UP);

  delay(250);

}

void pendown(){

  delay(250);  

  Serial.println("PEN_DOWN()");

  penServo.write(PEN_DOWN);

  delay(250);

}

Computer, Cplusplus, CPP, Programmiersprache, Algorithmus, C (Programmiersprache), Arduino Uno

Meistgelesene Fragen zum Thema Cplusplus