Katapult - Min første kode

Jeg har påbegyndt mit første projekt, det er en katapult.

Planen er at den skal have 3 servoer, 3 potentiometer, 1 release mechanism (ved ikke hvad det skal være endnu) og en affyrings knap.

Jeg har desværre ikke fået mit Arduino board endnu, men har planer om at anskaffe mig et senere.

De 3 servoer har 3 forskellige funktioner.
Spring Load
Direction
Blocker Arm

Blocker armen og retningen kan indstilles inden affyringen, ligeledes kan spring loaden også indstilles, dog ses dette først ved affyring.

Indtil videre ser min kode således ud:

//Including servo libaery
#include <Servo.h>

//Assaigning a name to the servos
Servo servo_spring, servo_direction, servoer_blocker;

//Assining Potmeters pins
const int springPin = A0;
const int directionPin = A1;
const int blockerPin = A2;
const int firePin = 2;
const int releasePin = 3;

void setup(){
  
  //Servo Pin Assignment 
  servo_spring.attach(9);
  servo_direction.attach(10);
  servo_blocker.attach(11);  
  
  //pinMode OUTPUT
  pinMode(releasePin, OUTPUT);
  
  //pinMode INPUT
  pinMode(firePin, INPUT);
  
  }
void loop(){

  //Spring Tension - Adjustment
  val1 = analogRead(springPin);
  val1 = map(val1, 0, 1023, 0, 180);
  delay(15);
  
  //Direction - Adjustment
  val2 = analogRead(directionPin);
  val2 = map(val1, 0, 1023, 0, 180);
  servo_direction.write(val2);
  delay(15);
  
  //Blocker Adjustment
  val3 = analogRead(blockerPin);
  val3 = map(val1, 0, 1023, 0, 180);
  servo_blocker.write(val3);
  delay(15);
  
  //Fire Action
  if (firePin == HIGH ){
  servo_spring.write(val1);
  delay(1000);
  digital.write(releasePin, HIGH);
   
}

På sigt skal det programeres ind, således at den kan styres fra ens mobil via bluetooth modul.

Antagligen har du prøvet om den compilerer og det er gået godt ?

//Including servo libaery
#include <Servo.h>

//Assaigning a name to the servos  <-- nej, det instantierer 3 "Servo objekter", så du kan styre 3 styks.
Servo servo_spring, servo_direction, servoer_blocker;

//Assining Potmeters pins
const int springPin = A0;
const int directionPin = A1;
const int blockerPin = A2;
const int firePin = 2;
const int releasePin = 3;

void setup(){
  
  //Servo Pin Assignment  <-- OG Initialising, and powering up the servos
  servo_spring.attach(9);
  servo_direction.attach(10);
  servo_blocker.attach(11);  
  
  //pinMode OUTPUT
  pinMode(releasePin, OUTPUT);
  
  //pinMode INPUT
  pinMode(firePin, INPUT);
  
  }
void loop(){

  //Spring Tension - Adjustment
  val1 = analogRead(springPin);
  val1 = map(val1, 0, 1023, 0, 180);
  delay(15);
  
  //Direction - Adjustment
  val2 = analogRead(directionPin);
  val2 = map(val1, 0, 1023, 0, 180);  <-- Der røg det møjsomligt indsamlende directionPin værdi ud af vinduet
  servo_direction.write(val2);
  delay(15);
  
  //Blocker Adjustment
  val3 = analogRead(blockerPin);
  val3 = map(val1, 0, 1023, 0, 180); <-- igen, cut-n-paste fejl ;-)
  servo_blocker.write(val3);
  delay(15);
  
  //Fire Action
  if (firePin == HIGH ){  <-- forkert. Det her vil ALTID være ikke-sand
  servo_spring.write(val1);  <--- dvs ALDRIG ekskvere dette.
  delay(1000);
  digital.write(releasePin, HIGH);
   
}

Men de fleste ting vil du opdage når du bare kobbler dine 3 servo op (uden katapulten) og det ligger på bordet og gør slet ikke det du forventede.

Men det er det rigtig sjove ved denne hobby !

Tak for tippet, har nu kørt den igennem compiler og auto format. Og den fandt lidt forskellige fejl, som jeg nu har rettet.

if (firePin == HIGH ){  <-- forkert. Det her vil ALTID være ikke-sand
  servo_spring.write(val1);  <--- dvs ALDRIG ekskvere dette.
  delay(1000);
  digital.write(releasePin, HIGH);

Som jeg forstår dette:
Hvis firePin (knap) trykkes
Skriver den val1 til servoen (fjeren strammes)
Venter i 1 sekund
Sender et high til releasPin (afyr)

Eller ser jeg forkert på dette?

Hint: "firepin" er en konstant. Du har selv erklæret den med værdi 2. Hvornår tror du en konstant skifter værdi?

Ahh tak skal du have, kan godt se fejlen nu. Ligeledes er det samme problem med mine int til pot meterne.