C - Tutorials (Arduino kompatibel) für fortgeschrittene Anwender zu den verschiedensten Raspbotics-Boards.


Mit einem Klick auf die Zeilennummern erhalten Sie weitere hilfreiche Informationen.
Python Hilfe


Pixel Drawing - der Joystick wird zum Pinsel

Mit dem Joystick wird ein LED-Pixel gesteuert. Per Tastendruck werden die einzelnen Pixel gespeichert. Wenn der Lichtsensor abgedeckt wird, wird das gezeichnete Bild sichtbar. Mit zugedecktem Lichtsensor und gleichzeitigem Tastendruck wird das Display wieder gelöscht.
Lernziele:
LED Matrix, SPI Protokoll, Eingänge (Taster, Joystick), if - else, ADC (Lichtsensor), Funktionen, Interrupts

 Programmcode ausblenden/einblenden 

Schrift:   größer | kleiner            fett | normal
1   #include <PinChangeInt.h>
2   #include <SPI.h>
 
3   #define MAX7219_TEST 0x0f
4   #define MAX7219_BRIGHTNESS 0x0a
5   #define MAX7219_SCAN_LIMIT 0x0b
6   #define MAX7219_DECODE_MODE 0x09
7   #define MAX7219_SHUTDOWN 0x0C
 
8   #define SS_PIN 10
 
9   #define Taster     9
10   #define Joy_DOWN   8
11   #define Joy_LEFT   7
12   #define Joy_UP     6
13   #define Joy_RIGHT  5
 
14   int Pixel_X = 4;
15   int Pixel_Y = 8;
16   int LDR;
 
17   int Led_Matrix[8] = {0,0,0,0,0,0,0,0};
 
18   void maxTransferCMD(uint8_t address, uint8_t value) {
19     digitalWrite(SS_PIN, HIGH);
20     SPI.transfer(address);
21     SPI.transfer(value);
22     digitalWrite(SS_PIN, HIGH);
23  }
 
24   void maxTransferDATA(uint8_t address, uint8_t value) {
25     digitalWrite(SS_PIN, HIGH);
26     SPI.transfer(address);
27     SPI.transfer(value);
28     digitalWrite(SS_PIN, HIGH);
29  }
 
30   void setup(void)
31  {
32     digitalWrite(Taster, INPUT_PULLUP);
33     digitalWrite(Joy_UP, INPUT_PULLUP);
34     digitalWrite(Joy_LEFT, INPUT_PULLUP);
35     digitalWrite(Joy_RIGHT, INPUT_PULLUP);
36     digitalWrite(Joy_DOWN, INPUT_PULLUP);
 
37     attachPinChangeInterrupt(Taster, interrupt_taster, CHANGE);
38     attachPinChangeInterrupt(Joy_UP, interrupt_joy_up, CHANGE);
39     attachPinChangeInterrupt(Joy_LEFT, interrupt_joy_left, CHANGE);
40     attachPinChangeInterrupt(Joy_RIGHT, interrupt_joy_right, CHANGE);
41     attachPinChangeInterrupt(Joy_DOWN, interrupt_joy_down, CHANGE);
 
42     pinMode(SS_PIN, OUTPUT);
43     SPI.setBitOrder(MSBFIRST);
44     SPI.begin();
 
45     maxTransferCMD(MAX7219_TEST, 0x00);
46     maxTransferCMD(MAX7219_DECODE_MODE, 0x00);
47     maxTransferCMD(MAX7219_BRIGHTNESS, 0x0F);
48     maxTransferCMD(MAX7219_SCAN_LIMIT, 0x00);
49     maxTransferCMD(MAX7219_SHUTDOWN, 0x01);
 
50     clear_display();
51     maxTransferDATA(Pixel_X,Pixel_Y);
52  }
 
53   void interrupt_taster(){
54     if(digitalRead(Taster)){}else{Led_Matrix[(Pixel_X)-1]=Led_Matrix[(Pixel_X)-1]|Pixel_Y;
55       if(LDR>400){
56         byte i;
57         for(i=0;i<8;i++){
58           Led_Matrix[i] = 0;
59         }
60       clear_display();
61      }
62    }
63  }
 
64   void interrupt_joy_up(){
65     if(digitalRead(Joy_UP)){}else{clear_display();Pixel_X = (Pixel_X - 1);if(Pixel_X==0){Pixel_X=8;}maxTransferDATA(Pixel_X, Pixel_Y);}
66    }
 
67   void interrupt_joy_down(){
68     if(digitalRead(Joy_DOWN)){}else{clear_display();Pixel_X = (Pixel_X + 1);if(Pixel_X==9){Pixel_X=1;}maxTransferDATA(Pixel_X, Pixel_Y);}
69    }
 
70   void interrupt_joy_left(){
71     if(digitalRead(Joy_LEFT)){}else{clear_display();Pixel_Y = (Pixel_Y>>1);if(Pixel_Y==0){Pixel_Y=128;}maxTransferDATA(Pixel_X, Pixel_Y);}
72    }
 
73   void interrupt_joy_right(){
74     if(digitalRead(Joy_RIGHT)){}else{clear_display();Pixel_Y = (Pixel_Y<<1);if(Pixel_Y>128){Pixel_Y=1;}maxTransferDATA(Pixel_X, Pixel_Y);}
75    }
 
76   void loop(void)
77  {
78     byte j;
79     LDR = analogRead(3);
80     if (LDR>400){
81       clear_display();
82       for (j=0;j<8;j++){
83         maxTransferDATA(j+1,Led_Matrix[j]);
84      }
85    }
86  }
 
87   void clear_display(void){
88     byte u;
89     for (u=1;u<9;u++){
90       maxTransferDATA(u,0);
91    }
92  }


Newsletter - Email eintragen!
 Anmelden
 Abmelden

RASPBOTICS
E-mail: info@raspbotics.at


© Ket4up, raffaelemontillo, Vadim Georgiev, Lightspring / shutterstock.com