Programma doet niet wat ik wil.

Arduino specifieke Software
Berichten: 21
Geregistreerd: 23 Jan 2013, 10:59

Programma doet niet wat ik wil.

Berichtdoor patrickwit » 25 Jan 2013, 09:27

ik heb van een ledpaneel een bord gemaakt.
nou heb ik een heel mooi programma geschreven, waar 50 bord en 70 bord word gemaakt met knipperende leds erbij.
afzonderlijk doen ze het perfect.

maar zodra ik ze wil koppelen en dan bedoel ik softwarematig:
dat als je aan de potmeter draait en hij is 700 of hoger dat je de snelheid 70 krijgt.
en dat als je hem verdraait en hij woord 700 of lager dat je de snelheid 50 krijgt.

maar zodra ik dit doe dan krijg ik niks te zien, het programma lijkt wel niet te lopen.
Code: Alles selecteren
// PVB 1

//-------------------------------------------------------------------------------------------
int outputclock1 = 2;
int outputclock2= 12;
int outputdata1 = 3;
int outputdata2 = 4;
int outputdata3 = 5;
int outputdata4 = 6;
int outputdata5 = 7;
int outputdata6 = 8;
int outputdata7 = 9;
int outputdata8 = 10;
int outputdata9 = 11;
int outputdata11 = 3;
int outputdata12 = 4;
int outputdata13 = 5;
int outputdata14 = 6;
int outputdata15 = 7;
int outputdata16 = 8;
int outputdata17 = 9;
int outputdata18 = 10;
int outputdata19 = 11;
int outputdata21 = 3;
int outputdata22 = 4;
int outputdata23 = 5;
int outputdata24 = 6;
int outputdata25 = 7;
int outputdata26 = 8;
int outputdata27 = 9;
int outputdata28 = 10;
int outputdata29 = 11;
int outputdata31 = 3;
int outputdata32 = 4;
int outputdata33 = 5;
int outputdata34 = 6;
int outputdata35 = 7;
int outputdata36 = 8;
int outputdata37 = 9;
int outputdata38 = 10;
int outputdata39 = 11;
int strobe = 13;
int outputenable = 9;

//-------------------------------------------------------------------------------------------
// bitpatroon 50 km/uur
//-------------------------------------------------------------------------------------------

int data1[]={     1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
int data2[]={     1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
int data3[]={     0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0};
int data4[]={     0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0};
int data5[]={     0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0};
int data6[]={     0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0};
int data7[]={     0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,0};
int data8[]={     0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0};
int data9[]={     0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0};
int data10[]={    0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0};
int data11[]={    0,0,1,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0};
int data12[]={    0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0};
int data13[]={    0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0};
int data14[]={    0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,0};
int data15[]={    0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0};
int data16[]={    0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0};
int data17[]={    0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0};
int data18[]={    0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0};
int data19[]={    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int data20[]={    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

int data21[]={    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int data22[]={    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int data23[]={    0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0};

int data38[]={    0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0};
int data39[]={    1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
int data40[]={    1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};

//-------------------------------------------------------------------------------------------
// bitpatroon 70 km/uur
//-------------------------------------------------------------------------------------------

int data51[]={     1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
int data52[]={     1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
int data53[]={     0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0};
int data54[]={     0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0};
int data55[]={     0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0};
int data56[]={     0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0};
int data57[]={     0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,0};
int data58[]={     0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0};
int data59[]={     0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0};
int data60[]={    0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0};
int data61[]={    0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0};
int data62[]={    0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0};
int data63[]={    0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0};
int data64[]={    0,0,1,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0,1,1,0,0};
int data65[]={    0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0};
int data66[]={    0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0};
int data67[]={    0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0};
int data68[]={    0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0};
int data69[]={    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int data70[]={    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

int data71[]={    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int data72[]={    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int data73[]={    0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0};

int data78[]={    0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0};
int data79[]={    1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
int data80[]={    1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};

//-------------------------------------------------------------------------------------------

int teller1 = 23;
int teller2 = 23;
int teller3 = 23;
int teller4 = 23;
int telpunt1;
int telpunt2;
int telpunt3;
int telpunt4;
int timer=1;

int input = A0;// potmeter voor snelheids simulatie
int threshold = 700;


//-------------------------------------------------------------------------------------------
void setup()
//-------------------------------------------------------------------------------------------
{
  pinMode (outputclock1, OUTPUT);
  pinMode (outputclock2, OUTPUT);
  pinMode (outputdata1, OUTPUT);
  pinMode (outputdata2, OUTPUT);
  pinMode (outputdata3, OUTPUT);
  pinMode (outputdata4, OUTPUT);
  pinMode (outputdata5, OUTPUT);
  pinMode (outputdata6, OUTPUT);
  pinMode (outputdata7, OUTPUT);
  pinMode (outputdata8, OUTPUT);
  pinMode (outputdata9, OUTPUT);
  pinMode (outputdata11, OUTPUT);
  pinMode (outputdata12, OUTPUT);
  pinMode (outputdata13, OUTPUT);
  pinMode (outputdata14, OUTPUT);
  pinMode (outputdata15, OUTPUT);
  pinMode (outputdata16, OUTPUT);
  pinMode (outputdata17, OUTPUT);
  pinMode (outputdata18, OUTPUT);
  pinMode (outputdata19, OUTPUT);
  pinMode (strobe, OUTPUT);
  pinMode (outputenable, OUTPUT);
  analogReference (DEFAULT);
  Serial.begin (9600);
}

//-------------------------------------------------------------------------------------------
void loop (){
//------------------------------------------------------------------------------------------- 
 Serial.println(analogRead(input));
 int analogvalue = analogRead(input);
 
if(analogvalue > threshold) {
 Snelheid70();
}
else {
 Snelheid50();
 }}
 
 
 
//-------------------------------------------------------------------------------------------
 void Snelheid50(){
//-------------------------------------------------------------------------------------------
  Datainput1();
  Strobe();
   delay(800);
  Datainput2();
  Strobe();
   delay(800);
 }
 
//-------------------------------------------------------------------------------------------
 void Snelheid70(){
//-------------------------------------------------------------------------------------------
  Datainput3();
  Strobe();
  delay(800);
  Datainput4();
  Strobe();
  delay(800);
 }
 
//-------------------------------------------------------------------------------------------
 void Datainput1(){
//-------------------------------------------------------------------------------------------
  for (int telpunt1 =0; telpunt1 <= teller1; telpunt1++) {
    digitalWrite ( outputdata1, data1[telpunt1]); 
    digitalWrite ( outputdata2, data2[telpunt1]);
    digitalWrite ( outputdata3, data3[telpunt1]); 
    digitalWrite ( outputdata4, data4[telpunt1]); 
    digitalWrite ( outputdata5, data5[telpunt1]); 
    digitalWrite ( outputdata6, data6[telpunt1]); 
    digitalWrite ( outputdata7, data7[telpunt1]); 
    digitalWrite ( outputdata8, data8[telpunt1]); 
    digitalWrite ( outputdata9, data9[telpunt1]); 

    digitalWrite (outputclock1, HIGH);
    delay(timer);
    digitalWrite (outputclock1, LOW);
    delay(timer);
    Serial.print(telpunt1);
  }
    for (int telpunt2 =0; telpunt2 <= teller2; telpunt2++) {

    digitalWrite ( outputdata11, data11[telpunt2]); 
    digitalWrite ( outputdata12, data12[telpunt2]);
    digitalWrite ( outputdata13, data13[telpunt2]); 
    digitalWrite ( outputdata14, data14[telpunt2]); 
    digitalWrite ( outputdata15, data15[telpunt2]); 
    digitalWrite ( outputdata16, data16[telpunt2]); 
    digitalWrite ( outputdata17, data17[telpunt2]); 
    digitalWrite ( outputdata18, data18[telpunt2]); 
    digitalWrite ( outputdata19, data19[telpunt2]); 

    digitalWrite (outputclock2, HIGH);
    delay(timer);
    digitalWrite (outputclock2, LOW);
    delay(timer);
    Serial.print(telpunt2);
  }}
 
 
//------------------------------------------------------------------------------------------- 
void Datainput2(){
//-------------------------------------------------------------------------------------------
    for (int telpunt1 =0; telpunt1 <= teller1; telpunt1++) {
    digitalWrite ( outputdata1, data21[telpunt1]); 
    digitalWrite ( outputdata2, data22[telpunt1]);
    digitalWrite ( outputdata3, data23[telpunt1]); 
    digitalWrite ( outputdata4, data4[telpunt1]); 
    digitalWrite ( outputdata5, data5[telpunt1]); 
    digitalWrite ( outputdata6, data6[telpunt1]); 
    digitalWrite ( outputdata7, data7[telpunt1]); 
    digitalWrite ( outputdata8, data8[telpunt1]); 
    digitalWrite ( outputdata9, data9[telpunt1]); 

    digitalWrite (outputclock1, HIGH);
    delay(timer);
    digitalWrite (outputclock1, LOW);
    delay(timer);
    Serial.print(telpunt1);
  }
    for (int telpunt2 =0; telpunt2 <= teller2; telpunt2++) {

    digitalWrite ( outputdata11, data11[telpunt2]); 
    digitalWrite ( outputdata12, data12[telpunt2]);
    digitalWrite ( outputdata13, data13[telpunt2]); 
    digitalWrite ( outputdata14, data14[telpunt2]); 
    digitalWrite ( outputdata15, data15[telpunt2]); 
    digitalWrite ( outputdata16, data16[telpunt2]); 
    digitalWrite ( outputdata17, data17[telpunt2]); 
    digitalWrite ( outputdata18, data38[telpunt2]); 
    digitalWrite ( outputdata19, data39[telpunt2]); 

    digitalWrite (outputclock2, HIGH);
    delay(timer);
    digitalWrite (outputclock2, LOW);
    delay(timer);
    Serial.print(telpunt2);
  }}
 
//------------------------------------------------------------------------------------------- 
  void Datainput3(){
//------------------------------------------------------------------------------------------- 
  for (int telpunt1 =0; telpunt1 <= teller1; telpunt1++) {
    digitalWrite ( outputdata1, data51[telpunt1]); 
    digitalWrite ( outputdata2, data52[telpunt1]);
    digitalWrite ( outputdata3, data53[telpunt1]); 
    digitalWrite ( outputdata4, data54[telpunt1]); 
    digitalWrite ( outputdata5, data55[telpunt1]); 
    digitalWrite ( outputdata6, data56[telpunt1]); 
    digitalWrite ( outputdata7, data57[telpunt1]); 
    digitalWrite ( outputdata8, data58[telpunt1]); 
    digitalWrite ( outputdata9, data59[telpunt1]); 

    digitalWrite (outputclock1, HIGH);
    delay(timer);
    digitalWrite (outputclock1, LOW);
    delay(timer);
    //Serial.print(telpunt1);
  }
    for (int telpunt2 =0; telpunt2 <= teller2; telpunt2++) {

    digitalWrite ( outputdata11, data61[telpunt2]); 
    digitalWrite ( outputdata12, data62[telpunt2]);
    digitalWrite ( outputdata13, data63[telpunt2]); 
    digitalWrite ( outputdata14, data64[telpunt2]); 
    digitalWrite ( outputdata15, data65[telpunt2]); 
    digitalWrite ( outputdata16, data66[telpunt2]); 
    digitalWrite ( outputdata17, data67[telpunt2]); 
    digitalWrite ( outputdata18, data68[telpunt2]); 
    digitalWrite ( outputdata19, data69[telpunt2]); 

    digitalWrite (outputclock2, HIGH);
    delay(timer);
    digitalWrite (outputclock2, LOW);
    delay(timer);
    //Serial.print(telpunt2);
  }}
//------------------------------------------------------------------------------------------- 
void Datainput4(){
//-------------------------------------------------------------------------------------------
    for (int telpunt1 =0; telpunt1 <= teller1; telpunt1++) {
    digitalWrite ( outputdata1, data71[telpunt1]); 
    digitalWrite ( outputdata2, data72[telpunt1]);
    digitalWrite ( outputdata3, data73[telpunt1]); 
    digitalWrite ( outputdata4, data54[telpunt1]); 
    digitalWrite ( outputdata5, data55[telpunt1]); 
    digitalWrite ( outputdata6, data56[telpunt1]); 
    digitalWrite ( outputdata7, data57[telpunt1]); 
    digitalWrite ( outputdata8, data58[telpunt1]); 
    digitalWrite ( outputdata9, data59[telpunt1]); 

    digitalWrite (outputclock1, HIGH);
    delay(timer);
    digitalWrite (outputclock1, LOW);
    delay(timer);
    //Serial.print(telpunt1);
  }
    for (int telpunt2 =0; telpunt2 <= teller2; telpunt2++) {

    digitalWrite ( outputdata11, data61[telpunt2]); 
    digitalWrite ( outputdata12, data62[telpunt2]);
    digitalWrite ( outputdata13, data63[telpunt2]); 
    digitalWrite ( outputdata14, data64[telpunt2]); 
    digitalWrite ( outputdata15, data65[telpunt2]); 
    digitalWrite ( outputdata16, data66[telpunt2]); 
    digitalWrite ( outputdata17, data67[telpunt2]); 
    digitalWrite ( outputdata18, data78[telpunt2]); 
    digitalWrite ( outputdata19, data79[telpunt2]); 

    digitalWrite (outputclock2, HIGH);
    delay(timer);
    digitalWrite (outputclock2, LOW);
    delay(timer);
    //Serial.print(telpunt2);
  }}
 
//-------------------------------------------------------------------------------------------
void Strobe(){
//-------------------------------------------------------------------------------------------
  digitalWrite(strobe, HIGH);
  delay(timer);
  digitalWrite(strobe,LOW);
  delay(timer);
 

 }

Advertisement

Berichten: 163
Geregistreerd: 15 Dec 2012, 21:02
Woonplaats: Delfzijl

Re: Programma doet niet wat ik wil.

Berichtdoor FPCUser » 25 Jan 2013, 14:56

Ik ben niet door de gehele code gelopen maar het volgende viel mij op.

Je gebruikt de volgende variabele:

int input = A0;// potmeter voor snelheids simulatie


int betekend integer, dit is een geheel getal. Je kan hoofdleter A dus weglaten.

Henk

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Programma doet niet wat ik wil.

Berichtdoor pjh » 25 Jan 2013, 15:22

Even een aanvulling op bovenstaande. Ter leerling ende vermaeck.
A0, A1, etc. zijn zogenaamde aliases. Dus aliassen, of wat is het goede Nederlandse woord. Net zoals HIGH, LOW, gewoon voor 1. & 0 staan. Vond het bij mijn eerste sketches ook vreemd die: int analoogPin = A0
Zal code tzt ook even bekijken. Zit nu op Phone te typen.

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Programma doet niet wat ik wil.

Berichtdoor pjh » 25 Jan 2013, 23:56

Ik denk dat je loop wel zou moeten werken. Denk dat het probleem in de rest van je sketch zit. Je doet een aantal dingen heel goed, maar een paar dingen kun je beter anders aanpakken.

Om te beginnen zet je in de setup dezelfde pin meermalen op OUTPUT. Immers pinMode (outputdata1, OUTPUT) = pinMode (outputdata11, OUTPUT). Want outputdata1 = 3 en int outputdata11 = 3;

Verder maak je een array aan van 1'en en nullen. Dat is eigenlijk niet de meest elegante manier. In je sketch maak je integer aan met de naam data1[]
Deze geef je de volgende 'dots'mee: ={1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};

==> hierdoor is elke 1 en elke 0 een integer van 16 bits. Dat is een enorme overkill. Wanneer je alle verkeersborden van nederland erin wil programmeren, loop je al snel tegen geheugen problemen aan. Valt natuurlijk wel weer op te lossen met een eeprommetje ofzo. Maar: dit is een forum, dus gaan we uitleggen hoe het beter kan.

Doel: al die 1'en en nullen van je efficient opslaan.
Middel: stop ze in een byte 8 bits.

Je mag in "Arduino" een binair getal schrijven met de hoofdletter 'B' en 8 nullen e/o enen.
Dus
int data1[] = {1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1} wordt
byte data1[] = {B11100000, B00000000, B00000111}
Door het als een binair getal op te schrijven, wordt het niet echt korter ofzo,
maar waar het om gaat is dat nu niet 24 x een geheugenplek van 16 bits inneemt (384 bits), maar 24 bits, opgeslagen in 3 bytes van 8 bits.

Probleem is alleen dat we geen 'losse' enen en nullen meer hebben om in de digitalWrite te gebruiken. Dat kunnen we handig oplossen door de microcontroller maar naar één bit in een byte te laten kijken. Dit doe je met de AND statement, die je in Arduino schrijft als een '&'.

Dus B11111111 & B10000000 = B10000000
en B01111111 & B10000000 = B00000000

Door in het getal na '&' maar één bit op 1 te zetten, komt alleen dat bitje door in je uitkomst.

Wil ik dus 3 x een byte bekijken dan kan dit bijvoorbeeld:
Code: Alles selecteren
byte data1[] = {B11100000, B00000000, B00000111};

for (int i = 0; i < 3; i = i + 1){          // 3 bytes
  for (int k = 0; k < 8; k = k + 1){     //  8 bits per byte
    digitalWrite(outputdata1, data1[i] & (1<<k)); 
  }
}


1<<k betekend schuif een '1' k-plaatsjes naar links op. Dus:

B00000001 << 2 = B00000100
B00000001 << 7 = B10000000
enzovoort. Omdat 'k'van 0 naar 7 gaat, gaat die 1 van rechts naar links.

==> probleem: we willen hem van links naar rechts.
Oplossing: Je schuift een 1 van links naar rechts. Maar dan krijgen we dit:
B10000000>>k
De pijltjes staan de andere kant op en de één staat links.
Dit werkt dan ook prima, maar staat niet mooi met die lange binaire notatie.

Een handigere manier van noteren is Hexadecimaal. Dan pak je een groepje van 4 enen en nullen, en die geef je een cijfer van 0-F, dus 0123456789ABCDE of F. Hierbij is
B0000 = 0
B0001 = 1
B0010 = 2
B0011 = 3
B0100 = 4
B0101 = 5
B0110 = 6
B0111 = 7
B1000 = 8
B1001 = 9
B1010 = A
B1011 = B
B1100 = C
B1101 = D
B1110 = E
B1111 = F

B10000000 = 1000 0000 = 8 0 hexadecimaal. Dat schrijf je zo: 0x80
Een één k-plaatsjes van links naar rechts wordt dan ook:
0x80>>k

Dit:
int data1[]={ 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
int data2[]={ 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
int data3[]={ 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0};
int data4[]={ 0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0};
int data5[]={ 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0};
int data6[]={ 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0};
int data7[]={ 0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,0};
int data8[]={ 0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0};
int data9[]={ 0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0};
int data10[]={ 0,0,1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,0};
int data11[]={ 0,0,1,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,1,1,0,0};
int data12[]={ 0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0};
int data13[]={ 0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0};
int data14[]={ 0,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,0};
int data15[]={ 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0};
int data16[]={ 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0};
int data17[]={ 0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0};
int data18[]={ 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0};
int data19[]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int data20[]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

int data21[]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int data22[]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int data23[]={ 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0};

int data38[]={ 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0};
int data39[]={ 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
int data40[]={ 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};


Wordt
data[] = { E0, 20, 07, E0, 00, 07, 0F, 3F, F0, 1F, 5F, F8, 30, 00, 0C, 30, 00, 0C, 33, 37, CC,
32, 20, 4C, 32, 20, 4C, 32, 30, 4C, 32, 57, CC, 32, 24, 0C, 32, 24, 0C, 33, 47, CC, 30, 20, 0C,
30, 10, 0C, 1F, 4F, F8, 0F, 3F, F0, 00, 00, 00, 00, 20, 00, 00, 20, 00, 00, 00, 00, 0F, 3F, F0,
0F, 3F, F0, E0, 00, 07, E0, 00, 07, }


En je manier van uitlezen: Deze dus:
for (int telpunt1 =0; telpunt1 <= teller1; telpunt1++) {
digitalWrite ( outputdata1, data1[telpunt1]);
digitalWrite ( outputdata2, data2[telpunt1]);
digitalWrite ( outputdata3, data3[telpunt1]);
digitalWrite ( outputdata4, data4[telpunt1]);
digitalWrite ( outputdata5, data5[telpunt1]);
digitalWrite ( outputdata6, data6[telpunt1]);
digitalWrite ( outputdata7, data7[telpunt1]);
digitalWrite ( outputdata8, data8[telpunt1]);
digitalWrite ( outputdata9, data9[telpunt1]);

digitalWrite (outputclock1, HIGH);
delay(timer);
digitalWrite (outputclock1, LOW);
delay(timer);
Serial.print(telpunt1);
}


wordt dan:
for (int r = 0; r < 26; r = r + 1){ // 26 regels per bord
for (int i = 0; i < 3; i = i + 1){ // 3 bytes
for (int k = 0; k < 8; k = k + 1){ // 8 bits per byte
digitalWrite(outputdata[r], data1[r*3+i] & (0x80>>k));
}
}
}


Voordat bovenstaande in de sketch werkt, moeten er meer aanpassingen gedaan worden.
In je void Datainput2(){...} houd je een byzondere volgorde van data input aan.
Is dit een soort 'short cut' om dezelfde stukken data te gebruiken?

Ik hoop dat iemand beter kan vertellen waarom je potmeter niet werkt.
gr.Paul

Berichten: 21
Geregistreerd: 23 Jan 2013, 10:59

Re: Programma doet niet wat ik wil.

Berichtdoor patrickwit » 26 Jan 2013, 22:52

Thanks voor je informatie, morgen zal ik er samen met me vader rustig naar kijken.

Hoop dat iemand me inderdaad wat meer over de potmeter kan vertellen. De loops werken afzonderlijk perfect zodra ik de potmeter wil gebruiken om keuze te maken dan gaat het fout

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Programma doet niet wat ik wil.

Berichtdoor pjh » 27 Jan 2013, 02:09

geef anders even al je andere loops.
de moelijheid is vooral de wat kronkelige manier van programmeren.
rijg ik niet goed uitelkaar gedacht.
"lijkt "te veel nip en plakwerk in te zitten.

Voorts kun je met twee shiftregisters (totaal 1 euro) het aantal pinnetje terugbrengen naar 3.
Kun je ook heel veel van leren.

Groet & geef even alle info die je hebt.
Die potmeter zal me een zorg zijn. :D :D
Je programma is een mooie kapstok om veel op te steken.
Houdt de threat maar levend met je vragen

Berichten: 21
Geregistreerd: 23 Jan 2013, 10:59

Re: Programma doet niet wat ik wil.

Berichtdoor patrickwit » 27 Jan 2013, 17:35

dit was mijn hele programma die ik had gestuurd:
het probleem is gewoon bij het begin, dat hij de keuze moet maken tussen 50 en 70.

heb nog een kleine test programma geschreven
Code: Alles selecteren
// PVB 1

//-------------------------------------------------------------------------------------------
int outputclock1 = 2;
int outputclock2= 12;
int outputdata1 = 3;
int outputdata2 = 4;
int outputdata3 = 5;
int outputdata4 = 6;
int outputdata5 = 7;
int outputdata6 = 8;
int outputdata7 = 9;
int outputdata8 = 10;
int outputdata9 = 11;
int outputdata11 = 3;
int outputdata12 = 4;
int outputdata13 = 5;
int outputdata14 = 6;
int outputdata15 = 7;
int outputdata16 = 8;
int outputdata17 = 9;
int outputdata18 = 10;
int outputdata19 = 11;
int outputdata21 = 3;
int outputdata22 = 4;
int outputdata23 = 5;
int outputdata24 = 6;
int outputdata25 = 7;
int outputdata26 = 8;
int outputdata27 = 9;
int outputdata28 = 10;
int outputdata29 = 11;
int outputdata31 = 3;
int outputdata32 = 4;
int outputdata33 = 5;
int outputdata34 = 6;
int outputdata35 = 7;
int outputdata36 = 8;
int outputdata37 = 9;
int outputdata38 = 10;
int outputdata39 = 11;
int strobe = 13;
int outputenable = 9;


int teller1 = 23;
int teller2 = 23;
int telpunt1;
int telpunt2;
int timer=1;

int input1 = 0;// potmeter voor snelheids simulatie
int input2 = 1;


//-------------------------------------------------------------------------------------------
void setup()
//-------------------------------------------------------------------------------------------
{
  pinMode (outputclock1, OUTPUT);
  pinMode (outputclock2, OUTPUT);
  pinMode (outputdata1, OUTPUT);
  pinMode (outputdata2, OUTPUT);
  pinMode (outputdata3, OUTPUT);
  pinMode (outputdata4, OUTPUT);
  pinMode (outputdata5, OUTPUT);
  pinMode (outputdata6, OUTPUT);
  pinMode (outputdata7, OUTPUT);
  pinMode (outputdata8, OUTPUT);
  pinMode (outputdata9, OUTPUT);
  pinMode (outputdata11, OUTPUT);
  pinMode (outputdata12, OUTPUT);
  pinMode (outputdata13, OUTPUT);
  pinMode (outputdata14, OUTPUT);
  pinMode (outputdata15, OUTPUT);
  pinMode (outputdata16, OUTPUT);
  pinMode (outputdata17, OUTPUT);
  pinMode (outputdata18, OUTPUT);
  pinMode (outputdata19, OUTPUT);
  pinMode (strobe, OUTPUT);
  pinMode (outputenable, OUTPUT);
  analogReference (DEFAULT);
  Serial.begin (9600);
   
 
}

//-------------------------------------------------------------------------------------------
void loop (){
//------------------------------------------------------------------------------------------- 
 Serial.println(analogRead(input1));
 int analogvalue1 = analogRead(input1);
//  Serial.println(analogRead(input2));
 int analogvalue2 = analogRead(input2);
//Serial.print (55);

if(analogvalue1 < 1000) {
Snelheid50();
Serial.print (55);

}
else { Snelheid70();
Serial.print (111);
//}
//if(analogvalue > 1000) {
// Eindeverbod();
}
 delay(100);
 }
 
 
 
//-------------------------------------------------------------------------------------------
 void Snelheid50(){
//-------------------------------------------------------------------------------------------
  Datainput1();
  Strobe();
   delay(800);
  Datainput2();
  Strobe();
   delay(800);
   return;
 }
 
//-------------------------------------------------------------------------------------------
 void Snelheid70(){
//-------------------------------------------------------------------------------------------
  Datainput3();
  Strobe();
  delay(800);
  Datainput4();
  Strobe();
  delay(800);
  return;
 }
 
 
void Datainput1() {
Serial.print (1);   
 }
 
void Datainput2() {
 Serial.print (2); 
 }
 
void Datainput3()  {
 Serial.print (3);
}

void Datainput4 () {
Serial.print (4); 
}

void Strobe(){
 Serial.print ("S");
}


hier lijkt mijn bedoeling wel te werken.
maar in mijn eerste programma niet.

what am i doing wrong?

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: Programma doet niet wat ik wil.

Berichtdoor Karel » 27 Jan 2013, 17:44

Je leest de waarde van de pinnen 2 keer, 1 keer om te schrijven op je seriële poort en 1 keer om in een variabele op te slaan. Is daar een reden voor?

Je weet zo nooit 100% zeker dat de waarde die je als debug-info via de seriële poort print dezelfde is als die je daarna leest.
Ik zou daarom eerst de gelezen waarde in een variabele opslaan, en dan de waarde van die variabele tonen.
Ik zou het zo opzetten:

Code: Alles selecteren
//-------------------------------------------------------------------------------------------
void loop (){
//-------------------------------------------------------------------------------------------

 int analogvalue1 = analogRead(input1);
 Serial.println(analogvalue1);

 int analogvalue2 = analogRead(input2);
 Serial.println(analogvalue2);

//Serial.print (55);
}



Groet, Karel
Laatst gewijzigd door Karel op 27 Jan 2013, 17:51, in totaal 1 keer gewijzigd.
If you think education is expensive, try ignorance! (Derek Bok)

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: Programma doet niet wat ik wil.

Berichtdoor Karel » 27 Jan 2013, 17:51

Oh, en probeer ook eens om de variabelendeclaratie voor analogvalue1 en analogvalue2 vóór de setup() in je code op te nemen. Zo dus:

Code: Alles selecteren

int analogvalue1;
int analogvalue2;

setup()
{
// hier je setupcode
}

//-------------------------------------------------------------------------------------------
void loop (){
//-------------------------------------------------------------------------------------------

 analogvalue1 = analogRead(input1);
 Serial.println(analogvalue1);

 analogvalue2 = analogRead(input2);
 Serial.println(analogvalue2);

//Serial.print (55);

}


Omdat je de variabele creëert in een statement, niet aan het begin van de functie, zou het zomaar kunnen dat de variabele alleen in de scope van het statement zelf bestaat. De waarde is dan weer ongedefinieerd buiten die scope.
If you think education is expensive, try ignorance! (Derek Bok)

Berichten: 21
Geregistreerd: 23 Jan 2013, 10:59

Re: Programma doet niet wat ik wil.

Berichtdoor patrickwit » 27 Jan 2013, 17:59

ja dat programma die ik stuurde net was een test en zitten dus ook wat overbodige codes is denk:

maar waar ik op wil doelen is waarom hij niet doet wat ik wil.
dat if statement werkt volgens mij wel oke, want zodra ik Snelheid50(); als tekst maak en de snelheid70(); niet dan komt er wanneer de weerstand bijvoorbeeld 1023 de 70 in beeld is de waarde 0 dan gebeurt er niks. doe ik het andersom de snelheid70(); als tekst dan doet hij snelheid 50 gewoon goed.
dan denk je dan doe ik ze beide in het programma dus als waarde is 1023 dan snelheid 70 is waarde 0 dan 50.. en dan loopt hij vast hij doet niks.

komt dit door mijn void gebruik?

heeft dit met subroutines te maken?

want in mijn laatste programma lijkt het wel te werken maar in mijn eerste niet?

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 8 gasten