Toon posts:

[c++] omdraaien van waardes

Pagina: 1
Acties:
  • 43 views sinds 30-01-2008

Verwijderd

Topicstarter
Beste,

Ik ben al een tijdje zoet met het programeren van een robotje. Hiervoor gebruik ik C++ en de microprocessor draagt de naam ATMEGA8515. Nu doe ik dit d.m.v. c++ en heb het onderstaande programma. Maar om hem niet in rondjes te laten rondrijden wil ik graag het volgende doen. Als er een sensor wordt ingedrukt (hij rijd dus ergens tegen aan) dan wordt er een actie uitgevoerd. Na deze actie moeten de waarden van voor en achter worden omgedraaid. Nu heeft voor altijd de waarde 1 en achter altijd de waarde 2. Ik heb het al geprobeerd met een if en een for lus maar dat kreeg ik niet geod voor elkaar. Kan iemand mij misschien helpen?

alvast bedankt.

dit is het programma:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#include <c:\avrgcc\avr\include\io.h>
#include <c:\avrgcc\avr\include\interrupt.h>
#include <c:\avrgcc\avr\include\signal.h>
#include <c:\avrgcc\avr\include\sig-avr.h>

typedef unsigned char byte;

byte links,rechts,voor,achter,stop, m1,m2, 
                motor1,motor2,
                sensoren, uitgang, teller;
int t;

void init(){
    /* deze functie initialiseer de varabelen. */
    m1=1;   /* m1 t/m m4 zijn motornummers geeft aan welke bitten van poort-B de motor aanstuurt */
    m2=4;
    links=1; 
    rechts=2;
    voor=1;
    achter=2;
    stop=0;
    t=150; // wachttijd
    outp(0xff,DDRB);  /* PORTB is de uitgang */
    outp(0x00,DDRD); // PORDB is ingang

    motor1=0;motor2=0; /* geeft de actuele status van de motor aan t.w.
                        uit, linksom of rechts om. */
     uitgang=0;
    }
    
    
        
 void actie(byte motornr, byte status){
 /* deze functie stuurt een motor. status 1= linksom , 2= rechtsom en 0 stoppen. */

    byte hulp = motornr*status;
 switch (motornr) {
 
    case 1: uitgang = uitgang &0xFC;break;  // tel steeds bij 0 op.
    case 4: uitgang = uitgang &0xF3; break;
    case 16: uitgang = uitgang &0xCF; break;
    case 64: uitgang = uitgang &0x3F; break;
    }
    uitgang+=hulp;
    outp(uitgang,PORTB);
    }
 
  
   void wacht(int tijd){
    int j = 0;
    int i=0;            // Er is tijdnodig voor het proces
    for (i=0; i<tijd;i++){
        for(j=0; j<tijd; j++){}
        }
    } 
        
byte  detectie(){
    /* deze functie detecteert de sensoren en bepaald de status van de motoren*/
    byte tmp = inp(PIND);
    while (tmp != inp(PIND)){wacht(5);} //anti dender filter 
    return ~tmp;

    }





int main(void) /* het hoofdprogramma */
{
    init();
   
    for(;;){
    sensoren = detectie();
   
    
     switch (sensoren){     
        case 1: 
                actie(m1,stop); //sensor1
            actie(m2,stop);
            wacht(0.1*t);
                actie(m1,achter); 
            actie(m2,achter);
            wacht(1.5*t);
            actie(m1,stop); 
            actie(m2,stop);
            wacht(0.5*t);
            actie(m1,stop); //robot keert!!
            actie(m2,achter);
            wacht(t);break;
            
        case 2:
                actie(m1,stop); //sensor2
            actie(m2,stop);
            wacht(0.1*t);                                                                                                                                                        
                actie(m1,achter); 
            actie(m2,achter);
            wacht(1.5*t);
            actie(m1,stop); 
            actie(m2,stop);
            wacht(0.5*t);
            actie(m1,stop); //robot keert!!
            actie(m2,achter);
            wacht(2*t); break;
        case 3: 
            actie(m1,stop); //sensor1+2
            actie(m2,stop);
            wacht(0.1*t);
            actie(m1,achter); 
            actie(m2,achter);
            wacht(1.5*t);
            actie(m1,stop); 
            actie(m2,stop);
            wacht(0.5*t);
            actie(m1,stop); //robot keert!!
            actie(m2,voor);
            wacht(1.2*t); break;                
        case 4:                 
                actie(m1,stop); //sensor3
            actie(m2,stop);
            wacht(0.1*t);
            actie(m1,achter); 
            actie(m2,achter);
            wacht(1.5*t);
            actie(m1,stop); 
            actie(m2,stop);
            wacht(0.5*t);
            actie(m1,stop); //robot keert!!
            actie(m2,voor);
            wacht(2*t); break; 
        case 6: 
                actie(m1,stop); //sensor2+3
            actie(m2,stop);
            wacht(0.1*t);                                                                                                                                                        
                actie(m1,achter); 
            actie(m2,achter);
            wacht(1.5*t);
            actie(m1,stop); 
            actie(m2,stop);
            wacht(0.5*t);
            actie(m1,stop); //robot keert!!
            actie(m2,achter);
            wacht(2*t); break;
        case 8:
                actie(m1,stop); //sensor4
            actie(m2,stop);
            wacht(0.1*t);
                actie(m1,achter); 
            actie(m2,achter);
            wacht(1.5*t);
            actie(m1,stop); 
            actie(m2,stop);
            wacht(0.5*t);
            actie(m1,stop); //robot keert!!
            actie(m2,voor);
            wacht(t); break; 
        case 12:
            actie(m1,stop); //sensor 3+4
            actie(m2,stop);
            wacht(0.1*t);
                actie(m1,achter); 
                actie(m2,achter);
            wacht(1.5*t);
            actie(m1,stop); 
            actie(m2,stop);
            wacht(0.5*t);
            actie(m1,stop); //robot keert!!
            actie(m2,voor);
            wacht(1.2*t); break; 
                
        default: {actie(m1,voor); //robot keert!!
            actie(m2,voor);
            }

 
        } 
        
        
        
   }
   
}

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hoi

Het spijt me, maar we gaan niet je code debuggen (P&W FAQ - Leer debuggen). Je kunt niet hier je code neerplempen en van ons verwachten dat wij maar even je probleem oplossen. Probeer het probleem te lokaliseren, en geef aan wat er precies niet goed gaat, wat voor oplossingen je overwogen hebt en waarom dat niet lukt. Zie P&W FAQ - De "quickstart" om een idee te krijgen wat wij zoal in een topicstart verwachten. Je bent dus vrij om een nieuw topic te openen, mits hij voldoet aan die quickstart. Veel succes :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Dit topic is gesloten.