Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[Arduino] Ardiono en LCD smartie IR Afstandbediening

Pagina: 1
Acties:
  • 388 views

Verwijderd

Topicstarter
Hoi,

Naar een grote opruiming vond ik nog een mooi groot LCD display. Toen kwamen de herinneringen weer naar boven van LCD smartie. Maar helaas heeft mijn computer geen printer poort meer dus ik dacht dat moet ook wel met een arduino kunnen naar een paar uur zoeken kopiëren en plakken :P ben ik op dit script gekomen. Wat erg goed werkt.

C:
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
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
//V0.0.1 Werkend met LCD smartie
//V0.0.2 LCD Helderheid toegepast
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 2, 3, 4, 5, 6, 7, 8, 9);

//Backlight on port 11
#define BL 11

void setup() { 
  //Serial.begin(19200);
  Serial.begin(115200);
    
  startup();
}

void startup() {
  
  analogWrite(BL, 0); // Set maximum brightness

  lcd.begin(20, 4);
  lcd.clear();
  lcd.print("+--+------------+--+");
  lcd.setCursor(0,1);
  lcd.print("|##|Jan Dootjes.|##|");
  lcd.setCursor(0,2);
  lcd.print("|##|LCD Display!|##|");
  lcd.setCursor(0,3);
  lcd.print("+--+------------+--+");
}

byte serial_getch() {
  int incoming;
  while (Serial.available()==0) {}
  // read the incoming byte:
  incoming = Serial.read();
  
  return (byte) (incoming &0xff);
}

void loop() {
  byte rxbyte;
  byte temp;
  byte col;
  byte row;
  uint8_t location;
  uint8_t charMap[7];
  
  rxbyte = serial_getch();

  if (rxbyte == 254) //Matrix Orbital uses 254 prefix for commands
    {
        switch (serial_getch())
        {
            case 66: //backlight on (at previously set brightness)
                                // not implemented              

                break;
            case 70: //backlight off
                // not implemented              
                                break;
            case 71:  //set cursor position
                col = (serial_getch() - 1);  //get column byte
                                row = (serial_getch());
                                
                /*
                                switch (serial_getch())  //get row byte
                {
                    //line 1 is already set up
                    case 2:
                        temp += 0x40;
                        break;
                    case 3:
                        temp += 0x14;
                        break;
                    case 4:
                        temp += 0x54;
                        break;
                    default:
                        break;
                }
*/
                //lcd.commandWrite(0b10000000 + temp);
                                lcd.setCursor(col,row-1);
                break;
            case 72:  //cursor home (reset display position)
                //lcd.commandWrite(2);
                                lcd.setCursor(0,0);
                break;
            case 74:  //show underline cursor
                //lcd.commandWrite(0b00001110);
                break;
            case 75:  //underline cursor off
            case 84:  //block cursor off
                //lcd.commandWrite(0b00001100);
                break;
            case 76:  //move cursor left
                //lcd.commandWrite(16);
                break;
            case 77:  //move cursor right
                //lcd.commandWrite(20);
                break;
            case 78:  //define custom char
                                //location = 64+serial_getch()*8;
                                location = serial_getch();
                                for (temp = 0; temp < 8; temp++)
                {
                    charMap[temp] = serial_getch(); //get each pattern byte
                }
                lcd.createChar(location, charMap);
                break;
            case 83:  //show blinking block cursor
                //lcd.commandWrite(0b00001111);
                break;
            case 86:  //GPO OFF
                //implement later
                break;
            case 87:  //GPO ON
                /*temp = serial_getch();
                if (temp == 1)
                {
                    GPO1 = GPO_ON;
                }*/
                break;
            case 88:  //clear display, cursor home
                //lcd.commandWrite(1);
                                lcd.clear();
                                lcd.setCursor(0,0);
                break;
            case 152: //set and remember (doesn't save value, though)
            case 153: //set backlight brightness
                //not implemented
                                analogWrite(BL, 0xFF-serial_getch());
                break;

            //these commands ignored (no parameters)
            case 35: //read serial number
            case 36: //read version number
            case 55: //read module type
            case 59: //exit flow-control mode
            case 65: //auto transmit keypresses
            case 96: //auto-repeat mode off (keypad)
            case 67: //auto line-wrap on
            case 68: //auto line-wrap off
            case 81: //auto scroll on
            case 82: //auto scroll off
            case 104: //init horiz bar graph
            case 109: //init med size digits
            case 115: //init narrow vert bar graph
            case 118: //init wide vert bar graph
                break;
            default:
                //all other commands ignored and parameter byte discarded
                temp = serial_getch();  //dump the command code
                break;
        }
        return;
    } //END OF COMMAND HANDLER

    //change accented char to plain, detect and change descenders
    //NB descenders only work on 5x10 displays. This lookup table works
    //  with my DEM-20845 (Display Elektronik GmbH) LCD using KS0066 chip.
    switch (rxbyte)
    {
        //chars that have direct equivalent in LCD charmap
/*      case 0x67: //g
            rxbyte = 0xE7;
            break;
        case 0x6A: //j
            rxbyte = 0xEA;
            break;
        case 0x70: //p
            rxbyte = 0xF0;
            break;
        case 0x71: //q
            rxbyte = 0xF1;
            break;
        case 0x79: //y
            rxbyte = 0xF9;
            break;
*/      case 0xE4: //ASCII "a" umlaut
            rxbyte = 0xE1;
            break;
        case 0xF1: //ASCII "n" tilde
            rxbyte = 0xEE;
            break;
        case 0xF6: //ASCII "o" umlaut
            rxbyte = 0xEF; //was wrong in v0.86
            break;
        case 0xFC: //ASCII "u" umlaut
            rxbyte = 0xF5;
            break;

        //accented -> plain equivalent
        //and misc symbol translation
        case 0xA3: //sterling (pounds)
            rxbyte = 0xED;
            break;
/*      case 0xB0: //degrees symbol
            rxbyte = 0xDF;
            break;
*/      case 0xB5: //mu
            rxbyte = 0xE4;
            break;
        case 0xC0: //"A" variants
        case 0xC1:
        case 0xC2:
        case 0xC3:
        case 0xC4:
        case 0xC5:
            rxbyte = 0x41;
            break;
        case 0xC8: //"E" variants
        case 0xC9:
        case 0xCA:
        case 0xCB:
            rxbyte = 0x45;
            break;
        case 0xCC: //"I" variants
        case 0xCD:
        case 0xCE:
        case 0xCF:
            rxbyte = 0x49;
            break;
        case 0xD1: //"N" tilde -> plain "N"
            rxbyte = 0x43;
            break;
        case 0xD2: //"O" variants
        case 0xD3:
        case 0xD4:
        case 0xD5:
        case 0xD6:
        case 0xD8:
            rxbyte = 0x4F;
            break;
        case 0xD9: //"U" variants
        case 0xDA:
        case 0xDB:
        case 0xDC:
            rxbyte = 0x55;
            break;
        case 0xDD: //"Y" acute -> "Y"
            rxbyte = 0x59;
            break;
/*      case 0xDF: //beta  //mucks up LCDSmartie's degree symbol??
            rxbyte = 0xE2;
            break;
*/      case 0xE0: //"a" variants except umlaut
        case 0xE1:
        case 0xE2:
        case 0xE3:
        case 0xE5:
            rxbyte = 0x61;
            break;
        case 0xE7: //"c" cedilla -> "c"
            rxbyte = 0x63;
            break;
        case 0xE8: //"e" variants
        case 0xE9:
        case 0xEA:
        case 0xEB:
            rxbyte = 0x65;
            break;
        case 0xEC: //"i" variants
        case 0xED:
        case 0xEE:
        case 0xEF:
            rxbyte = 0x69;
            break;
        case 0xF2: //"o" variants except umlaut
        case 0xF3:
        case 0xF4:
        case 0xF5:
        case 0xF8:
            rxbyte = 0x6F;
            break;
        case 0xF7: //division symbol
            rxbyte = 0xFD;
            break;
        case 0xF9: //"u" variants except umlaut
        case 0xFA:
        case 0xFB:
            rxbyte = 0x75;
            break;
        default:
            break;
    }

    lcd.print(rxbyte);  //otherwise a plain char so we print it to lcd
    return;
}


Nu zit ik met het volgende probleem. ik wou graag met een IR afstand bediening LCD smartie bedienen.
Dat lukt wel aardig met dit script

C:
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
/*
Samsung Afstandbediening codes

0 = -1175099550
1 = -516040152
2 = -1386715550
3 = 657459652
4 = -174484856
5 = 1931099650
6 = 742730860
7 = 1167253836
8 = 1747313982
9 = -1954213656
Volume up = -1752382022
Volume down = 1752382022
up = -1033113532
down = -989874618
left = 1972149634
right = 1400905448
enter = -1963903704
play = 1784778242
pause = -520862424
stop = -932981048
next = -314190012
previous = 1972149634
*/

#include <IRremote.h>

int RECV_PIN = 0;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(115200);
  irrecv.enableIRIn(); // Start the receiver

}

void loop() {
  if (irrecv.decode(&results)) {
    
    long int decCode = results.value;
    Serial.println(decCode);
    switch (results.value) {
      
      case 1784778242:
        Serial.println("1");
        
        break;

    }

    irrecv.resume(); // Receive the next value
  }
}


Maar ik ben geen programmeur helaas! Het eerste probleem is als LCD smartie data naar de arduino stuurt kan ik op een een of andere manier niet meer data naar de computer zenden. Maar nu het belangrijkste dit script te implementeren in het script van LCD smartie. Dus ik heb op Google zitten te speuren en ik dacht het moet te doen zijn met interrupts. Ik heb het geprobeerd met een serial interrupt en dat werkte wel aardig totdat ik in de interrupt Serial.println("1"); zette dat schijnt niet te kunnen.

Wie kan helpen om het werkend te krijgen want dit is erg leuk voor in mijn toekomstige HTPC!

[ Voor 0% gewijzigd door RobIII op 05-03-2013 21:02 . Reden: Code tags toegevoegd ]


  • Saven
  • Registratie: December 2006
  • Laatst online: 20:24

Saven

Administrator

zet je code even tussen de [code][/code] tags, maakt het wat beter te lezen :)

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Ik heb even heel erg snel de code bekeken, maar volgens mij is 'serial' gelinkt aan de IR decoder. Maar je kunt waarschijnlijk niet naar de IR decoder schrijven.

Ik heb het vermoeden dat je juist naar de display (lcd) wilt schrijven middels de lcd.setCursor en lcd.Print methodes.

Als dit niet het probleem is, geef dan wat duidelijker wat dan wel precies je probleem is. Welke foutmelding krijg je? Heb je al een debugger op de code gezet?

Ik snap dat dit soort projecten leuk zijn, maar enige inzet wordt wel verwacht.

If it isn't broken, fix it until it is..


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op zondag 03 maart 2013 @ 21:00:
Maar ik ben geen programmeur helaas!
Dat is inderdaad helaas... zie verderop in deze post waarom.

Dit valt onder Kan iemand even...? en scriptrequests en gaat dus niet werken zo. We willen iedereen best een handje helpen door ze in de juiste richting te wijzen maar als je 't "zware werk" door anderen wil laten verrichten dan heb je meer aan Devschuurder werven? Gebruik Vraag & Aanbod! ;)

Verder wil ik je graag welkom heten op GoT ( :W ) en je, ondanks dit slotje, een leuke tijd wensen hier. Daar wil ik dan meteen even bij vermelden dat 't handig is om, voortaan, bij 't openen van een topic onze Quickstart te hanteren; dan kan het niet (meer) mis. Zoals je daar ook zult lezen verwachten we hier op GoT, mogelijk meer dan je van elders gewend bent, wat eigen inzet. En dan als laatste tip: als je code post stellen we 't op prijs als je code tags gebruikt; dat maakt het geheel allemaal wat leesbaarder :Y)
Verwijderd schreef op zondag 03 maart 2013 @ 21:00:
naar een paar uur zoeken kopiëren en plakken :P ben ik op dit script gekomen
Ja...en nee :P Het werkt mogelijk, maar je hebt er vele, vele, malen meer aan als je wéét wat wat doet en waarom en hoe en... Dan hoef je namelijk niet te knippen en plakken en je vingers te kruisen en bidden dat 't werkt maar schrijf je zélf iets dat precies doet wat je wil (nadat je een aantal iteraties bugs hebt opgelost :+ ). Van knippen/plakken is nooit iemand wijzer geworden en als je er voor kiest deze manier te blijven "hanteren" om te ontwikkelen dan denk ik dat je je even de vraag moet stellen of je eigenlijk wel wil ontwikkelen. Zo ja: cool! Welkom in de wondere wereld van 't programmeren! *O* Zo nee, even dikke vrienden, we hebben allemaal onze dingen die we wel/niet leuk vinden, maar dan is 't verstandig(er) dit over te laten aan iemand die 't wél kan net zoals je bij hartproblemen ook niet zelf aan 't hobbyen gaat met medicijnen (en defibrillators.... *CLEAR* :+ ) maar naar een cardioloog gaat ;) Het begint natuurlijk met kleine stapjes, die weg hebben we hier allemaal bewandeld, maar dan is knippen/plakken/bidden niet de juiste eerste stap ;)

Open overigens gerust een nieuw topic (voorgenoemde punten in acht nemend) mocht je toch meer geprobeerd/gezocht/gevonden hebben dan hier in je topicstart te vinden is en je dus wel degelijk op zoek bent naar een juiste richting i.p.v. iemand die het "even voor je doet".

[ Voor 37% gewijzigd door RobIII op 05-03-2013 21:05 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Dit topic is gesloten.