Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  3 1419
Hei

Målet med prosjektet er å styre 5 servoer med informasjon fra serieporten på arduinoen. Verdiene som kommer inn på serieporten kommer fra en annen arduino som henter verdiene fra 5 potmeter og sender dem via seriekommunikasjon.

Problemet mitt er at hver gang jeg gir strøm til kretsen så havner verdiene fra arrayet på nye steder, det samme potmeteret kontrollerer da en annen servo for hver gang kretsen blir restartet.

kode master:

#define baudRate 57600

// Lillefinger [0]
#define lille_max 1023
#define lille_min 0
#define lille_servo_max 179
#define lille_servo_min 0

//Ringefinger [1]
#define ringe_max 1023
#define ringe_min 0
#define ringe_servo_max 179
#define ringe_servo_min 0

//langefinger [2]
#define lange_max 1023
#define lange_min 0
#define lange_servo_max 179
#define lange_servo_min 0

//pekefinger [3]
#define peke_max 1023
#define peke_min 0
#define peke_servo_max 179
#define peke_servo_min 0

//tommel [4]
#define tomm_max 1023
#define tomm_min 0
#define tomm_servo_max 179
#define tomm_servo_min 0

//Innganger arduino
#define lillefinger A0
#define ringefinger A1
#define langefinger A2
#define pekefinger A3
#define tommel A4


byte finger[5];
int i;
int temp;

void setup()
{
Serial.begin(baudRate);
pinMode(lillefinger,INPUT);
pinMode(ringefinger,INPUT);
pinMode(langefinger,INPUT);
pinMode(pekefinger,INPUT);
pinMode(tommel,INPUT);


}
void loop()
{


temp=analogRead(lillefinger); //Leser motstand lillefinger
finger[0]= map(temp,lille_max,lille_min,lille_servo_min,lille_servo_max ); // Stller "fingeren"

temp=analogRead(ringefinger);
finger[1]= map(temp,ringe_max,ringe_min,ringe_servo_min,ringe_servo_max ); // Ringefinger

temp=analogRead(langefinger); //Langefiner
finger[2]= map(temp,lange_max,lange_min,lange_servo_min,lange_servo_max );

temp=analogRead(pekefinger); //Pekerfinger
finger[3]= map(temp,peke_max,peke_min,peke_servo_min,peke_servo_max);

temp=analogRead(tommel); //Tommelfinger
finger[4]= map(temp,tomm_max,tomm_min,tomm_servo_min,tomm_servo_max);

Serial.write(finger,5);

}



kode slave:

#include<Servo.h>
#define baudRate 57600

Servo lille;
Servo ringe;
Servo lange;

int verdiInn[5];
int n;

void setup()
{
Serial.begin(baudRate);
lille.attach(3);
ringe.attach(5);
lange.attach(9);


}
void loop()
{
if(Serial.available()>4)
{
for(n=0;n<5;n++)
{
verdiInn[n]=Serial.read();
}
Serial.flush();
}
lille.write(verdiInn[0]);
ringe.write(verdiInn[1]);
lange.write(verdiInn[2]);
}

Hvis det er noen jeg kunne gjort bedre med kodingen så er det bare å si ifra, er litt n00b når det kommer til programmering.
Spør deg selv hvordan arduinoen skal skjønne hvilken verdi den faktisk leser på serieporten? Du må sende et tegn eller en verdi ved begynnelsen og/eller ved slutten av alle verdiene. Så må du vite i hvilken rekkefølge de kommer. Når Serial.read() == $ (f.eks.) så begynner du å putte verdier inn i arrayet i riktig rekkefølge.
Du tar feil
The Rebel's Avatar
Trådstarter
Noen ganger så vanskeliggjør jeg enkle ting ser jeg. Tusen takk
▼ ... noen uker senere ... ▼
Enig med wanna-b her ,, og så lurer jeg på hvorfor du venter på at utgående trafikk skal bli ferdig ???

http://arduino.cc/en/Serial/Flush